1.5 点亮一个LED

根据开发板上的原理图,LED1LED2LED3LED4这四个小灯分别接在了PD12PD13PD14PD15这四个IO口上,因此如果想要点亮LED1,只需要让单片机的PD12输出一个低电平,如图1-3所示。

1-3 LED小灯原理图

1.5.1 使用STM32CubeMX生成代码

打开STM32CubeMX,点击“ACCESS TO MCU SELECTOR”,进入“New Project from a MCU/MPU”界面,如图1-4所示。

1-4 STM32CubeMX配置界面(一)

单击左上角“Part Number”下拉栏中,鼠标单击下拉箭头选择“STM32F103VCT6”,然后在MCUs/MPUs List选择STM32F103VCT6,如图1-5所示。

1-5 STM32CubeMX配置界面(二)

在出现的“Pinout&Configuration”界面进行引脚配置,选择System Core菜单下的“SYS”,在Debug配置选项选择“Serial Wire”,将SWD调试接口打开,以便后续程序的下载和调试,如图1-6所示。

1-6 STM32CubeMX引脚与配置界面(一)

选择System Core菜单下的“RCC”,将High Speed ClockHSE)和Low Speed ClockLSE)全部设置成为“Crystal/Ceramic Reonator”,即将时钟源设置为外部的晶振提供,相较于使用内部RC时钟,外部的时钟源提供的时钟更加精准,如图1-7所示。

1-7 STM32CubeMX引脚与配置界面(二)

通过原理图得知,小灯LED1接到了PD12引脚上,使用鼠标左键点击右侧芯片的PD12引脚,选择“GPIO_Output”,如图1-8所示。

1-8 STM32CubeMX引脚与配置界面(三)

选择左侧System Core菜单下的GPIO,找到刚才配置的PD12,在GPIO栏目中鼠标左键单击PD12,而后在下方User Label选项中,修改成自己想要的GPIO的命名,方便后续使用,本例程修改为LED1,如图1-9所示。

1-9 STM32CubeMX引脚与配置界面(四)

鼠标单击“Clock Configuration”进入时钟配置界面。Kingst32开发板采用的是8M的晶振,通过STM32内部的PLL倍频后可实现最高72M的工作主频。此外,由于APB1总线时钟最大为36M,因此需要将APB1的分频器通过2分频的方式将72M分频为36M,如图1-10所示。

1-10 STM32CubeMX时钟配置界面

鼠标单击“Project Manager”,修改项目名称,选择生成代码的路径位置,修改使用的IED工具为MDK-ARM。配置代码路径时不要使用中文字符,否则代码将丢失单片机启动文件,如图1-11所示。

1-11 STM32CubeMX工程管理界面

鼠标单击“GENERATE CODE”按钮,可以自动生成工程以及整体的程序框架,如图1-12所示。

1-12 STM32CubeMX代码生成界面

打开Project Manager配置的工程文件夹,可以看到STM32CubeMX将整个工程建立完毕。文件夹内有CoreDirversMDK-ARM共三个文件夹,Core用来存放用户的所有代码的C源文件和H头文件;Dirver文件夹存放的是内核相关文件和HAL库的源文件;MDK-ARM文件夹存放的是工程文件,以及所有编译的过程文件和最终文件,如图1-13所示。

第1章 从STC89C5RC到STM32(1.5-1.7)

1-13 STM32CubeMX代码生成界面

单击打开MDK-ARM文件夹,双击打开LED-test.uvprojx工程文件。单击编译按钮,将整个工程编译完成,可以观察到0错误0警告。单击左侧各分组的“+”号,可以看到工程包含的所有文件。双击打开main.c文件,如图1-14所示。

1-14 源程序软件界面

main.c文件中找到main主函数,在while1)主循环插入下列语句,即可拉低在图1-9配置的LED1引脚,点亮LED1这颗小灯:

HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);

本条语句的写入做以下几点介绍:

1、工程中的代码有一部分是系统自动生成的,有一部分是作为用户编写的。为了规范期间,用户需要将代码写在/* USER CODE BEGIN*//*USER CODE END*/中间。

2、这条语句是HAL库函数,按照HAL库的手册标准格式,用户应该写成以下语句:

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET);51单片机的IO口分为P0P1P2P3,而STM32单片机的IO口分为GPIOAGPIOBGPIOCGPIODGPIOE… …其中GPIOD代表了PD口,GPIO_PIN_12代表了第12引脚,GPIO_PIN_RESET代表了将这个引脚拉低(GPIO_PIN_SET表示拉高引脚)。而由于采用了STM32CubeMX自动生成的工程文件,在main.h文件中,为了方便和用户的配置信息进行,自动生成了宏定义,如图1-15所示。

1-15 main.h头文件宏定义

3、采用STM32CubeMX自动生成代码后,调用库函数时用户便可以直接使用更符合用户习惯的和更直观的参数,如将“GPIOD”替换为LED1_GPIO_Port,将GPIO_PIN_12替换为LED1_Pin,并且完全不涉及到底层寄存器的操作了。请想一下,采用LED1_GPIO_Port后感官上是不是更加直观了,开发的过程更像是计算机编程,而不是单片机编程了。

1.6 DAP-LINK下载配置

使用USB线将DAP-LINK 连接到电脑上,点击“Option for Target”按钮,选择“Debug”菜单,点击“Use”选项,选择“CMSIS-DAP-Debugger”,如图1-16所示。

1-16 选择仿真器类型

单击“Settings”选项,可以看到识别到仿真器“CMSIS-DAP_Kingst”设备,此外,也可以看到“IDCODE”值,表示仿真器和开发板连接成功,并且已经被Keil软件识别,如图1-17所示。

1-17 仿真器连接

单击“OK”,关闭对话框。单击编译按钮,检查程序的语法错误。如果程序编译完成并且无错误的情况下,单击“LAOD”按钮,即可将程序下载到单片机中。按下开发板上的RST复位按键,松开手后,可以看到开发板的左下方LED1被点亮。如图1-18所示。

1-18 点亮LE1实验

1.7 课后作业

将开发板上四个LED小灯全部点亮。