分享STM32F407数据采集板卡开发踩的坑

2019-07-20 14:45发布

本帖最后由 TsingJyujing 于 2017-5-6 08:57 编辑

需求需要采集车辆的加速度信号,转速、扭矩、车速信号(CAN)以及GPS信号(主要是GPS时间和定位信息)代码在此:https://github.com/TsingJyujing/Vehicle-Data-Acquistion-Board
方案初定STM32F407最小板+MPU6050+探索者GPS+TJA1050CAN收发器+可调稳压器(24V~28V车电->5V供电转换) 调试使用一个转串口和ST-LINK(SWD接法)。 软件上,准备使用定时器定时查询MPU-6050的数据,串口接收GPS的GPGGA报文,CAN收发器+CAN控制器+CAN中断接受其它数据。
遇到的所有的坑
坑1:便宜的ST-LINK靠不住ST-LINK买的是最便宜的15元的版本(USB-STLINK),经常断,而且极其不稳定,烧着就断了是家常便饭。解决方法: 用了自己的F4-Discovery上的ST-LINK,瞬间稳定了。
坑2:坑爹的STM32的IICSTM32的硬件实现和软件实现差不多,我曾经想过用IIC接收中断,真是Too Naive,光在发送(其实不论收发)的时候,只要IIC的中断稍微被打断一下,整个通信立刻崩溃掉了,经常需要关闭USART的中断才能正确收发信息,将信息放在TIM4中定期取数据,就要保证TIM4中断不能被嵌套。还不如使用软件中断。解决方法: 使用软件IIC收发,如果收发失败连续k次则休息p秒再重新初始化设备。
坑3:FATFS的移植
FATFS最新版好像是0.12b,但是因为更新幅度比较大,所以直接替换文件移植的方法肯定是不行的~ 之所以要移植因为要使用Append模式写入文件。解决方法:不移植了,直接使用旧版FATFS,需要以Append方式写入的文件在Open以后直接使用f_lseek(fp, f_size(fp));跳转到文件末尾,然后再Write就OK。
坑4:Optimize造成的程序错误
FATFS不能开Optimize,也就是只能是-O0优化,如果开了-O2优化,就会造成各种奇怪的错误。解决方法: 将FATFS的东西单独放到一个Group里面去,然后设置优化等级为-o0
坑5:使用C++造成的函数冲突:
使用C++编程的时候特别容易造成函数冲突。解决方法:Project-->Options-->Target选择Use MicroLIB选项。
坑6:IIC总线上拉无驮
虽然有一句GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉但是依旧不能正确使用IIC,但是接上示波器以后又欢快的跑起来了,我猜想是否因为IO口上拉能力不够造成的?解决方法: SCL线接2个IO口,控制其中一个即可,为什么会这样暂时不知道。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。