朋友找我调试一款采集电路 ucosII+stemwin+24C02+stm32F4
问题是第一批产品运行了一个星期之后 死机
死机分析
第一步:将驱动模块化之后 单独调试跑裸机 会不会死机
结果发现单独调试触摸屏的时候运行了5个小时之后 死机了
第二步:将不必要的代码去除掉
结果发现原理图上使用的是SPI驱动 但证实情况是IIC驱动
第三步:使用逻辑分析仪查看 触摸屏有触摸的时候波形与无触摸时候的波形差异,然后在此基础上分析死机之后各自的情况
结果发现死机之后逻辑分析仪始终检测不到有触摸的波形,但是单片机的模拟IIC代码确实是在运行的
第四步:由以上分析可以判断触摸屏的IIC被挂起了
解决办法:每次读写触摸屏的之前先判断IIC是否被挂起 如果挂起了在scl引脚上发送9个连续电平翻转即可解除挂起
第五步:24C02也是使用模拟IIC 也有可能出现以上情况 读写之前也要判读IIC是否挂起。
结论:建议使用硬件IIC stm32F103系列不推荐 本人推荐stm32F107系列
因为本人调试ublox的IIC 就是用的stm32F107系列调通的
分析为什么stm32F103的模拟IIC这么难用呢
第一步:查看stm32F103引脚电平翻转的情况 做如下实验:while{scl=0;scl=1;}跑裸机
结果发现示波器调成自动 显示并无异常就像晶振的波形一样不过只要1.8M
第二步:使用逻辑分析仪分析观察该波形
结果发现发现每次在第四个周期都会出现波形异常
结论: 这可能就是模拟IIC在高速情况下比如100K-400K 的时候难用正真原因 |