-
问题描述:客户在使用串口的过程中会概率性的出现丢数据和卡死的情况,表现为串口中断不再响应或者进入Hardfault中断;

解决办法:
1、检查串口是否会产生ERROR事件,若产生ERROR事件,需要对ERROR事件进行处理,SDK自带的ERROR事件处理完以后会关闭接收,如果需要连续接收需要在Uart_RxCallback函数UART_EVENT_ERROR事件里面设置重新启动串口接收;

2、检查串口接收模式为连续接收模式还是非连续接收模式,如果为非连续接收模式,发送方为不定长时间间隔的数据过来就会存在漏接收的情况,这种情况发生在串口Uart_RxCallback执行完未能立即重新启动串口接收,需要在主循环里面启动接收就会有一定的非接收窗口期,这种情况主要在TIMEOUT中断模式上比较容易出现。解决这个问题就需要把串口的接收模式配置为连续接收模式不要开TIMEOUT中断,只配置LINFlexD_UART_DRV_InstallRxCallback回调函数就行,另外设置接收buf为1个字节,在Uart_RxCallback回调函数的UART_EVENT_RX_FULL事件里面通过LINFlexD_UART_DRV_SetRxBuffer函数继续设置一个字节的接收缓冲区,继续下一次接收,重复不断!

3、检查Flash的擦写代码执行位置是否合理,如果用户数据存放的Flash和运行程序的Flash在同一个PFlash,在操作PFlash的时候就需要关闭全局中断再操作,这样就会造成其他的中断任务被打断或者出错进入hardfault,建议PFlash的操作在数据接收任务不是很急迫的时候进行,比如串口或者CAN空闲的时候或者在掉电前关闭外设后再去操作Flash,起到一个保险的作用。

-
X xianghan 从 SDK BUGS 移动了该主题
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...