打印
[STM32F1]

stm32串口空闲中断的问题,接收一帧数据时多次进入IDLE中断

[复制链接]
1347|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
      现在想实现串口空闲中断+DMA接收的方式。在网上查的资料说stm32串口空闲中断在接收到一帧数据时,数据接收完毕后会进入一次IDLE中断,通过串口助手发送一帧数据时,发现经常会进入两次中断,很少进入一次中断。如果一帧数据分两次进入了IDLE中断,DMA在IDLE中断里的接收数据就有误了。开始以为时串口Rx引脚的问题,后来Rx引脚配置成上拉模式还是不行。
      中断处理函数
void USART3_IRQ_User(void)
{
                uint8_t i;

    if(__HAL_UART_GET_FLAG(&huart3,UART_FLAG_IDLE) != RESET)
    {
                                __HAL_UART_CLEAR_IDLEFLAG(&huart3);

        HAL_UART_DMAStop(&huart3);
        USART3_RxCount =  RX_BUFFER_SIZE-__HAL_DMA_GET_COUNTER(&hdma_usart3_rx);
                                HAL_UART_Receive_DMA(&huart3,USART3_RxBuffer,RX_BUFFER_SIZE);
                                receive_over = 1;
                       
                                printf("count=%d\r\n",USART3_RxCount);
                                for(i = 0;i<USART3_RxCount;i++)
                                {
                                                printf(" %d",USART3_RxBuffer[i]);
                                }
                                printf("\r\n");
     }
}


使用特权

评论回复
沙发
sonicll| | 2020-3-9 15:21 | 只看该作者
你先用示波器看看串口助手发送的数据帧是什么样的,是一个字节紧挨着一个字节,完全没有空闲吗,也许是串口助手的问题

使用特权

评论回复
板凳
cry1109|  楼主 | 2020-3-9 16:14 | 只看该作者
  被串口助手坑了。换个串口助手立马好了。

使用特权

评论回复
地板
香水城| | 2020-3-16 11:46 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

172

帖子

4

粉丝