LoRa具有低功耗、传输距离远的特点,我觉得在工厂里面做智能传感器非常合适。在面包板社区看到了易智联LoRa评估板,毫不犹豫就申请了,争取用这个能做一个原型机。
LM401-Pro-Kit是基于STM32WLE5CBU6的Lora评估板。模组LM401内嵌高性能MCU芯片STM32WLE5CBU6,芯片内部集成了SX1262。评估板集成了ST-LINK下载器、LM401模组,并带有按键功能、LED指示、天线接口及预留接口等。模组留出的接口很丰富,接一些加速度传感器、温湿度传感器、电压电流采集等等是足够了。唯一就是按键少了点,就一个,想用按键做一些参数设置还有点困难。
开箱后,有两块开发板,两根type-c的数据线,先用PINGPONG例程走一遍,板载的st-link很方便,而且还可以直接用usb做串口数据监视,太方便了。

因为将来想用它做一些二次开发,所以需要仔细了解一下源码。易智联给的文档资料较少,大致讲了一下PINGPONG的流程,以及UTIL_SEQ_RUN这个调度器(类似于一个小型的操作系统)的一些内容。配合文档看易智联提供的PINGPONG例程,云里雾里的,感觉是在nucleo开发板上移植出来的,后来我看了一些st官方的文档,决定自己用CubeMX和CubeWL的FP功能包,配置生成代码,这样代码应该比较规范,也便于我二次开发的调试。
自己配置起来还是走了不少弯路,现在分享一下配置的步骤,并重点分享一下遇到的坑(大多数是个人的一些低级问题,大佬勿嘲笑),供大家参考。
(1)先选对芯片,stm32WLE5CBU6,然后照着LM401的PCB原理图配置相应的IO,我自己加了一个液晶模块,用于调试,所以配置了LCD的SCL和SDA。

(2)RCC配置

LSE、HSE都选外部晶振。这点我从文档上看到说LM401里面一个是32.768KHz的,还有一个是32M的晶振,但是HSE那里我看官方设置的是8MHz,不知道为啥,没来得及细深究,先按官方的来吧。
时钟树里面的选择要设置正确。


(3)RTC的设置
这块是重点。一开始我没有启用RTC,后来发现在LoRa的RX、TX中断方面各种问题(怀疑主要是Timeout的计时函数这块没成功),卡了好几天(主要还是没太研究明白这个FP功能包),后来照着系统提示配置了RTC,才成功。先给出RTC的配置图。

配置挺麻烦的,还有几个用户定义的参数。

【2.24更新】:粗略看了一下Timer_if.c,以及stm32_timer的源码,大概知道timer是依赖于RTC的时间来实现的,里面有几个ms2tick以及tick2ms的函数,大概知道rtc的最小时间单位应该是ms,所以根据rtc的设置,TR_CLK的频率应该是1KHz,那么RTC预分频的设置就应该是32,即RTC_PREDIV_A=(1<<(15-10)-1),以及ms2tick和tick2ms里面都需要用到RTC_N_PREDIV_S(即1<<10=1024).
(4)USART2的设置
要开启中断,以及发送要使用DMA1,Channel5,优先级配置为2。

(5)subghz配置
这里,同样走了点弯路, subghz的中断当时没开,生成代码后,完全无法进到那个Task。波特率预分频值设置为4,也是参考官方设置。这些参数还没来得及搞明白为啥,当时一直陷在怎样能自己配置成功,PINGPONG起来。


(6)subghz_phy中间件启用
勾选了这个中间件后,utilities里面的tracer、sequencer、timer等等都自动启用了,这应该就是ST提供的这个FP默认规则。
这里有个重点!!!一定要用Advanced Template来配置,选择Region(中国区,470M,易智联给的例程里面是改成了490M,不知道为啥),以及其他参数:带宽、扩频因子,等等。


以上就是主要的配置,完成后就可以生成代码了。
(7)生成代码并用KEIL打开后,自己完善TxDone、RxDone、RxTimeout等等回调函数体的内容,然后自己根据需要写一下Process函数体的实现,就可以了。简单起见,可以直接复制SubGHz_PINGPONG例程的代码即可。同样的代码分别下载到两块板子上,就可以PINGPONG起来了
【最后】
说一下怎样历经各种坑后成功的秘诀:要仔细跟着下图中的提示内容进行配置。照着提示配置后生成代码,就可以成功,落下某一项就可能不成功。因为时间紧,没空仔细研读源代码的逻辑,更重要的还是在此基础上开发应用。等以后有空了好好读一下代码。当然也希望有大佬能深入浅出的解读一下!

最后,感谢易智联和面包板社区提供的评测机会!