STM32串口接收DMA中断不能进

2019-07-14 14:49发布

结果就是void USART1_IRQHandler(void)正常 可以进来
{
//             unsigned char num=0;
//    if(USART_GetiTStatus(USART1,USART_IT_IDLE) == SET)
//    {
//       num = USART1->SR;
//       num = USART1->DR; //清USART_IT_IDLE标志
//       DMA_Cmd(DMA1_Channel5,DISABLE);    //关闭DMA
//      num = 128 -  DMA_GetCurrDataCounter(DMA1_Channel5);      //得到真正接收数据个数  
//      receive_data[num] = '';
//      DMA1_Channel5->CNDTR=128;       //重新设置接收数据个数        DMA_Cmd(DMA1_Channel5,ENABLE);  //开启DMA
//     //  receive_flag = 1;           //接收数据标志位置1
//                        DMA_Cmd(DMA1_Channel5,ENABLE);  //开启DMA
//                        printf("%s ",receive_data );               
//    }
}

void DMAChannel5_IRQHandler(void)
{
    if(DMA_GetITStatus(DMA1_IT_TC5) != RESET)
    {
      TestLive();
      DMA_ClearITPendingBit(DMA1_IT_TC5);
    }
        //进不来

}

说明:我百度找了找别人的问题,一种是中断函数名字的问题,我这里不存在这个问题,如图
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
山川1998
2019-07-15 04:25
zsjjx 发表于 2019-1-3 13:06
我用的是串口空闲中断+DMA,DMA干的活就是搬运串口数据(如果有则一直搬),直到串口出现空闲中断,再由中断函数中的用户代码,接着折腾串口数据。我认为这个思路是对的;你的思路,我还真没考虑过。

是的 是搬完了 再进空闲中断的
void USART1_IRQHandler(void)
{
             unsigned char num=0;
        memset(receive_data,0,128);..此后看到清空了

一周热门 更多>