STM32F4多路数据采集死机和丢数据的问题

2019-07-20 16:12发布

最近在做一个数据采集板卡,芯片选型的是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 上传 点击文件名下载附件




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
TsingJyujing
1楼-- · 2019-07-20 21:21
正点原子 发表于 2017-3-13 22:06
主函数司机,其他代码运行?你设断点,看看死哪里?

昨天刚找到,硬件IIC的问题,程序动不动就跑飞,换了软件IIC稳定跑了一整天了
正点原子
2楼-- · 2019-07-21 01:49
代码里面在可疑的地方,加入一些prinf,打印关键数据,可以辅助分析问题。另外,直接仿真,到死机的时候,看程序怎么跑的。
TsingJyujing
3楼-- · 2019-07-21 07:11
 精彩回答 2  元偷偷看……
正点原子
4楼-- · 2019-07-21 11:13
TsingJyujing 发表于 2017-3-8 08:37
请教一下原子哥,怎么截止在主程序跑飞之前将程序停下来?
我已经printf了一下,停在主程序的哪里的都有 ...

如果主函数还在跑,说明没死机。
仿真单步看,就行了
TsingJyujing
5楼-- · 2019-07-21 16:54
 精彩回答 2  元偷偷看……
正点原子
6楼-- · 2019-07-21 20:17
TsingJyujing 发表于 2017-3-9 08:54
主函数已经死机了,中断还在莫名其妙的运行(如串口),但是收不到数据……

主函数司机,其他代码运行?你设断点,看看死哪里?

一周热门 更多>