项目场景:
S32K144芯片和工控机使用串口通讯(周期性收发数据)
问题描述
数据传输过程中数据不时出现S32k144串口无法接收的情况,重复重新打开串口也无效果,只有重启才能恢复。
原因分析:
1.用示波器看出现错误时候,接收引脚是否还有串口接收数据(验证数据有)
2.用示波器看出现错误时候,在中断中用个引脚做拉高拉低,判断中断是否能够进入(能够进入)
3.仿真看出现错误的时候和正常的时候,寄存器的差异(有差异)
正常时候:
不正常时候:
发现LPUART0->CTRL寄存器全部为0;导致无法进入中断;
猜错:
软件原因:对改寄存器有修改的地方,改代码是官方的驱动
硬件原因:CPU存在BUG
解决方案:
1.检查到LPUART0->CTRL寄存器全部为0时候,修改为正确值
///串口引脚抖动,导致LPUART0->CTRL为0,无法进入中断(
///具体原因还不清楚:芯片或者SDK驱动问题)
taskENTER_CRITICAL();
if (LPUART0->CTRL == 0 ) {
LPUART0->CTRL = 0x0F240000;
}
taskEXIT_CRITICAL();
2.寻求NXP官方FAE
后序
经过调查发现是官方SDK代码有对传输错误的进行处理:产生传输错误时候,会关闭串口中断
后序解决方案
在SDK中把这些标志位清除就可以了