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); //给PE5引脚写入低电平我的是低电平点亮
//HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,0); //这样写也可以,但会报warning
//HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,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);这个函数也可以实现点灯。
点灯例程