STM32+FreeRTOS+lora网关与数据采集板开发
项目开发使用STM32F103作为数据采集和网关板主控。采用易佰特e22-900作为lora通讯芯片。主要负责程序开发,总结开发难点及问题如下。
1、通讯配置复杂,组网通讯困难。
2、上位机数据设置保存参数及BootLoader等程序分配flash。
3、组网通讯速率过慢。
1、通讯配置复杂,组网通讯困难。
首先要使双方lora通讯上,空中速率,发送模式,数据地址和信道必须匹配否则无法通讯。
另外配置需要更改M0,M1的引脚,或使用指定配置指令。
由于项目采用透传,lora通讯速率较慢,大量lora组网后数据拥塞问题严重故需要给每个设备分配SN或MAC用于区分每个设备。
刚下载数据手册的时候,下载了老版本的手册,导致引脚没对应对,测了一天。
这个系列的设备用的都是串口通讯,这个感觉也很影响通讯速度,因为串口本身就很慢。
另外最开始写驱动程序的时候,这个图很容易让人误解,在透传模式下,数据包头是不需要地址的,配置的时候发现的。只有在定点传输时必须使用目标地址作为包头。
另外注意在透传模式下,不要启用中继功能,开启之后无法透传通讯。
2、上位机数据设置保存参数及BootLoader等程序分配flash。
最开始用的老版本的手册没有AT指令,后来找到新的手册。可以通过AT指令来配置参数。
在网关板上用的是128K的flash的F103,使用了一个外扩的W25Q32的Flash芯片用于扩大存储量。而数据采集板用的是64K的。大概10K的Bootloader代码,用了剩下的都是APP代码。采用版本号来区分代码版本,每次更新都必须是更高版本的,无法退版本。在Flash芯片内划分出两个版本的代码,每次上电都检测版本,每次上电都检测版本,如果STM32上版本低则更新APP。如果有更新代码,则将代码更新至flash后,更新flash上代码版本,再从flash读到单片机上,再更新单片机版本号。以此来避免更新失败。
目前BootLoader做的相对简单,另外也只有crc校验,没有进行加密,只是上电后等待一段时间,如果没有更新数据则跳转至APP,之后可以更新。
另外目前在flash还分配了一块区域用于存储重要配置信息,如网关静态地址,lora参数,串口参数等。至于用于配置的上位机由其他人完成。
3、组网通讯速率过慢。
该问题难以解决,一是因为lora本身通讯速率就很慢,另外本设计采用串口通讯,其中过使用串口通讯也次数很多。还有就是为了避免数据混乱,设计采用了相对复杂的通讯报文。改变空速,串口速率、信道及报文格式也很难提速。该问题难以解决,只能降低影响,或采用其他方案。但是lora的通讯距离经过测试,相对其他无线通讯来说确实非常远。
作者:huayidw