跳到主要内容

STM32 使用说明

  • 本章节展示的是 LoRa 官方 USP 库 示例
  • 相关使用文档可以直接访问官方 GitHub:USP 文档说明

硬件连接

参考下表进行连接:

Core2021-XFSTM32L476RG
CLKPA5
MISOPA6
MOSIPA7
CSPA8
DIO8PA1
RESETPA0
BUSYPB3

示例程序

  • STM32 示例程序位于 Lora-net/uspexamples/main_examples 目录中
  • 测试需准备 两个 Core2021-XF 模块:一个发送,一个接收
  • 以下对几个示例程序进行说明,包括使用方法和运行效果

main_porting_tests

【程序说明】

  • 基于 STM32L476RG + Core2021-XF,实现端口功能验证示例
  • 用于测试以下内容:
    • SPI 接口功能
    • 中断 IRQ 响应
    • 定时器和低功耗模式
    • 随机数生成
    • 无线电配置时间
    • MCU 睡眠时间
    • Flash 仿真存储(可选)
  • 测试覆盖模块初始化、发送/接收配置以及 MCU 相关硬件接口
  • 通过串口打印测试结果

【代码分析】

  • 硬件抽象层:
    • smtc_modem_hal.hsmtc_hal_mcu.hsmtc_hal_gpio.hsmtc_hal_watchdog.h
    • IRQ 回调函数:radio_tx_irq_callbackradio_rx_irq_callbacktimer_irq_callback
  • LoRa/Radio 参数:
    • ralf_params_lora_t rx_lora_param / tx_lora_param:用于端口测试的模拟 RX/TX 配置
    • 固定频率、符号率、带宽、同步字和发射功率
  • 主要测试函数:
    • porting_test_spi():验证 SPI 端口与芯片固件版本
    • porting_test_radio_irq():验证收发中断触发
    • porting_test_get_time():检测 HAL 获取时间函数
    • porting_test_timer_irq():验证定时器中断
    • porting_test_stop_timer():验证定时器停止功能
    • porting_test_disable_enable_irq():验证中断禁用/启用逻辑
    • porting_test_random():验证随机数生成与分布
    • porting_test_config_rx_radio() / porting_test_config_tx_radio():检测收发配置时间
    • porting_test_sleep_ms():检测 MCU 睡眠时间
    • porting_test_timer_irq_low_power():验证定时器低功耗模式
  • Flash 测试(可选):porting_test_flash() / test_context_store_restore()
  • main_porting_tests()
    • 初始化 MCU 外设
    • 禁用 IRQ 避免初始化冲突
    • 循环执行端口测试,根据 ENABLE_TEST_FLASH 选择是否进行 Flash 测试
    • 结束后进入无限循环并刷新看门狗

【运行效果】

  • 上电启动后串口打印:


ping_pong_example

【程序说明】

  • 基于 STM32L476RG + Core2021-XF,实现 Ping-Pong + 周期性上行通信示例
  • 支持用户按键触发 Manager 模式
    • Manager 发起 PING
    • Subordinate 自动响应 PONG
    • 每次发送或接收完成后自动触发回调处理
  • 支持周期性上行(默认每 10 秒发送一次固定 payload "LoRa"
  • LED 指示 TX/RX 状态
  • 使用 Watchdog 防止 MCU 死锁
  • 自动进入低功耗睡眠,节省能量

【代码分析】

  • MCU 初始化:
    • hal_mcu_init():初始化 MCU 外设
    • smtc_rac_init():初始化 Radio Abstraction Layer
  • 用户按键:
    • user_button_t 保存状态和按下时间
    • user_button_callback():按键防抖,触发 Manager 模式
  • LED 初始化:SMTC_LED_TX / SMTC_LED_RX
  • 应用初始化:
    • ping_pong_init():初始化 Ping-Pong 事务
    • periodic_uplink_init():初始化周期上行
  • 主循环:
    1. 喂狗:hal_watchdog_reload()
    2. 执行 Radio 事务:smtc_rac_run_engine()
    3. 处理按键事件:ping_pong_on_button_press()
    4. MCU 睡眠:判断是否有待处理事务,通过 hal_mcu_set_sleep_for_ms(SLEEP_DELAY)
  • 核心逻辑:
    • ping_pong_init():设置交易上下文、Payload、调制参数
    • ping_pong_tx() / ping_pong_rx():发送/接收 PING 或 PONG
    • pre_ping_pong_callback() / post_ping_pong_callback()
      • LED 控制
      • 处理事务完成状态(TX_DONE / RX_PACKET / RX_TIMEOUT / CRC_ERROR / TASK_ABORTED)
      • 自动重试或重启
  • 周期性上行逻辑:通过回调函数调度下一次发送

【运行效果】

  • 上电后串口打印:


【程序说明】

  • 基于 STM32L476RG + Core2021-XF,实现:
    • LoRaWAN OTAA 入网
    • 周期性上行(Periodic Uplink)
    • 用户按键触发即时上行
  • 使用 example_options.h 提供 LoRaWAN 用户凭据:
    • USER_LORAWAN_DEVICE_EUI
    • USER_LORAWAN_JOIN_EUI
    • USER_LORAWAN_GEN_APP_KEY
    • USER_LORAWAN_APP_KEY
  • 配置区域:MODEM_EXAMPLE_REGION(EU868 或 WW_2G4)
  • Watchdog 和低功耗睡眠保护 MCU
  • 串口打印事件、上行/下行数据和调试信息

【代码分析】

  • 初始化:
    • hal_mcu_init()hal_gpio_init_in() 配置外设
    • smtc_rac_init()smtc_modem_init() 初始化 Modem,回调 modem_event_callback()
  • 用户按键:
    • user_button_callback() 处理按键事件,触发即时上行
  • 周期性上行:
    • periodical_uplink_init() 初始化事务
    • 每次发送完成后,post_periodic_callback() 调度下一次上行
  • 事件回调:
    • modem_event_callback() 处理 Modem 各类事件:
      • RESET:设置凭据和区域,发起 Join
      • JOINED:入网成功,启动第一次周期上行
      • ALARM:周期上行触发
      • TXDONE:上行发送完成
      • DOWNDATA:下行数据接收
      • 其他事件:LINK_CHECKCLASS_B_PING_SLOT_INFO 等打印调试信息
  • 上行数据:
    • 32-bit uplink counter
    • 可选端口发送(默认 101/102)
  • 主循环:
    • 检查按键触发即时上行
    • 调用 smtc_modem_run_engine()smtc_rac_run_engine() 处理事务
    • MCU 睡眠至下次事务或 Watchdog reload

【运行效果】

  • 上电后串口打印: