你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L011驱动IrDA模块TFDU4101:只能收到一次数据

[复制链接]
Neo2023 提问时间:2023-7-19 17:57 / 未解决
最初的问题已经解决\衍生的新问题待高人解答
接收函数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模式下可以看到接收硬件只有第一次主循环中能收到正确的数据,再次停到断点处,就收不到数据了,很奇怪。
image.png
image.png
收藏 评论4 发布时间:2023-7-19 17:57

举报

4个回答
废鱼 最优答案 回答时间:2023-7-24 08:34:38

Neo2023 发表于 2023-7-20 22:26
您好,非常感谢指导!</p>
<p>似乎确实存在一个“超时”:

[md]断点导致产生了溢出中断,需要重新初始化串口。

废鱼 回答时间:2023-7-20 10:30:03

发生类似情况时,检查一下程序读取时是否判断到接收溢出了,接收的时候尽量不要加断点。接收的时候超时尽量超过1000。如果可以用尽量用中断接收,通过回调函数进行接收完的数据处理。

Neo2023 回答时间:2023-7-20 22:26:05

废鱼 发表于 2023-7-20 10:30
发生类似情况时,检查一下程序读取时是否判断到接收溢出了,接收的时候尽量不要加断点。接收的时候超时 ...

[md]您好,非常感谢指导!

似乎确实存在一个“超时”:

只要把初始化函数 MX_USART2_IRDA_Init() 和接收函数一起放到主循环里,每次初始化完立刻进接收,是可以收到数据的。但是,如果在初始化函数和接收函数之间加了断点,就收不到数据了。

这...究竟是哪里超时了呢?

Neo2023 回答时间:2024-1-4 12:10:04

废鱼 发表于 2023-7-24 08:34
断点导致产生了溢出中断,需要重新初始化串口。

[md]非常感谢,就是这个原因!小弟不才,到今天才明白过来。祝您2024心想事成,万事如意~

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版