RT-Thread是一款功能强大、组件丰富的开源操作系统,结合STM32WL低功耗物联等特性,在STM32WL中运行RTOS有助于加速产品的开发与落地。
本文主要描述如何将RT-Thread移植到NUCLEO-WL55JC2开发板,新建一个基于RT-Thread的NUCLEO-WL55JC2 BSP。
本文主要内容包括:
RT-Thread官方提供了非常详细的《STM32 系列 BSP 制作教程》
STM32 BSP 框架结构如下图所示:
每一个 STM32 系列的 BSP 由三部分组成,分别是通用库、BSP 模板和特定开发板 BSP。
STM32WL BSP主要组成部分 |
||
项目 | 文件夹 | 说明 |
通用库 | stm32/libraries |
|
STM32WL系列 BSP 工程模板 |
stm32/libraries/templates/stm32wlxx |
当前RT-thread暂未支持STM32WL
|
特定开发板 BSP | stm32/nucleo-wl55jc2 |
主芯片 STM32WL55JC |
由于当前RT-Thread暂未支持STM32WL,因此跟《STM32 系列 BSP 制作教程》中方式略微有些不同。当前STM32WL BSP 的制作过程主要如下步骤:
在rt-thread\bsp\stm32\路径下,新建stm32wl55-st-nucleo (拷贝 stm32l476-st-nucleo)
注:首次需要安装STM32WLxx_DFP
由于当前CubeMX暂不完全支持STM32WL,因此当前CubeMX_Config中的部分文件需要手动修改
/**
* @brief UART MSP Initialization
* This function configures the hardware resources used in this example
* @param huart: UART handle pointer
* @retval None
*/
void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(huart->Instance==LPUART1)
{
/* USER CODE BEGIN LPUART1_MspInit 0 */
/* USER CODE END LPUART1_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_LPUART1_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
/**LPUART1 GPIO Configuration
PA3 ------> LPUART1_RX
PA2 ------> LPUART1_TX
*/
GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USER CODE BEGIN LPUART1_MspInit 1 */
/* USER CODE END LPUART1_MspInit 1 */
}
}
/**
* @brief UART MSP De-Initialization
* This function freeze the hardware resources used in this example
* @param huart: UART handle pointer
* @retval None
*/
void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
{
if(huart->Instance==LPUART1)
{
/* USER CODE BEGIN LPUART1_MspDeInit 0 */
/* USER CODE END LPUART1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_LPUART1_CLK_DISABLE();
/**LPUART1 GPIO Configuration
PA0 ------> LPUART1_RX
PA1 ------> LPUART1_TX
*/
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
/* USER CODE BEGIN LPUART1_MspDeInit 1 */
/* USER CODE END LPUART1_MspDeInit 1 */
}
}
完成上述操作后,通过Scons工具,生成MDK工程,
通过Micro USB连接NUCLO-WL55JC到PC,通过板载STLINKV3E下载代码到NUCLEO-WL55JC,然后通过串口来验证Finish是否OK。