0%

I-CUBE-LRWAN代码阅读笔记:代码运行框架

MDK 工程

在 Project 目录下,I-CUBE-LRWAN 提供了基于 B-L072Z-LRWAN1 、 NUCLEO-L053R8 、 NUCLEO-L073RZ 、 NUCLEO-L152RE 以及 NUCLEO-L476RG 等开发板的 LoRaWAN 工程文件。可以在对应目录下,更具自己习惯的开发环境打开对应的工程就可以对工程进行编译构建。对刚上手 LoRaWAN 开发的人来说非常方便就能使用对应的开发板来验证相关的功能。

下面以 NUCLEO-L053R8 工程作为上手 LoRaWAN 的学习材料。

NUCLEO-L053R8

  • 使用 LQFP64 封装的 STM32L053R8T6 作为中 MCU;
  • ARM®32-bit Cortex®-M0+ 内核
  • 最高主频达到 32 MHz
  • VDD from 1.65 V to 3.6 V
  • 64 KB Flash
  • 8 KB SRAM
  • GPIO (51) with external interrupt capability
  • 12-bit ADC with 16 channels
  • 12-bit DAC with 1 channel
  • RTC
  • Timers (5)
  • I2C (2)
  • USART (3)
  • SPI (2)
  • USB 2.0 full-speed

工程说明

NUCLEO-L053R8 目录下的工程提供了 LoRaWAN 和 SubGHz_Phy 类型的两种工程。LoRaWAN 目录下又分为 LoRaWAN_AT_Master 和 LoRaWAN_End_Node 两个工程,SubGHz_Phy 是使用 LoRa 收发器的 FSK 调制进行通信的功能实验。具体的文件路径如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
NUCLEO-L053R8
|
└─Applications
├─LoRaWAN
│ ├─LoRaWAN_AT_Master
│ │ ├─Core
│ │ ├─EWARM
│ │ ├─LoRaWAN
│ │ ├─MDK-ARM
│ │ └─STM32CubeIDE
│ └─LoRaWAN_End_Node
│ ├─Core
│ ├─EWARM
│ ├─LoRaWAN
│ └─MDK-ARM
└─SubGHz_Phy
└─SubGHz_Phy_PingPong
├─Core
├─EWARM
├─MDK-ARM
└─SubGHz_Phy

我自己比较习惯 MDK 的开发环境,后面就使用 MDK 工程来学习 LoRaWAN 了。直接使用 MDK 打开 Applications/LoRaWAN/LoRaWAN_End_Node/MDK-ARM/ 目录下的工程文件,在 MDK 中就能看见组织好的整个工程。

代码阅读

仔细查看工程的代码,能够了解到核心的业务代码在 app_lorawan.c 中实现。app_lorawan.c 依赖 stm32_seq.c 提供的定序器来调度需要执行的具体任务。

LoRaWAN 相关的代码在 lora_app.c 中将 LmHandlerProcess 和 SendTxData 两个任务处理函数注册到 stm32_seq.c 的人物调度器中。

1
2
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_LmHandlerProcess), UTIL_SEQ_RFU, LmHandlerProcess);
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), UTIL_SEQ_RFU, SendTxData);

整个软件系统依靠 ST 官方提供的几个工具组件来实现各个任务之间的调度切换,LoRaWAN 部分的通信内容,则由 Semtech 官方提供的 LmHandler 来进行状态的切换。在实际应用时,只需要能够理解 LmHandler 的接口并正确进行调用即可。