OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1950|回复: 5

DMA中断,无法进入呢,哪位帮我看看,感谢感谢

[复制链接]

13

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2018-3-13
在线时间
41 小时
发表于 2018-6-23 23:55:03 | 显示全部楼层 |阅读模式
10金钱
stm32f103ze的板子主函数:
int main(void)
{
    u8 SEND_BUF[256]= {0};
    RS485_Init(115200);
    Led_Init();
    delay_init();
    LED1 = 1;
    LED0 = 1;
    RS485_TX_EN = 1;
    MYDMA_Config(DMA1_Channel7,(u32)&USART2->DR,(u32)SEND_BUF,256);//DMA1通道7,外设为串口2,存储器为SEND_BUF,长256.
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
    while(1)
    {
        USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE); //使能串口2的DMA发送
        MYDMA_Enable(DMA1_Channel7);//开始一次DMA传输!
        delay_ms(1500);
    }
}

DMA配置,基本是原子的程序:
void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
    DMA_InitTypeDef DMA_InitStruct;
    NVIC_InitTypeDef NVIC_InitStruct;

    DMA1_MEM_LEN=cndtr;

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);        //使能DMA传输

    DMA_InitStruct.DMA_BufferSize=cndtr;//每次传输的数据量,大于1小于65535,即0x10000.
    DMA_InitStruct.DMA_DIR=DMA_DIR_PeripheralDST;////数据传输方向,从内存读取发送到外设,外设作为数据传输的目的地
    DMA_InitStruct.DMA_M2M=DMA_M2M_Disable;
    DMA_InitStruct.DMA_MemoryBaseAddr=cmar;
    DMA_InitStruct.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;
    DMA_InitStruct.DMA_MemoryInc=DMA_MemoryInc_Enable;
    DMA_InitStruct.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
    DMA_InitStruct.DMA_Mode=DMA_Mode_Normal;
    DMA_InitStruct.DMA_PeripheralBaseAddr=cpar;
    DMA_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;
    DMA_InitStruct.DMA_Priority=DMA_Priority_VeryHigh;

    DMA_Init(DMA_CHx, &DMA_InitStruct);

    NVIC_InitStruct.NVIC_IRQChannel=DMA1_Channel7_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority= 1;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
    NVIC_Init(&NVIC_InitStruct);
               
    DMA_ITConfig(DMA1_Channel7,DMA1_IT_TC7,ENABLE);

}
//开启一次DMA传输
void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)
{
    DMA_Cmd(DMA_CHx, DISABLE );  //关闭USART1 TX DMA1 所指示的通道
    DMA_SetCurrDataCounter(DMA_CHx,DMA1_MEM_LEN);//DMA通道的DMA缓存的大小
    DMA_Cmd(DMA_CHx, ENABLE);  //使能USART1 TX DMA1 所指示的通道
}


//void DMA1_Channel7_IRQHandler(void)
//{
//    if(DMA_GetITStatus(DMA1_IT_TC7)!=RESET)
//    {
//        LED0=~LED0;
//    }
//                 DMA_ClearITPendingBit(DMA1_IT_TC7);
//}

void DMA1_Channel7_IRQHandler(void)
{
        if((DMA1->ISR)&(1<<25))            //判断传输完成中断位是否置位
        {
                LED1=0;
        }
        DMA1->IFCR|=1<<25;         //清除完成传输中断
}


.S文件的中断的名称
DMA1_Channel1_IRQHandler
DMA1_Channel2_IRQHandler
DMA1_Channel3_IRQHandler
DMA1_Channel4_IRQHandler
DMA1_Channel5_IRQHandler
DMA1_Channel6_IRQHandler
DMA1_Channel7_IRQHandler


每隔1.5s,串口2发送一次数据,数据能用串口收到,就是进不到中断,反转LED电平



最佳答案

查看完整内容[请看2#楼]

试试先改我们例程,不要用你移植的,直接在例程上修改,试下。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-6-23 23:55:04 | 显示全部楼层
试试先改我们例程,不要用你移植的,直接在例程上修改,试下。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-6-24 01:43:33 | 显示全部楼层
试试先改我们例程,不要用你移植的,直接在例程上修改,试下。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-6-24 01:43:38 | 显示全部楼层
试试先改我们例程,不要用你移植的,直接在例程上修改,试下。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-6-24 01:43:40 | 显示全部楼层
试试先改我们例程,不要用你移植的,直接在例程上修改,试下。
回复

使用道具 举报

13

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2018-3-13
在线时间
41 小时
 楼主| 发表于 2018-6-26 23:10:08 | 显示全部楼层
正点原子 发表于 2018-6-24 01:43
试试先改我们例程,不要用你移植的,直接在例程上修改,试下。

找到了错误,系 DMA_ITConfig(DMA1_Channel7,DMA1_IT_TC7,ENABLE);配置错误
应为 DMA_ITConfig(DMA1_Channel7,DMA1_IT_TC,ENABLE);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 08:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表