最近在做一个数据采集板卡,芯片选型的是STM32F407VET6,现在在开发板上进行实验。
该板卡的设计需求是:采集CAN总线数据、MPU-6050姿态数据和GPS数据,附带上时间信息(精度为毫秒)写入FAT文件系统的TF卡中。
现在使用的方案是:
USART1实现printf作为调试使用,
USART2接原子的GPS,
IIC(硬件IIC)用来接收MPU-6050的数据,放在10ms启动一次的定时器里(TIM4)
TIM3每1ms启动一次,用来计时
SDIO+FATFS来存储信息(暂时没有上)
TJA1050芯片用来接受CAN数据(暂时没有上)
现在的优先级设置是:TIM3优先级最高,其次是USART2和TIM4。
现在经常会运行着运行着就整机卡死了,串口数据也不接收了,主循环里我写了个呼吸灯也不闪了。
而且有的时候半天都不死机,有的时候5分钟就死机了。
我猜测可能是TIM4的IIC或者是USART2的中断中有一个死机了(考虑到USART的程序很简单,就是一个大小不变的环形链表,所以应该是IIC死机了,我如何才能准确的探知问题呢?)
如果我将USART2的优先级设置的很高,经常IIC就挂了(已验证)
如果我将IIC的优先级设置高一点,一旦死在IIC里面就出不来了,就算不考虑这个,更重要的是,经常丢串口的数据。
在此求助各位坛友怎么办
Code.zip
(15.81 MB, 下载次数: 885)
2017-3-7 09:47 上传
点击文件名下载附件
昨天刚找到,硬件IIC的问题,程序动不动就跑飞,换了软件IIC稳定跑了一整天了
如果主函数还在跑,说明没死机。
仿真单步看,就行了
主函数司机,其他代码运行?你设断点,看看死哪里?
一周热门 更多>