本学习采用“STM32CubeMX + MDK-ARM”的开发工具组,内部利用ST主推的HAL(Hardware Abstraction Layer,硬件抽象层)库,对新大陆的M3主控模块(内置STM32F103VET6芯片)实现开发学习。总的开发流程如下:
1、利用STM32CubeMX对MCU进行配置。
2、生成基于MDK-ARM集成开发环境的初始化代码。
3、添加功能逻辑,完成应用开发,编译并运行。
一、任务描述
客户需要制作流水灯作为装饰,微控制器使用STM32F103VET6,根据需要完成1个LED的测试(以LED2为例)。
二、硬件结构
从M3主控模块的电路图可以看到,LED1~LED8对应的引脚分别是PE7~PE0,即对应关系如下:
PE0——LED8
PE1——LED7
PE2——LED6
PE3——LED5
PE4——LED4
PE5——LED3
PE6——LED2
PE7——LED1
同时,这些LED灯均为低电平有效,即低电平时能够将灯点亮。
另外还有一个LED9对应的引脚为PB8,另外具备了呼吸灯功能,这个后面再说。
三、实施步骤
1、新建STM32CubeMX工程
打开STM32CubeMX,点击【ACCESS TO MCU SELECTOR】,如图1所示。在搜索栏中输入“STM32F103VE”,之后选择并双击【STM32F103VETx】,如图2所示。最后进入如图3所示的界面。
图1
图2
图3
2、配置工程参数
(1)在【Pinout & Configuration】界面中,点击【System Core】中的【SYS】,将【Debug】设置为【Serial Wire】,之后就可以通过ST-LINK烧录程序,方便调试。
图4
(2)点击【RCC】,将【High Speed Clock(HSE)】和【Low Speed Clock(LSE)】都设置为【Crystal/Ceramic Resonator】,即由外部晶振提供系统时钟。
图5
(3)点击【Clock Configuration】到时钟配置界面,根据图6进行配置。
图6
(4)回到【Pinout & Configuration】界面,将【PE6】设置为【GPIO_Output】推挽输出模式,,默认为高电平,并添加用户标签【LED2】,如图7所示。
图7
(5)点击【Project Manager】到项目管理界面,在【Project】设置好项目名称、路径以及要使用IDE,如图8所示。并在【Code Generator】界面选上“Copy only the necessary library files”和“Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral”。如图9所示。
勾选“Copy only the necessary library files”表示只复制需要用到的库文件,能够提高编译效率。
勾选“Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral”表示为每一个外设初始化都生成一对的“.c/.h”文件,能使代码更有条理,方便编写代码。
图8
图9
(6)点击【GENRATE CODE】,等待STM32CubeMX生成初始化代码,如图10所示。等待一段时间完成后,如图11所示,点击【Open Project】即可打开MDK-ARM界面,如图12所示。第一次打开由Cube生成的初始化代码最好有编译的的习惯,让各个文件进行关联。
图10
图11
图12
3、完善代码
在main.c中完成如下代码。注意养成在一对【BEGIN】和【END】编写代码的习惯,这样在Cube更改配置并更新生成的初始化代码后,自己写的代码也不会消失。
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
4、编译并烧录代码
四、运行结果
LED2被点亮。