前些日子用stm32做了一个小项目,现在对项目中出现的一些奇怪问题总结如下。这里不做代码层面的探讨。
首先大致介绍一下项目:该项目希望实现高密的远程数据采集及控制。下位机主控芯片是STM32F1系列芯片,TIAD转换芯片,同时还有Lora射频模块实现无线通信,GPS模块及若干继电器等。
(一)
最初遇到的一个问题是一些Lora模块无法建立通信。Lora模块的具体使用方法这里不做介绍,如要实现点对点通信必须要先向模块发送目标模块的地址与信道信息(实际就是两字0,1)。但是发送数据的时候发现凡是地址或信道包含0x00的模块均难以正常发送,如向0x0A0A模块发送数据后,再向0x0001模块发送数据则必失败。无意中注意到C语言字符串是以 '\0' 结尾的,其ASCII码恰为0x00,而在串口发送数据的时候恰好用到的C语言中字符串处理函数,直接造成0x00被当做字符串结尾二没有发送,后面的额数据也被舍弃。
解决办法也很简单,直接使用STM32库函数中的串口发送函数将地址发送出去。
(二)
第二个问题就比较蹊跷,程序烧到板子里面,第一次跑一遍过程,一切正常,控制与数据采集都没有问题。但如果跑完一遍数据采集之后,在想采集第二次则必然出错,发出的指令对板子不起任何作用,完全按着定义的默认情况跑。因为板子在是靠几个全局变量决定其状态的,命令也是修改全局变量的值。于是就检查全局变量的情况,无论如和修改全局变量,新定义或是改变全局变量的形式,问题依然存在。后来通过串口每个一段时间就打印一下相关全局变量的值,发现在采集数据前一切正常,采集数据之后相关的全局变量消失了,串口在应该出现全局变量的位置直接打印了下一个字符。
推测是内存出了问题,检查发现程序占用内存51k左右,而芯片内存仅48k,更换64k内存芯片问题解决。
(三)
这个问题更是奇怪,板子测试时一切正常,但接上GPS模块,工作一段时间后就会不向应任何指令。难道内存不足的问题又出现了?还是程序跑飞了?进一步调试发现程序在不接GPS模块的时候不会出现问题,同时接不接GPS模块对程序需要

本文是对STM32项目开发过程中遇到的问题进行的总结,包括Lora模块通信失败、程序运行一次后无法再次启动数据采集以及GPS模块导致的中断问题。解决方案分别涉及避免C语言字符串结束符影响串口发送、增加内存容量以及正确管理GPS中断。
最低0.47元/天 解锁文章
4048

被折叠的 条评论
为什么被折叠?



