sx1278

sx1278

LPMD002用户手册--SDK使用开发指南

lorawan雪梨君 发表了文章 • 2 个评论 • 210 次浏览 • 2018-05-30 17:20 • 来自相关话题

1本文目的通过本文的说明介绍用户将了解和熟悉LPMD002节点模块的SDK开发使用流程。注:本文默认用户已经熟悉IAR软件的安装和使用方法以及相关仿真下载工具的使用,故这方面内容不在本文说明范围之内,下同。2 SDK开发环境IAR6.20 FOR ARM3 S... 查看全部
<p><br/></p><p><strong><a><br/></a></strong></p><p><a></a><strong><a>1</a></strong><strong>本文目的</strong></p><p>通过本文的说明介绍用户将了解和熟悉LPMD002节点模块的SDK开发使用流程。</p><p><strong><em>注:本文默认用户已经熟悉IAR软件的安装和使用方法以及相关仿真下载工具的使用,故这方面内容不在本文说明范围之内,下同。</em></strong></p><p><a></a><strong><a></a><a>2 </a>SDK开发环境</strong></p><p>IAR6.20&nbsp;FOR&nbsp;ARM</p><p><a></a><strong><a>3 SDK功能简介</a><a></a></strong></p><p>3.1完全符合LoraWan 1.0.1协议标准</p><p>3.2支持ClassA和ClassC协议</p><p>3.3支持ABP和OTAA激活</p><p>3.4支持上下行双向通信</p><p>3.5支持低功耗</p><p><a></a><strong><a>4</a>&nbsp;SDK使用方法</strong></p><p><a></a><strong><a>4.1安装IDE:</a></strong></p><p>IAR6.20&nbsp;FOR&nbsp;ARM</p><p><a></a><strong><a>4.2打开工程:</a></strong></p><p>LPKT002-SDK-V2.00\IAR\loranode.eww</p><p><a></a><strong><a>4.3确认工程宏定义</a></strong></p><p><img src="/uploads/ueditor/20180530/1527671774493272.png" title="1527671774493272.png" alt="图片40.png"/>&nbsp;</p><p><a></a><strong><a>&nbsp;</a></strong></p><p><strong>4.4编译工程</strong>:</p><p>结果如下所示,</p><p><img src="/uploads/ueditor/20180530/1527671779645469.png" title="1527671779645469.png" alt="图片41.png"/>&nbsp;</p><p><a></a><strong>&nbsp;</strong></p><p><a></a><strong>4.5关键参数和宏定义说明:</strong></p><p><a></a><strong><a>4.5.1头文件“Comissioning.h”及基础参数</a></strong></p><p>该头文件定义了lorawan的基础配置参数,如下:</p><table><tbody><tr class="firstRow"><td style="border-width: 1px; border-style: solid;"><p>宏定义</p></td><td style="border-width: 1px; border-style: solid;"><p>说明</p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define OVER_THE_AIR_ACTIVATION</p></td><td style="border-width: 1px; border-style: solid;"><p>1-OTAA激活</p><p>0-ABP激活</p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define LORAWAN_PUBLIC_NETWORK</p></td><td style="border-width: 1px; border-style: solid;"><p>True-公开网络</p><p>False-私有网络</p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define LORAWAN_DEVICE_EUI</p></td><td style="border-width: 1px; border-style: solid;"><p>DEVICE_EUI<a>,8字节</a></p><p><a>OTAA模式和ABP模式均需要设置</a></p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define LORAWAN_APPLICATION_EUI</p></td><td style="border-width: 1px; border-style: solid;"><p>APPLICATION_EUI,8字节</p><p>OTAA模式和<a></a><a>ABP模式均需要设置</a></p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define LORAWAN_APPLICATION_KEY</p></td><td style="border-width: 1px; border-style: solid;"><p>APPLICATION_KEY<a>,16字节</a></p><p>OTAA模式需要设置</p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define LORAWAN_NETWORK_ID</p></td><td style="border-width: 1px; border-style: solid;"><p>网络ID</p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define LORAWAN_DEVICE_ADDRESS</p></td><td style="border-width: 1px; border-style: solid;"><p>设备地址,4字节</p><p><a>OTAA模式由NS分配</a></p><p>ABP模式需手动设置</p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define LORAWAN_NWKSKEY</p></td><td style="border-width: 1px; border-style: solid;"><p>NWKSKEY,16字节</p><p><a>ABP模式需要设置</a></p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define LORAWAN_APPSKEY</p></td><td style="border-width: 1px; border-style: solid;"><p>APPSKEY,16字节</p><p>ABP模式需要设置</p></td></tr></tbody></table><p><a></a><strong><a>4.5.2头文件“LoRaMac-definitions.h”及信道</a></strong></p><p>该头文件定义了lorawan的基础通信配置的参数,其中根据不同频段参数有所不同,</p><p><strong>使用频段为USE_BAND_470(</strong><strong>标准CN470~510频段</strong><strong>),</strong></p><p>根据lorawan协议的设计通过:</p><p>#define LORA_MAX_NB_CHANNELS &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;96</p><p>可知该频段总共支持96个上行信道,具体的信道配置如下:</p><p>for( uint8_t i = 0; i &lt; LORA_MAX_NB_CHANNELS; i++ )</p><p>{</p><p>Channels[i].Frequency = 470.3e6 + i * 200e3; //ast c</p><p>Channels[i].DrRange.Value = ( DR_5 &lt;&lt; 4 ) | DR_0;</p><p>Channels[i].Band = 0;</p><p>}</p><p>即从470.3Mhz开始,信道间隔200Khz,489.3Mhz结束。</p><p>由lorawan协议可知与96上行信道对应的下行信道只有48个,从500.3Mhz开始,信道间隔200Khz,509.7Mhz结束</p><p>#define LORAMAC_FIRST_RX1_CHANNEL &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( (uint32_t) 500.3e6 )</p><p>#define LORAMAC_LAST_RX1_CHANNEL &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( (uint32_t) 509.7e6 )</p><p>通过下面函数与上行信道对应,</p><p>RxWindowSetup( LORAMAC_FIRST_RX1_CHANNEL + ( Channel % 48 ) * LORAMAC_STEPWIDTH_RX1_CHANNEL, RxWindowsParams[0].Datarate, RxWindowsParams[0].Bandwidth, RxWindowsParams[0].RxWindowTimeout, false );</p><p>其中利用( Channel % 48 )将上行信道分为0~47和48~95,分别与下行的信道的0~47对应。</p><p>另外还有1个固定的下行RX2信道</p><p>#define RX_WND_2_CHANNEL &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;{ 505300000, DR_0 }</p><p>&nbsp;</p><p>实际单sx1301网关只有8上行信道,所以需要设置sdk的信道掩码,只开启需要的信道即可,</p><p><img src="/uploads/ueditor/20180530/1527671845592020.png" title="1527671845592020.png" alt="图片42.png"/>&nbsp;</p><p>如图所示LoRaMacParamsDefaults.ChannelsMask数组元素为uint16_t类型,其中每1bit代表一个信道,所以该6个长度的数组,总共可代表16*6=96个信道,并且每一元素都是LSB,即</p><p>0x00FF;//bit 15~0</p><p>0x0000;//bit 31~16</p><p>0x0000;//bit 47~32</p><p>0x0000;//bit 63~48</p><p>0x0000;//bit 79~64</p><p>0x0000;//bit 95~80</p><p>所以在本例中LoRaMacParamsDefaults.ChannelsMask[0] = 0x00FF;表示只使用0~7信道。</p><p>&nbsp;</p><p><a></a><strong><a></a><a>4.5.3通信流程相关</a></strong></p><p>本sdk功能是OTAA自动入网,10S间隔,按确认上行方式发送数据,默认工作流程如下:</p><p><a></a><strong>A)main()-&gt;BoardInitMcu( )</strong></p><p>该函数执行基础硬件初始化,其中BoardUnusedIoInit( ); 该函数为低功耗处理用的IO配置函数,为满足低功耗,不用使用的IO应做如下处理:</p><p>GpioInit( &amp;ioPin, UNUSEDPINPA0, PIN_ANALOGIC, PIN_PUSH_PULL, PIN_NO_PULL, 0 );</p><p>其中的串口相关配合如下:</p><p>&nbsp;<img src="/uploads/ueditor/20180530/1527671909342954.png" title="1527671909342954.png" alt="图片53.png"/></p><p>此处串口收发均采用fifo+irq方式处理,用户可以更改。</p><p>串口接受处理如下:</p><p>&nbsp;<img src="/uploads/ueditor/20180530/1527672207757655.png" title="1527672207757655.png" alt="图片43.png"/></p><p>建议采用状态机方式进行数据接受。</p><p><a></a><strong>B)</strong><strong>main()-&gt;while( 1)</strong></p><p>该函数为状态机式主循环,主循环根据以下状态机依次执行,</p><p><img src="/uploads/ueditor/20180530/1527671920976083.png" title="1527671920976083.png" alt="图片44.png"/>&nbsp;</p><p>l&nbsp;<strong>DEVICE_STATE_INIT</strong>状态:最主要的初始化以下三个回调函数,</p><p>LoRaMacPrimitives.MacMcpsConfirm = McpsConfirm;</p><p>用户上行确认类事件,如确认上行,非确认上行回复的处理等,通信流程在此处理</p><p>LoRaMacPrimitives.MacMcpsIndication = McpsIndication;</p><p>下行通知类事件,如接受应答,读取数据包rssi,snr等,接受数据处理均在该函数中进行,如下</p><p><img src="/uploads/ueditor/20180530/1527671938957105.png" title="1527671938957105.png" alt="图片45.png"/>&nbsp;</p><p>LoRaMacPrimitives.MacMlmeConfirm = MlmeConfirm;</p><p>系统上行类事件,如join请求处理,linkcheck请求处理等,主要处理OTAA 入网</p><p>l&nbsp;<strong>DEVICE_STATE_JOIN</strong>状态:根据OVER_THE_AIR_ACTIVATION宏定义决定采用OTAA还是ABP入网,然后从Comissioning.h头文件中读取数据进行配置,默认配置如下:</p><p><img src="/uploads/ueditor/20180530/1527671945319344.png" title="1527671945319344.png" alt="图片46.png"/>&nbsp;</p><p>l&nbsp;<strong>DEVICE_STATE_SEND</strong>:</p><p>周期发送数据,10S</p><p><img src="/uploads/ueditor/20180530/1527671952307464.png" title="1527671952307464.png" alt="图片47.png"/>&nbsp;</p><p>发送函数</p><p><img src="/uploads/ueditor/20180530/1527671957108813.png" title="1527671957108813.png" alt="图片48.png"/>&nbsp;</p><p>该发送调用通过</p><p><img src="/uploads/ueditor/20180530/1527671964186555.png" title="1527671964186555.png" alt="图片49.png"/>&nbsp;</p><p>准备好的数据,可以修改AppData数组更改发送的数据</p><p>l&nbsp;<strong>DEVICE_STATE_CYCLE</strong>:</p><p>自动开启定时器</p><p>l&nbsp;<strong>DEVICE_STATE_SLEEP</strong>:</p><p>低功耗函数</p><p>TimerLowPowerHandler( ); &nbsp;</p><p>该函数内部由USE_DEBUGGER宏定义控制是否真正进入低功耗状态,</p><p><img src="/uploads/ueditor/20180530/1527671980755346.png" title="1527671980755346.png" alt="图片50.png"/>&nbsp;</p><p><strong>关于低功耗:</strong></p><p>除了上文介绍的IO口处理,其他如IIC,UART,SPI,HSEIO,LSEIO等程序本身可以控制的都在低功耗前关闭,唤醒后开启。</p><p>SDK给出了示例可以参考,如下图所示:</p><p><img src="/uploads/ueditor/20180530/1527671987503712.png" title="1527671987503712.png" alt="图片51.png"/>&nbsp;</p><p><img src="/uploads/ueditor/20180530/1527672004698315.png" title="1527672004698315.png" alt="图片52.png"/>&nbsp;</p><p>低功耗除了程序本身外,还取决于硬件设计的,如使用有源晶振,无源晶振,IO外置的上下拉电阻等,本司另提供LPMD003小体积低功耗高性能lorawan模块,有意可联系客户。</p><p><br/><a></a></p>

LPMD002用户手册--SDK使用开发指南

lorawan雪梨君 发表了文章 • 2 个评论 • 210 次浏览 • 2018-05-30 17:20 • 来自相关话题

1本文目的通过本文的说明介绍用户将了解和熟悉LPMD002节点模块的SDK开发使用流程。注:本文默认用户已经熟悉IAR软件的安装和使用方法以及相关仿真下载工具的使用,故这方面内容不在本文说明范围之内,下同。2 SDK开发环境IAR6.20 FOR ARM3 S... 查看全部
<p><br/></p><p><strong><a><br/></a></strong></p><p><a></a><strong><a>1</a></strong><strong>本文目的</strong></p><p>通过本文的说明介绍用户将了解和熟悉LPMD002节点模块的SDK开发使用流程。</p><p><strong><em>注:本文默认用户已经熟悉IAR软件的安装和使用方法以及相关仿真下载工具的使用,故这方面内容不在本文说明范围之内,下同。</em></strong></p><p><a></a><strong><a></a><a>2 </a>SDK开发环境</strong></p><p>IAR6.20&nbsp;FOR&nbsp;ARM</p><p><a></a><strong><a>3 SDK功能简介</a><a></a></strong></p><p>3.1完全符合LoraWan 1.0.1协议标准</p><p>3.2支持ClassA和ClassC协议</p><p>3.3支持ABP和OTAA激活</p><p>3.4支持上下行双向通信</p><p>3.5支持低功耗</p><p><a></a><strong><a>4</a>&nbsp;SDK使用方法</strong></p><p><a></a><strong><a>4.1安装IDE:</a></strong></p><p>IAR6.20&nbsp;FOR&nbsp;ARM</p><p><a></a><strong><a>4.2打开工程:</a></strong></p><p>LPKT002-SDK-V2.00\IAR\loranode.eww</p><p><a></a><strong><a>4.3确认工程宏定义</a></strong></p><p><img src="/uploads/ueditor/20180530/1527671774493272.png" title="1527671774493272.png" alt="图片40.png"/>&nbsp;</p><p><a></a><strong><a>&nbsp;</a></strong></p><p><strong>4.4编译工程</strong>:</p><p>结果如下所示,</p><p><img src="/uploads/ueditor/20180530/1527671779645469.png" title="1527671779645469.png" alt="图片41.png"/>&nbsp;</p><p><a></a><strong>&nbsp;</strong></p><p><a></a><strong>4.5关键参数和宏定义说明:</strong></p><p><a></a><strong><a>4.5.1头文件“Comissioning.h”及基础参数</a></strong></p><p>该头文件定义了lorawan的基础配置参数,如下:</p><table><tbody><tr class="firstRow"><td style="border-width: 1px; border-style: solid;"><p>宏定义</p></td><td style="border-width: 1px; border-style: solid;"><p>说明</p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define OVER_THE_AIR_ACTIVATION</p></td><td style="border-width: 1px; border-style: solid;"><p>1-OTAA激活</p><p>0-ABP激活</p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define LORAWAN_PUBLIC_NETWORK</p></td><td style="border-width: 1px; border-style: solid;"><p>True-公开网络</p><p>False-私有网络</p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define LORAWAN_DEVICE_EUI</p></td><td style="border-width: 1px; border-style: solid;"><p>DEVICE_EUI<a>,8字节</a></p><p><a>OTAA模式和ABP模式均需要设置</a></p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define LORAWAN_APPLICATION_EUI</p></td><td style="border-width: 1px; border-style: solid;"><p>APPLICATION_EUI,8字节</p><p>OTAA模式和<a></a><a>ABP模式均需要设置</a></p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define LORAWAN_APPLICATION_KEY</p></td><td style="border-width: 1px; border-style: solid;"><p>APPLICATION_KEY<a>,16字节</a></p><p>OTAA模式需要设置</p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define LORAWAN_NETWORK_ID</p></td><td style="border-width: 1px; border-style: solid;"><p>网络ID</p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define LORAWAN_DEVICE_ADDRESS</p></td><td style="border-width: 1px; border-style: solid;"><p>设备地址,4字节</p><p><a>OTAA模式由NS分配</a></p><p>ABP模式需手动设置</p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define LORAWAN_NWKSKEY</p></td><td style="border-width: 1px; border-style: solid;"><p>NWKSKEY,16字节</p><p><a>ABP模式需要设置</a></p></td></tr><tr><td style="border-width: 1px; border-style: solid;"><p>#define LORAWAN_APPSKEY</p></td><td style="border-width: 1px; border-style: solid;"><p>APPSKEY,16字节</p><p>ABP模式需要设置</p></td></tr></tbody></table><p><a></a><strong><a>4.5.2头文件“LoRaMac-definitions.h”及信道</a></strong></p><p>该头文件定义了lorawan的基础通信配置的参数,其中根据不同频段参数有所不同,</p><p><strong>使用频段为USE_BAND_470(</strong><strong>标准CN470~510频段</strong><strong>),</strong></p><p>根据lorawan协议的设计通过:</p><p>#define LORA_MAX_NB_CHANNELS &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;96</p><p>可知该频段总共支持96个上行信道,具体的信道配置如下:</p><p>for( uint8_t i = 0; i &lt; LORA_MAX_NB_CHANNELS; i++ )</p><p>{</p><p>Channels[i].Frequency = 470.3e6 + i * 200e3; //ast c</p><p>Channels[i].DrRange.Value = ( DR_5 &lt;&lt; 4 ) | DR_0;</p><p>Channels[i].Band = 0;</p><p>}</p><p>即从470.3Mhz开始,信道间隔200Khz,489.3Mhz结束。</p><p>由lorawan协议可知与96上行信道对应的下行信道只有48个,从500.3Mhz开始,信道间隔200Khz,509.7Mhz结束</p><p>#define LORAMAC_FIRST_RX1_CHANNEL &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( (uint32_t) 500.3e6 )</p><p>#define LORAMAC_LAST_RX1_CHANNEL &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( (uint32_t) 509.7e6 )</p><p>通过下面函数与上行信道对应,</p><p>RxWindowSetup( LORAMAC_FIRST_RX1_CHANNEL + ( Channel % 48 ) * LORAMAC_STEPWIDTH_RX1_CHANNEL, RxWindowsParams[0].Datarate, RxWindowsParams[0].Bandwidth, RxWindowsParams[0].RxWindowTimeout, false );</p><p>其中利用( Channel % 48 )将上行信道分为0~47和48~95,分别与下行的信道的0~47对应。</p><p>另外还有1个固定的下行RX2信道</p><p>#define RX_WND_2_CHANNEL &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;{ 505300000, DR_0 }</p><p>&nbsp;</p><p>实际单sx1301网关只有8上行信道,所以需要设置sdk的信道掩码,只开启需要的信道即可,</p><p><img src="/uploads/ueditor/20180530/1527671845592020.png" title="1527671845592020.png" alt="图片42.png"/>&nbsp;</p><p>如图所示LoRaMacParamsDefaults.ChannelsMask数组元素为uint16_t类型,其中每1bit代表一个信道,所以该6个长度的数组,总共可代表16*6=96个信道,并且每一元素都是LSB,即</p><p>0x00FF;//bit 15~0</p><p>0x0000;//bit 31~16</p><p>0x0000;//bit 47~32</p><p>0x0000;//bit 63~48</p><p>0x0000;//bit 79~64</p><p>0x0000;//bit 95~80</p><p>所以在本例中LoRaMacParamsDefaults.ChannelsMask[0] = 0x00FF;表示只使用0~7信道。</p><p>&nbsp;</p><p><a></a><strong><a></a><a>4.5.3通信流程相关</a></strong></p><p>本sdk功能是OTAA自动入网,10S间隔,按确认上行方式发送数据,默认工作流程如下:</p><p><a></a><strong>A)main()-&gt;BoardInitMcu( )</strong></p><p>该函数执行基础硬件初始化,其中BoardUnusedIoInit( ); 该函数为低功耗处理用的IO配置函数,为满足低功耗,不用使用的IO应做如下处理:</p><p>GpioInit( &amp;ioPin, UNUSEDPINPA0, PIN_ANALOGIC, PIN_PUSH_PULL, PIN_NO_PULL, 0 );</p><p>其中的串口相关配合如下:</p><p>&nbsp;<img src="/uploads/ueditor/20180530/1527671909342954.png" title="1527671909342954.png" alt="图片53.png"/></p><p>此处串口收发均采用fifo+irq方式处理,用户可以更改。</p><p>串口接受处理如下:</p><p>&nbsp;<img src="/uploads/ueditor/20180530/1527672207757655.png" title="1527672207757655.png" alt="图片43.png"/></p><p>建议采用状态机方式进行数据接受。</p><p><a></a><strong>B)</strong><strong>main()-&gt;while( 1)</strong></p><p>该函数为状态机式主循环,主循环根据以下状态机依次执行,</p><p><img src="/uploads/ueditor/20180530/1527671920976083.png" title="1527671920976083.png" alt="图片44.png"/>&nbsp;</p><p>l&nbsp;<strong>DEVICE_STATE_INIT</strong>状态:最主要的初始化以下三个回调函数,</p><p>LoRaMacPrimitives.MacMcpsConfirm = McpsConfirm;</p><p>用户上行确认类事件,如确认上行,非确认上行回复的处理等,通信流程在此处理</p><p>LoRaMacPrimitives.MacMcpsIndication = McpsIndication;</p><p>下行通知类事件,如接受应答,读取数据包rssi,snr等,接受数据处理均在该函数中进行,如下</p><p><img src="/uploads/ueditor/20180530/1527671938957105.png" title="1527671938957105.png" alt="图片45.png"/>&nbsp;</p><p>LoRaMacPrimitives.MacMlmeConfirm = MlmeConfirm;</p><p>系统上行类事件,如join请求处理,linkcheck请求处理等,主要处理OTAA 入网</p><p>l&nbsp;<strong>DEVICE_STATE_JOIN</strong>状态:根据OVER_THE_AIR_ACTIVATION宏定义决定采用OTAA还是ABP入网,然后从Comissioning.h头文件中读取数据进行配置,默认配置如下:</p><p><img src="/uploads/ueditor/20180530/1527671945319344.png" title="1527671945319344.png" alt="图片46.png"/>&nbsp;</p><p>l&nbsp;<strong>DEVICE_STATE_SEND</strong>:</p><p>周期发送数据,10S</p><p><img src="/uploads/ueditor/20180530/1527671952307464.png" title="1527671952307464.png" alt="图片47.png"/>&nbsp;</p><p>发送函数</p><p><img src="/uploads/ueditor/20180530/1527671957108813.png" title="1527671957108813.png" alt="图片48.png"/>&nbsp;</p><p>该发送调用通过</p><p><img src="/uploads/ueditor/20180530/1527671964186555.png" title="1527671964186555.png" alt="图片49.png"/>&nbsp;</p><p>准备好的数据,可以修改AppData数组更改发送的数据</p><p>l&nbsp;<strong>DEVICE_STATE_CYCLE</strong>:</p><p>自动开启定时器</p><p>l&nbsp;<strong>DEVICE_STATE_SLEEP</strong>:</p><p>低功耗函数</p><p>TimerLowPowerHandler( ); &nbsp;</p><p>该函数内部由USE_DEBUGGER宏定义控制是否真正进入低功耗状态,</p><p><img src="/uploads/ueditor/20180530/1527671980755346.png" title="1527671980755346.png" alt="图片50.png"/>&nbsp;</p><p><strong>关于低功耗:</strong></p><p>除了上文介绍的IO口处理,其他如IIC,UART,SPI,HSEIO,LSEIO等程序本身可以控制的都在低功耗前关闭,唤醒后开启。</p><p>SDK给出了示例可以参考,如下图所示:</p><p><img src="/uploads/ueditor/20180530/1527671987503712.png" title="1527671987503712.png" alt="图片51.png"/>&nbsp;</p><p><img src="/uploads/ueditor/20180530/1527672004698315.png" title="1527672004698315.png" alt="图片52.png"/>&nbsp;</p><p>低功耗除了程序本身外,还取决于硬件设计的,如使用有源晶振,无源晶振,IO外置的上下拉电阻等,本司另提供LPMD003小体积低功耗高性能lorawan模块,有意可联系客户。</p><p><br/><a></a></p>