第一章 stm32wle5ccu6简介和开发环境搭建
第二章 stm32wle5ccu6移植pingpong通信
第三章 stm32wle5ccu6移植LoRaWAN_End_Node工程
第四章 stm32wle5ccu6移植LoRaWAN_AT_Slave工程
第五章 stm32wle5ccu6的序列器和定时器分析
官方只提供了STM32WL55JC和STM32WL55JC1的相关应用demo,由于封装不通我们并不能直接使用相关程序,需要移植才能使用。本次我们移植LoRaWAN_End_Node通信demo,为lorawan节点主动上传。.
`
1、打开STM32CubeMX,选择start My projext from MCU开始工程
2、在MCU/MPU处选择使用STM32WLE5CCU6
3、在File->import project导入pingpong例程,选择导入工程为C"\Users\用户\STM32Cube\Repository\STM32CuBE_FW_WLV1.2.0\Projects\NUCLEO-WL55JC\Applications\LoRaWAN\LoRaWAN_End_Node\LoRaWAN_End_Node.ioc
用户为自己实际的用户名
导入后会有些报错,是因为原来WL55JC是BGA的封装引脚要多一些,而stm32wle5ccu6没有
4、在Project Manager->Project中设置工程名和存放路径,Toolchain/IDE设置为MDK-ARM;Code Generator设置为Copy all used libraries into the project folder
5、时钟输入配置,HSE和LSE都配置为Crystal/Ceramic Resonator
6、RTC开启Alarm A并且使能中断
7、LORAWAN设置如下
LoRaWAN middleware中使能CN470、lorawan版本设置为1.0.3、板级设置选BSP
设置静态DEVEUI,配置OTAA入网所需要的参数DEVEUI、APPEUI、APPKEY、NWKEY(注意:同一服务器中DEVEUI必须是唯一的)
关闭Probes Lines in Platform Settings
8、时钟树配置,RTC使用LSE
9、点击GENERATE CODE生成代码,打开keil工程然后编译会报以下错误,是由于我们没有添加BSP包
10、把下载的软件包C:\Users\用户\STM32Cube\Repository\STM32Cube_FW_WL_V1.2.0\Drivers中的BSP包拷贝到当前工程下。然后在keil中添加文件和其所在目录索引。
11、然后编译工程,0 error 0 waring
1、首先是BSP包中关于板级文件设置与上一章节移植pingpong通信中的保持一致。为了方便也可以直接使用上一节中修改好了的BSP包。
2、工程移植后主要是lora_app.c发生了变化,应用部分变成空的了。所以我们需要对应软件包中的lora_app.c进行相关修改,这里源码太长了就不放上来了,可自行对比软件包中的源码。使用CN470的时候,需要修改信道数量,因为我们网关只有8个信道但是默认是配置的96个信道。在RegionCN470.h中
//#define CN470_MAX_NB_CHANNELS 96
#define CN470_MAX_NB_CHANNELS 8
3、如果需要直接在程序中修改lorawan的加密参数,可在se-identity.h中进行配置
#define STATIC_DEVICE_EUI 1
/*!
* end-device IEEE EUI (big endian)
*/
#define LORAWAN_DEVICE_EUI { 0x70, 0xB3, 0xD5, 0x7E, 0xD0, 0x05, 0x54, 0x89 }
/*!
* App/Join server IEEE EUI (big endian)
*/
#define LORAWAN_JOIN_EUI { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
/*!
* When set to 1 DevAddr is LORAWAN_DEVICE_ADDRESS
* When set to 0 DevAddr is automatically set with a value provided by a pseudo
* random generator seeded with a value provided by the MCU platform
*/
#define STATIC_DEVICE_ADDRESS 0
/*!
* Device address on the network (big endian)
*/
#define LORAWAN_DEVICE_ADDRESS ( uint32_t )0x0100000A
/*!
* Application root key
*/
#define LORAWAN_APP_KEY 10,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01
/*!
* Network root key
*/
#define LORAWAN_NWK_KEY 10,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01
/*!
* Forwarding Network session key
*/
#define LORAWAN_NWK_S_KEY 2B,7E,15,16,28,AE,D2,A6,AB,F7,15,88,09,CF,4F,3C
/*!
* Application session key
*/
#define LORAWAN_APP_S_KEY 2B,7E,15,16,28,AE,D2,A6,AB,F7,15,88,09,CF,4F,3C
/*
4、修改入网方式即其他MAC参数在lora_app.h中修改
/* LoraWAN application configuration (Mw is configured by lorawan_conf.h) */
#define ACTIVE_REGION LORAMAC_REGION_CN470
/*!
* CAYENNE_LPP is myDevices Application server.
*/
/*#define CAYENNE_LPP*/
/*!
* Defines the application data transmission duty cycle. 10s, value in [ms].
*/
#define APP_TX_DUTYCYCLE 10000
/*!
* LoRaWAN User application port
* @note do not use 224. It is reserved for certification
*/
#define LORAWAN_USER_APP_PORT 2
/*!
* LoRaWAN Switch class application port
* @note do not use 224. It is reserved for certification
*/
#define LORAWAN_SWITCH_CLASS_PORT 3
/*!
* LoRaWAN default class
*/
#define LORAWAN_DEFAULT_CLASS CLASS_A
/*!
* LoRaWAN default confirm state
*/
#define LORAWAN_DEFAULT_CONFIRMED_MSG_STATE LORAMAC_HANDLER_CONFIRMED_MSG
/*!
* LoRaWAN Adaptive Data Rate
* @note Please note that when ADR is enabled the end-device should be static
*/
#define LORAWAN_ADR_STATE LORAMAC_HANDLER_ADR_ON
/*!
* LoRaWAN Default data Rate Data Rate
* @note Please note that LORAWAN_DEFAULT_DATA_RATE is used only when LORAWAN_ADR_STATE is disabled
*/
#define LORAWAN_DEFAULT_DATA_RATE DR_0
/*!
* LoRaWAN default activation type
*/
#define LORAWAN_DEFAULT_ACTIVATION_TYPE ACTIVATION_TYPE_OTAA
/*!
* LoRaWAN force rejoin even if the NVM context is restored
* @note useful only when context management is enabled by CONTEXT_MANAGEMENT_ENABLED
*/
#define LORAWAN_FORCE_REJOIN_AT_BOOT false
/*!
* User application data buffer size
*/
#define LORAWAN_APP_DATA_BUFFER_MAX_SIZE 242
/*!
* Default Unicast ping slots periodicity
*
* \remark periodicity is equal to 2^LORAWAN_DEFAULT_PING_SLOT_PERIODICITY seconds
* example: 2^4 = 16 seconds. The end-device will open an Rx slot every 16 seconds.
*/
#define LORAWAN_DEFAULT_PING_SLOT_PERIODICITY 4
/*!
* Default response timeout for class b and class c confirmed
* downlink frames in milli seconds.
*
* The value shall not be smaller than RETRANSMIT_TIMEOUT plus
* the maximum time on air.
*/
#define LORAWAN_DEFAULT_CLASS_B_C_RESP_TIMEOUT 8000
我们使用TTN作为lorawan服务器,首先注册网关上线,然后按照配置的参数注册节点。
烧录程序后效果如下,节点端
服务器端也收到上行数据