由于手上项目用的STM32L072的芯片,所有只能使用Cube库来写代码,利用软件配置好串口的各项参数后,使用串口中断的方式收发数据,发数据是正常的,但是在接收数据的时候总是会出现溢出错误,找遍了网上的解决办法也没找到问题,希望大神指导一下。 我在main一开始就只配置了时钟和串口,然后HAL_UART_Receive_IT(&huart1,uart1_rx_buf,1)。在回调函数中也同样开启一个字节的接收中断,而每次只能收到一次中断,由于ORE错误,所有进不去回调函数,因此收不到数据,不知道什么原因引起的,还请论坛里的大神指导一番。 下面贴出代码 main push使用的是串口1,发送数据没有问题 这是我出口的初始化函数 中断入口,每次从这里跳进去的时候,串口的RXNE标志就被清了 这是进不去回调的溢出错误 |
2 STM32串口只有一个硬件BUF,个人认为是硬伤。115200波特率的情况下,大家算下一个字节是多少us?
只要串口中断被卡主住这么长时间不处理,就造成溢出。
3 把中断优先级提高、用DMA、人工优化。
评分
查看全部评分
应该是下图中第二种情况了 RXNE = 0
评分
查看全部评分
但是在USART1_IRQHandler中调用串口HAL_UART_IRQHandler的时候RXNE会自动被清除,也会造成进不去回调。 我发现在USART1_IRQHandler中不管执行什么操作RXNE都会被自动清除,都还没有去读RDR的内容它就自己清零了,到底是为什么呢
但是都还没去读RDR寄存器它就自动被清了,导致我后面接收不了数据
两种方法:
1、把中断优先级提高;
2、用 DMA(推荐)
评分
查看全部评分
评分
查看全部评分