STM32CubeMX教程1 — 点亮一个LED灯
前期准备: ①:STM32硬件(我的是STM32F103ZET6) ②:STM32CubeMX Keil5
实验目的
点亮一个LED灯 (ps:我的LED对应GPIO是PE5,带上拉,低电平点亮)
思维导图
新建工程:
1.在主界面选择File–>New Project 或者直接点击ACCEE TO MCU SELECTOR 或Ctrl+N;
2.在 Part Number中搜索芯片型号,然后双击右下角的STM32F103ZETX
3.进入下面界面;
4.首先我们设置时钟,点击System core,找到RCC,将高速时钟与低速时钟都设置为外部时钟,如下 接下来点击Clock Configuration, 由于我们选择选择外部时钟,因此勾选HSE,通锁相环分频;
5.其次,我们配置Debug,点击Pinout&Configuration,找到System core分页下的SYS,将Debug选择为Serial Wire,如下:
6.配置我们的GPIO口,在右下角的搜索相应引脚,我的是在PE5 点击那个黑色闪烁的PE5,点击GPIO_Output 跳转到System Core分页下的GPIO, 我们来配置GPIO: GPIO output level 设置此引脚为高电平还是低电平 GPIO mode 设置此引脚的输出模式 Output Open Drain 开漏输出,Output Push Pull 推挽输出 GPIO Pull-up/Pull-down 设置上拉下拉 Maximum output speed 设置速度 User Label 用户标签
7.生成我们的工程,点击Project Manager 依次进行设置,(注:路径中不能包含中文!路径中不能包含中文!路径中不能包含中文!) 接着点击Code Generator Cope all used libraries into project folder 软件包中所有.c和.h都复制到工程中 优点:可以在此工程中直接添加外设,不需要再用CubeMX配置 缺点:编译速度慢 Cope only the necessary library files 只复制需要的.c和.h 优点:编译速度较快 缺点:如果要增加外设,需要继续用CubeMX配置 Add necessary library library files as … 不复制.c和.h文件,直接从软件包储存位置中引用 优点:编译速度快 缺点:不能更改文件位置 Generate peripheral initialzation… 每个外设生成单独的.c和.h文件 Backup previously generted… 重新生成代码是保留以前编译产生的文件 Keep User Code when… 重新生成代码时保留用户的代码 Delete previoly generted…重新生成代码是输出以前编译产生的文件 最后点击GENERATE CODE
Keil5编程
8.打开文件 Core 中的两个文件中包括.c和.h文件(用户如果要写其他的.c和.h文件可以保存在这里面) LED.ioc 我们可以通过这打开CubeMX继续进行配置 点击MDK-ARM,点开LED.uvprojx,编译一下,无错误警告 在gpio.c中可以找到MX_GPIO_Init(),这是对我们的GPIO引脚初始化,如需修改,我们可以在这里修改
在main.h中可以找到我们的标签 接下来我们来学习一下HAL库中常见的输出函数 ps:一点小技巧,我们想要找关于gpio的函数,我们可以在gpio.c分页下找到stm32f1xx_hal_gpio.h 向下拉就会找到 首先:我们学习 *void HAL_GPIO_WritePin(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); 给引脚写入高电平还是低电平 通过这个可以找到函数的原型(或者直接按F12也可以到定义处) *第一个参数,第二个参数:确定引脚号,第三个参数:高低电平 void HAL_GPIO_TogglePin(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin); 电平翻转函数
在main.c中我们的代码
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET);
ps:用户代码尽量写在 / USER CODE BEGIN 2 / / USER CODE END 2 / 之间,否则,如果我们使用CubeMX增加外设时我们以前写的代码将会消失
编译烧录复位,就点亮我们的LED灯了(哈哈,很开心对吧)
同理,我们使用void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);这个函数也可以实现点灯。 点灯例程
写在最后,以后不定时会更新
|