【STM32WLE5之lora:4、易智联LM401 评估板PingPong例程分析】

STM32WLE5之lora:4、易智联LM401 评估板PingPong例程分析

  • 前言
  • 一、 序列调度
  • 二、 软定时服务
  • 三、 Lora接口封装
  • 四、 PingPong例程功能
  • 五、 PingPong流程
    • 1、简介
    • 2、初始化及回调流程
    • 3、PingPong任务流程
  • 六、 小结
  • 相关资源链接


前言

PingPong例程包含了序列调度、软定时、日志输出、队列、低功耗管理等常用功能。用户在了解该框架的基础上可以快速部署自己的应用,降低开发难度,提高开发效率。


一、 序列调度

sequencer提供了一个健壮且简单的框架,可在后台执行任务,并在没有更多活动时进入低功耗模式。sequencer实现了一种防止竞争条件的机制。
此外,sequencer还提供了一个事件功能,允许任何函数等待事件(通过中断设置特定事件),并且MIPS和电源可以方便地保存在任何实现“运行到完成”命令的应用程序中。
在工程子文件夹中的utilities_conf.h文件用于配置任务和事件ID。不能删除已列出的项目。
【STM32WLE5之lora:4、易智联LM401 评估板PingPong例程分析】_第1张图片
CFG_SEQ_Task_SubGHz_Phy_App_Process为PingPong例程定义的ID,在void SubghzApp_Init(void)函数的最后注册了该任务。
【STM32WLE5之lora:4、易智联LM401 评估板PingPong例程分析】_第2张图片
在Lora的中断中设置CFG_SEQ_Task_SubGHz_Phy_App_Process的标志,就会触发PingPong_Process()执行。比如:
【STM32WLE5之lora:4、易智联LM401 评估板PingPong例程分析】_第3张图片
sequencer不是一个操作系统。任何任务都运行到完成,不能像RTOS在RTOS上那样切换到另一个任务。sequencer是一个高级的“while loop”集中化任务和事件bitmap flags。
sequencer提供以下功能:
•先进且封装的while-loop系统
•支持多达32项任务和32项事件
•任务注册和执行
•等待事件和设置事件
•任务优先级设置
要使用sequencer,应用程序必须执行以下操作:
•通过定义UTIL_SEQ_CONF_TASK_NBR的值,设置受支持函数的最大数量。
•使用UTIL_SEQ_RegTask()注册sequencer支持的函数。
•通过调用UTIL_SEQ_Run()运行后台while循环来启动sequencer。
•调用UTIL_SEQ_SetTask()

二、 软定时服务

软定时服务,为应用程序提供运行在RTC上的虚拟计时器(在停止和待机模式下)。软定时服务允许用户请求定时任务执行,由于硬件定时器是基于RTC,即便在低功耗模式下定时时间也会被计算在内。软定时服务为用户和堆栈提供可靠的定时时间。用户可以根据应用程序的需要请求任意数量的计时器(单位为ms)。
使用软定时服务,应用程序需这行以下操作
•通过UTIL_TIMER_Init( )完成定时器服务初始化,在SystemApp_Init(void)初始化时调用。
•通过调用UTIL_TIMER_Create()创建定时对象,注册回调函数。
•通过调用UTIL_TIMER_SetPeriod()设置定时周期。
•调用UTIL_TIMER_Start()启动定时任务。
•调用UTIL_TIMER_Stop()停用定时任务。
使用方法参见PingPong例程中LED闪灯定时任务:
【STM32WLE5之lora:4、易智联LM401 评估板PingPong例程分析】_第4张图片
UTIL_TIMER_ONESHOT为定时器模式,单次有效。UTIL_TIMER_PERIODIC为周期性定时。
OnLedEvent为定时回调函数。

static void OnledEvent(void *context)
{
  BSP_LED_Toggle(LED_GREEN);
  BSP_LED_Toggle(LED_RED);
  UTIL_TIMER_Start(&timerLed);
}

在接收到PingPong消息后停用闪灯定时任务
【STM32WLE5之lora:4、易智联LM401 评估板PingPong例程分析】_第5张图片

三、 Lora接口封装

Lora相关操作Semtech已经进行了相关封装,与SX126x的函数名称、参数、使用方法一致。详见radio.c
【STM32WLE5之lora:4、易智联LM401 评估板PingPong例程分析】_第6张图片

四、 PingPong例程功能

Ping-Pong例程是两块LM401-DEMO板之间的一个简单Lora收发例程。默认情况下,LM401-DEMO评估板作为主设备,发送一个“Ping”消息然后等待回复。第一个收到“Ping”信息的设备将变为从设备,并以“Pong”信息回复主设备。当主设备收到“Pong”信息之后继续发送“Ping”信息。这样就建立了一个持续的Ping-Pong收发过程。
正常情况下两个评估板建立Ping-Pong收发关系,只有一个LED闪烁。接收到Ping消息时,LED1闪烁,接收到Pong消息时,LED2闪烁。当两个板完全同步时,即两个主板的RX窗口同步(TX窗口也是)时,无法建立Ping-Pong收发关系(两个LED长时间同时闪烁)。这时只需要重新启动其中的一块板即可。

五、 PingPong流程

1、简介

整个PingPong的执行由Lora的中断回调事件驱动,实现于 subghz_phy_app.c。主要有初始化SubghzApp_Init(),PingPong处理PingPong_Process()以及Lora射频回调函数TxDone()、RxDone()、TxTimeout()、RxTimeout()、RxError()组成。

2、初始化及回调流程

【STM32WLE5之lora:4、易智联LM401 评估板PingPong例程分析】_第7张图片

3、PingPong任务流程

【STM32WLE5之lora:4、易智联LM401 评估板PingPong例程分析】_第8张图片

六、 小结

PingPong例程不仅仅提供了Lora基本收发过程,还包括了序列调度、软定时、日志输出、队列等基本常用功能。用户在此基础上可以快速的构建自己的应用。

相关资源链接

文件中提供的易智联Demo板连接:
https://item.taobao.com/item.htm?spm=a1z0k.7628869.0.0.4fbb1be2qSrsJg&id=655801203935&_u=t2dmg8j26111

文件中的CubeMX工程及BSP文件链接:
https://download.csdn.net/download/ww2801/76277784

你可能感兴趣的:(stm32,单片机,嵌入式硬件,lora,lorawan)