STM32/STM8技术william hill官网
直播中

石利军

7年用户 932经验值
私信 关注
[问答]

STM32L011驱动IrDA模块TFDU4101只能收到一次数据的原因?

最初的问题已经解决衍生的新问题待高人解答

接收函数HAL_UART_Receive()在if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) == SET)这个判断分支中发现接收寄存器还么有被读取,便又有新的数据进来,发生了溢出,从而停止了整个接收过程。

所以这个问题的出现与IrDA模式并没有什么关系,就是串口调试方法不当导致的。

HAL_UART_Receive()后面进行多次比较长时间的Delay再打断点,还是会有同样的问题。猜想这可能是CubeIDE调试模式断点的具体实现方式有关?



另外,还发现 (i=0;i<10;i++) rx_data=i;  调试时数组标号和数组值错位相等的情况,太诡异了

rx_data[1]=4, rx_data[2]=5, ... 实在令人费解!



以下是最初的提问内容:

仅仅在CuBeMX中配置了USART2为IrDA模式,调用HAL_IRDA_Receive/Transmit,利用两个硬件一收一发,在Debug模式下可以看到接收硬件只有第一次主循环中能收到正确的数据,再次停到断点处,就收不到数据了,很奇怪。




回帖(1)

王峰

2024-3-8 11:12:56
断点导致产生了溢出中断,需要重新初始化串口。
举报

更多回帖

×
20
完善资料,
赚取积分