|
2块板子是靠串口通信的,MCU为103RCT6,我们一个项目在做破坏性测试的时候,TXD,RXD短接起来,并且用一个USB转TTL以10ms速率一次发大几百,上千个数据,过几分钟最多十几分钟那块作为串口主机的那块板子就发不出数据了(DMA发送),我们用的HAL库1.8.4,软件排查下来是huart结构体有个gstate处于busy状态了,而理论上发送完成后进入串口中断就会置为ready,往上排查是不知什么原因是把TCIE(发送完成中断)关闭了导致无法置为ready,但是感觉没啥地方是关TCIE中断的,我把HAL库升级到1.8.6就好了,我想咨询下,对于我刚刚描述的问题,HAL库1.184,1.186两者之间串口优化了什么?怎么解决上述我出现的问题的?我需要和客户那边解释,谢谢! |
KEILMDK每次都要手动选Reset and Run吗 不然下载到板子上得重启电源才行 求解答
STM32F103的USB的虚拟串口,串口助手打开的时候会收到两条数据,第一条数据是前5秒串口助手未打开时发送的,这怎么解决?
询问电源纹波对芯片的影响
STM32F103C8T6 上电后无法通过串口发出数据的问题?
VL53L5CX无法使用
stm32f107裸机+HR911105A+lwIP 1.31 SYN发送失败的问题
MCU的ADC进行电压采集时,外部输入阻抗最大能到多少?
STM32F103C8T6如何将变量定义到指定地址
STM32F103 做的USB CDC 串口调试助手打不开
DSP傅里叶变换如何在f103CBT6上使用
微信公众号
手机版
只要程序按照HAL库设计的逻辑流程运行一般是不会有啥状况的。如果说程序运行偶尔跑乱而没能及时重置gstate状态的话,是可能因为
gstate的busy而无法再次启用uart。
我这边也查看了HAL库1.8.6版本的相关更新记录,它的确有针对UART通信中因为OVR超时错误处理方面做了API的重新设计,之前版本
的API可能会在发生溢出错误时卡住,导致程序无法继续运行。换言之,通过重新设计API即使在遇到溢出错误时也能正确处理并继续运行,
从而提高了系统的稳定性与可靠性。结合到这里,API重新设计后之前可能出现的状态变量不能及时重置的,现在可以了。说得通俗点,就是
程序方面加强了应急处理,让运行更稳健。
你的代码,如果发送时检查到gstate若为busy,不妨给个超时,超时到了还不行,你完全可以在启动UART发送前手动将gstate改为ready,
至于你跟客户怎么解释,这个没什么。软件做些完善是很正常的事情,相信你可以解释。
我也看了更新的,但是我们用的是dma发送,您上面提到的超时没有用dma的。我们的客户不好糊弄的,不是说我说1.8.4有漏洞,需要加个超时保护就好,我们要给他们解释前面的程序为什么会卡死,1.8.6的库为什么不会出了,改动的地方在哪,逻辑要分析的透透彻彻,清清楚楚,这问题才会翻篇的
嗯 也是应该的。 这个可能要结合代码细看下, 相信可以找到原因。