官方只提供了STM32WL55JC和STM32WL55JC1的相关应用demo,由于封装不通我们并不能直接使用相关程序,需要移植才能使用。本次我们移植LoRaWAN_AT_Slave通信demo,通过AT指令配置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_AT_Slave\LoRaWAN_AT_Slave.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、配置时钟树,配置RTC、LPURAT的时钟为LSE
8、使能低功耗串口
9、LORAWAN设置如下
LoRaWAN middleware中使能CN470、lorawan版本设置为1.0.3、板级设置选BSP
10、设置非静态DEVEUI由外部配置,配置OTAA入网所需要的参数DEVEUI、APPEUI、APPKEY、NWKEY(注意:同一服务器中DEVEUI必须是唯一的)
11、关闭Probes Lines in Platform Settings
12、Platform Setting设置如下
13、点击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进行相关修改
void LoRaWAN_Init(void)
{
/* USER CODE BEGIN LoRaWAN_Init_LV */
uint32_t feature_version = 0UL;
/* USER CODE END LoRaWAN_Init_LV */
CMD_Init(CmdProcessNotify);
/* USER CODE BEGIN LoRaWAN_Init_1 */
//添加打印入网参数和版本信息
/* Get LoRaWAN APP version*/
APP_LOG(TS_OFF, VLEVEL_M, "APPLICATION_VERSION: V%X.%X.%X\r\n",
(uint8_t)(APP_VERSION_MAIN),
(uint8_t)(APP_VERSION_SUB1),
(uint8_t)(APP_VERSION_SUB2));
/* Get MW LoRaWAN info */
APP_LOG(TS_OFF, VLEVEL_M, "MW_LORAWAN_VERSION: V%X.%X.%X\r\n",
(uint8_t)(LORAWAN_VERSION_MAIN),
(uint8_t)(LORAWAN_VERSION_SUB1),
(uint8_t)(LORAWAN_VERSION_SUB2));
/* Get MW SubGhz_Phy info */
APP_LOG(TS_OFF, VLEVEL_M, "MW_RADIO_VERSION: V%X.%X.%X\r\n",
(uint8_t)(SUBGHZ_PHY_VERSION_MAIN),
(uint8_t)(SUBGHZ_PHY_VERSION_SUB1),
(uint8_t)(SUBGHZ_PHY_VERSION_SUB2));
/* Get LoRaWAN Link Layer info */
LmHandlerGetVersion(LORAMAC_HANDLER_L2_VERSION, &feature_version);
APP_LOG(TS_OFF, VLEVEL_M, "L2_SPEC_VERSION: V%X.%X.%X\r\n",
(uint8_t)(feature_version >> 24),
(uint8_t)(feature_version >> 16),
(uint8_t)(feature_version >> 8));
/* Get LoRaWAN Regional Parameters info */
LmHandlerGetVersion(LORAMAC_HANDLER_REGION_VERSION, &feature_version);
APP_LOG(TS_OFF, VLEVEL_M, "RP_SPEC_VERSION: V%X-%X.%X.%X\r\n",
(uint8_t)(feature_version >> 24),
(uint8_t)(feature_version >> 16),
(uint8_t)(feature_version >> 8),
(uint8_t)(feature_version));
/* USER CODE END LoRaWAN_Init_1 */
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_LmHandlerProcess), UTIL_SEQ_RFU, LmHandlerProcess);
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_Vcom), UTIL_SEQ_RFU, CMD_Process);
/* Init Info table used by LmHandler*/
LoraInfo_Init();
/* Init the Lora Stack*/
LmHandlerInit(&LmHandlerCallbacks, APP_VERSION);
LmHandlerConfigure(&LmHandlerParams);
/* USER CODE BEGIN LoRaWAN_Init_Last */
/* USER CODE END LoRaWAN_Init_Last */
}
.
.
.
补充回调函数
static void OnRxData(LmHandlerAppData_t *appData, LmHandlerRxParams_t *params)
{
/* USER CODE BEGIN OnRxData_1 */
if ((appData != NULL) || (params != NULL))
{
AT_event_receive(appData, params);
}
/* USER CODE END OnRxData_1 */
}
/* USER CODE BEGIN PrFD_LedEvents */
/* USER CODE END PrFD_LedEvents */
static void OnTxData(LmHandlerTxParams_t *params)
{
/* USER CODE BEGIN OnTxData_1 */
if ((params != NULL))
{
AT_event_confirm(params);
}
/* USER CODE END OnTxData_1 */
}
static void OnJoinRequest(LmHandlerJoinParams_t *joinParams)
{
/* USER CODE BEGIN OnJoinRequest_1 */
if (joinParams != NULL)
{
AT_event_join(joinParams);
}
/* USER CODE END OnJoinRequest_1 */
}
static void OnBeaconStatusChange(LmHandlerBeaconParams_t *params)
{
/* USER CODE BEGIN OnBeaconStatusChange_1 */
if (params != NULL)
{
AT_event_Beacon(params);
}
/* USER CODE END OnBeaconStatusChange_1 */
}
static void OnClassChange(DeviceClass_t deviceClass)
{
/* USER CODE BEGIN OnClassChange_1 */
AT_event_ClassUpdate(deviceClass);
/* USER CODE END OnClassChange_1 */
}
3、修改CN470的入网信道数,因为官方默认是把96个信道全部打开了,而我们一般使用的都是8信道网关,所以我们把信道数改为8,使用CN470的第一组信道。
//#define CN470_MAX_NB_CHANNELS 96
#define CN470_MAX_NB_CHANNELS 8
我们使用TTN作为lorawan服务器,首先注册网关上线,然后按照配置的参数注册节点。
烧录程序后使用AT指令配置参数和入网、数据收发等操作。
//入网
AT+DEUI=70:B3:D5:7E:D0:05:54:89
AT+APPEUI=00:00:00:00:00:00:00:00
AT+APPKEY=10:00:00:00:00:00:00:00:00:00:00:00:00:00:00:01
AT+NWKKEY=10:00:00:00:00:00:00:00:00:00:00:00:00:00:00:01
AT+JOIN=1
//发送数据
//发送端口号为8,confirmed类型,数据为112233445566778899AABBCCDDEE1122
AT+SEND=8:1:112233445566778899AABBCCDDEE1122
服务器端收到入网和数据