STM32WLE5系列#4 stm32wle5ccu6移植LoRaWAN_AT_Slave工程

STM32WLE5系列#4 stm32wle5ccu6移植LoRaWAN_AT_Slave工程



简介

官方只提供了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

在这里插入图片描述

服务器端收到入网和数据

在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值