本帖最后由 nich20xx 于 2020-7-3 22:50 编辑
# 1 前言
对NUCLEO-WL55JC2有了一个系统认识后, 开始跑NUCLEO-WL55JC2的示例代码。
由于目前非常好用的STM32CubeMX暂时不能自动生成C代码,因此本文主要描述了如何手动搭建MDK开发与测试环境,有助于理解与掌握基于STM32WL BSP的软件设计。
本文主要包括如下内容:
1. STM32CubeMX简介
2. 手动搭建STM32CubeMX MDK开发环境
3. NUCLEO-WL55JC2的LED点灯与串口打印
## 1.1 STM32CubeMX简介
STM32CubeMX是ST为STM32系列芯片提供了一个强大的图形配置工具,通过STM32 CubeMX图形化向导,可以非常方便的实现相关系统时钟、外设、功能引脚等配置,然后能够生成C语言代码,并支持多种工具链,比如MDK、IAR For ARM、TrueStudio等。
截止到2020年6月份,当前对外版本CubeMX5.6.1还不支持STM32WL.
ST提供了 SetupSTM32CubeMX-6.99.1-D37.exe内部版本,其增加了STM32WL与NUCLEO-WL55JCx支持,但是未提供“GENERATE CODE”,暂不能直接导出C代码与IDE开发环境。
# 2 搭建NUCLEO-WL55JC2 MDK开发环境
1. 安装 STM32WL评测资料包 STM32Cube_FW_WL_V0.4.0_Setup.exe
2. 在STM32Cube_FW_WL_V0.4.0文件夹下包含了NUCLEO-WL55JC2 IAR的示例工程(EWARM),可以直接使用,但未提供MDK实例工程。
3. 接下来基于STM32Cube_FW_WL_V0.4.0,先手动搭建MDK开发环境,然后运行在NUCLEO-WL55JC2开发板,实现LED闪烁与串口打印“Hello World”。
## 2.2 手动搭建STM32CubeMX MDK开发环境
### 2.2.1 安装 MDK STM32WL DFP
首先需要在MDK中安装STM32WL DFP (Device Family Pack) 。
在 MDK --> Pack Installer --> Devices --> 输入stm32wl,点击STM32WL Series 。
或者 [https://www.keil.com/dd2/pack](https://www.keil.com/dd2/pack) 找到 STM32WL,点击下载,然后直接安装
### 2.2.2 新建MDK工程
1. 新建MDK工程
1. 新建或者复制一个已有的MDK工程
1. 在工程中增加STM32Cube_FW_WL_V0.4.0中的相关源文件
> - \Drivers\STM32WLxx_HAL_Driver\Src
> - \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\arm\startup_stm32wle5xx.s
> - \Drivers\BSP\STM32WLxx_Nucleo\stm32wlxx_nucleo.c
> - \app\stm32wlxx_it.c
> - \app\system_stm32wlxx.c
> - \app\stm32wlxx_hal_msp.c
> - \app\main.c
2. MDK工程配置
1. "Device" --> "STM32WLE5JCIx"
- (当前STM32WL DFP1.0.0只支持单核系列,NUCLEO-WL55JC2主芯片使用的是STM32WL55JC,目前在使用单核(M4)情况下,不影响使用)
2. 根据实际工程所在路径,在" C/C++ " -> " Include Paths"增加增加头文件路径说明
1. 不勾选"GNU extensions"。
3. 至此,基于MDK的helloworld工程就基本OK.
# 3 NUCLEO-WL55JC2运行与调试
helloworld工程当前主要使用了NUCLEO-WL55JC2中LED与ST-LINK串口。
## 3.1 LED与串口电路
### 3.1.1 LED
NUCLEO-WL55JC2板载三颗3单色LED指示灯。
|| 引脚 | 功能描述 |
| --- | --- | --- |
| LED1 | PB15 | Blue,高电平点亮 |
| LED2 | PB9 | Green,高电平点亮 |
| LED3 | PB11 | Red,高电平点亮 |
### 3.1.2 STLINK-V3E虚拟串口接口
NUCLEO-WL55JC2可通过板载的STLINK-V3E连接到电脑USB接口,并通过虚拟串口功能,可直接与PC端串口调试助手等进行串口通信。
NUCLEO-WL55JC2缺省情况下,采用了LPUART1连接到STLINK-V3E。也可以通过跳冒选择切换到USART1。
| 功能引脚 | MCU引脚 | 功能描述 |
| --- | --- | --- |
| STLK_VCP_RX | T_VCP_TX PA2 | LPUART1 TXD |
| STLK_VCP_TX | T_VCP_RX PA3 | LPUART1 RXD |
## 3.2 实例代码
新建main.c
在 stm32wlxx_nucleo.c 包含了 LED、串口、按键等接口定义,因此在main.c中可以直接调用对应接口即可。
1. 系统主频设置
> - System Clock source = HSI
> - SYSCLK(Hz) = 480000000
> - HCLK(Hz) = 80000000
2. 同时在 stm32wlxx_nucleo.h使能串口log功能
```
/* COM usage define */
#define USE_BSP_COM_FEATURE 1U//0U
/* COM log define */
#define USE_COM_LOG 1U//0U
```
3. main.c示例代码如下
```
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
COM_InitTypeDef uart_com1 =
{
.BaudRate = 115200,
.WordLength = COM_WORDLENGTH_8B,
.StopBits = COM_STOPBITS_1,
.Parity = COM_PARITY_NONE,
.HwFlowCtl = COM_HWCONTROL_NONE,
};
/* USER CODE END 0 */
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock*/
SystemClock_Config();
/* Initialize all configured peripherals */
BSP_LED_Init(LED_BLUE);
BSP_LED_Init(LED_GREEN);
BSP_LED_Init(LED_RED);
BSP_COM_Init(COM1,&uart_com1);
BSP_COM_SelectLogPort(COM1);
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
printf("Hello World:%d\r\n",HAL_GetTick());
BSP_LED_On(LED1);
BSP_LED_On(LED2);
BSP_LED_On(LED3);
HAL_Delay(1000);
BSP_LED_Off(LED1);
BSP_LED_Off(LED2);
BSP_LED_Off(LED3);
HAL_Delay(1000);
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
/* USER CODE END 3 */
}
```
### 3.2.1 运行效果
通过板载ST-LINK V3E直接下载到NUCLEO-WL55JC2中运行,LED每2秒闪烁一次。
NUCLEO-WL55JC2运行LED与串口输出helloword
# 4 参考
- STM32Cube_FW_WL_V0.4.0
- STM32WLxx_Nucleo_BSP_User_Manual.chm
- Projects\NUCLEO-WL55JC\Examples
- Projects\NUCLEO-WL55JC\Applications\LoRaWAN\PingPong
- Drivers\STM32WLxx_HAL_Driver
- UM2592_Nucleo-73_WL55.pdf