一、连接测试
将NUCLEO-L412KB开发板通过MICRO-USB数据线连接上PC,可以看到已经识别出了一个ST-LINK和一个虚拟串口,同时还识别出了一个存储设备。
这是因为开发板背面的ST-LINK将自身配置为一个USB复合设备,除基本的下载器、调试器功能外,还具有虚拟串口的功能。而存储设备功能是为了实现MBED开发。
在硬件上,从开发板的原理图可以看到,ST-LINK与STM32L412K通过串行方式(SWD)相连,即只需要使用SWCLK和SWDIO。ST-LINK还实现了USB转虚拟串口功能,ST-LINK与STM32L412K通过串口连接即可。MBED官网尝试了很久仍然连接不上,所以暂时不能展示MBED开发。
二、STM32CubeMX配置
下载安装最新版本的Package,此处下载安装的是L4 1.13.0。
可以看到默认已经配置了外部高速时钟源、外部低速RTC时钟源、串行下载调试接口(SWD)、串口、板载LED。与常见的外部高速时钟源不同的是,STM32L412KB不能基于晶振作为高速时钟源,从原理图上可以看到,在开发板上使用的是由ST-LINK提供的内部时钟输出(MCO)。
时钟结构展示保持默认配置,设置好工程名和存放位置,选择好开发环境,我一般使用Keil5,所以此处选择MDK-ARM V5,然后就可以点击生成工程了。
三、Keil配置
在Keil中,为实现对STM32L412K的仿真调试等功能,需要安装好STM32L4系列的器件包(Device Family Package)。需要在Keil官网上下载2.1.0或以上的版本,因为在2.1.0才新加入了L412的支持,此处下载安装了2.2.0版本。
在Keil中,我使用的版本是5.26,选择使用新版本的V6编译器,对于STM32CubeMX生成的工程,相比于V5编译器,速度快了不少。
在Dugger下载设置中
编写程序使得板载LED以1000ms间隔闪烁,在每隔1000ms串口输出信息。
为实现使用printf函数方便的完成串口调试,需要重定向printf函数中使用的fputc函数至串口2输出,需要添加如下代码段:
/* USER CODE BEGIN 0 */#include <stdio.h> int fputc(int ch, FILE *f) { HAL_UART_Transmit(&huart6,(uint8_t*)&ch,1,HAL_MAX_DELAY); return ch; } /* USER CODE END 0 */
复制代码 /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ HAL_Delay(1000); HAL_GPIO_TogglePin(LD3_GPIO_Port,LD3_Pin); uint8_t cnt; printf("test %d\r\n",cnt++); /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */
复制代码开发板上的LD3 LED每隔1000ms改变亮灭状态,在串口调试助手中,每隔1000ms接收到一次信息。