[其他ST产品]

STM32F412RET6:串口轮询发送阻塞等待TC(发送完成标志位),导致程序陷入死循环

[复制链接]
1454|0
手机看帖
扫描二维码
随时随地手机跟帖
两只袜子|  楼主 | 2023-1-9 08:55 | 显示全部楼层 |阅读模式
1、背景
         前段时间在做一个CANUSART的网关,使用的是STM32F412RET6,软件框架使用的是RT-Thread操作系统,主要外设资源使用了CAN1CAN2UART2UART3,在做通信压力测试时,发现CPU程序运**死了,通过STM32 ST-LINK Utility工具,排查到了程序陷入死循环:串口轮询发送阻塞等待发送完成标志位,bad core如下如所示:
181952oderzy9akh2t19d9.jpg
因排查了有些时间(代码白盒测试感觉已经查到头了),找不到根源,暂时加了超时机制措施,问题也暂时不复现了。

2、问题描述
          串口发送完成标志位因为什么没有被置位?

3、排查过程简述
         问题表象为串口发送完成标志位未置位,所以认为主要的排查方向有:
UART被关了
UART配置被写坏了
UART时钟被关了
TC位被误清了
以上①~③点,在试验的是出现“卡死”现象时,使用了stlink读取了相应寄存器信息,很遗憾,都正常。
④点代码白盒走查,查到头了,也没有发现程序任何时序链路能够清除TC标志位。

4、补充
① 代码白盒走查,演绎程序时序链路,分析TC位置位情况,感觉是正常的,附TC位在发送时行为时序图:
182304lxsp8p2z2gozv28u.jpg

② 在stm32 Errata sheett里有描述如下
182304tnass9gsfynrssqf.jpg
有可疑点
○ 数据还在传输当中
是否硬件上有错误,有可能串口的发送移位寄存器往TX线上传送数据一直未完成?
○ 在数据传输过程中打断数据传送
误操作将发送失能?但是监控到关于串口寄存器相关是正常的。。。。
  另外,CAN会影响UART吗?(好像共用一个时钟源,芯片内部总线有无冲突导致TC不被置位?)


社区各位大佬,在开发过程中有无遇到类似的问题?有什么建议的排查方向?

使用特权

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

本版积分规则

1867

主题

6389

帖子

7

粉丝