本项目讲解所用工程均使用stm32f103C8T6芯片HAL库版本。
原理讲解
本节内容我们讲解点亮LED灯闪烁实验,简单来讲就是实现LED电平翻转实现LED灯亮灭的过程。我们点亮LED灯需要给LED输入一个高电平,熄灭LED灯则给LED灯输入一个低电平,将两个电平状态不断重复即可实现LED的闪烁。
初始化配置
接下来我们利用Cubemx进行HAL库的初始化配置,建立工程的部分我们这里就直接快速完成,不了解的同学可以看我之前的新建工程部分
建立工程后,我们首先配置时钟,将时钟设置为外部时钟
再配置相应时钟树,将总频设置为32MHz。
这里我们用到了PLLCLK和HSE,“PLLCLK” 在 STM32 微控制器中是指通过锁相环(PLL)技术生成的时钟信号。STM32 有多种时钟源,包括 HSI(高速内部时钟)、HSE(高速外部时钟)、LSI(低速内部时钟)、LSE(低速外部时钟)和 PLL。PLLCLK 是基于这些时钟源之一通过PLL倍频后产生的。
简单讲解一下设置,我们通过外部高速时钟源获得了8MHz的频率,再通过PLL倍频后产生32MHz的频率作为我们的总频。
设置完时钟树,我们初始化对应的IO口(最小板上的LED灯为PC13)用于控制高低电平的输出。可以看到,我们这里设置为GPIO_Output(输出模式),绿色即为设置完成的引脚,之后再将几个GPIO引脚的初始状态设置为Low(低电平),Output Push Pull(推挽输出),No pull_up and no pull_down(浮空模式),最大速度为Low(最低),就此IO口的初始化就算完成了。
紧接着输出工程,将必要的内容勾选和填写一下即可。注意!!!文件路径中不要出现中文
打开工程即可编写代码
代码书写
打开我们的头文件即可看到gpio.c的文件,里面储存的就是对GPIO的初始化设置。
#include "main.h"
#include "gpio.h"
双击打开gpio.c文件,学过标准库的同学应该对这串代码很熟悉,这串代码就是我们的初始化配置代码,也就是我CubeMX上配置的程序。
回到main.c文件书写我们的主程序。如果我们记不住对GPIO的书写程序,可以打开stm32f1xx_hal_gpio.h的库文件,这个文件是Hal自动生成的文件。如图,有两个常用函数HAL_GPIO_ReadPin和HAL_GPIO_WritePin,英语好的同学可以看出,一个是读,一个是写。HAL_GPIO_ReadPin是读取IO口的状态,比如按键按下时会给出电平,通过检测获取的电平完成相应的任务。
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
HAL_GPIO_WritePin是向对应的IO口写入状态,比如我给LED写入高电平即可让LED灯亮,从而直接控制LED灯。LED灯闪烁实验是控制LED灯亮灭,所以我们使用HAL_GPIO_WritePin函数。
再来看看函数中需要填入哪些值.
先将程序编译一遍,选中对应函数然后右键跳转查看定义。
如果无法跳转,首先检查是否编译了一遍,在检查是否勾选了以下路径的选项
跳转后我们向上滑动即可看到对应的函数介绍。
可以看到第一个输入值为对应的GPIO组,第二个输入值为对应的引脚,格式为GPIO_PIN_X,第三个输入值为引脚高低电平的设置。
了解完后,接下来就可以编写代码了。编写代码的时候需要注意,代码必须编写在BEGIN和END之间,否则修改CubeMX时会将你输入的代码给刷新掉!!!
/* USER **** BEGIN 2 */
在这个位置写入代码
/* USER **** END 2 */
在While中写入代码“HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);”使LED点亮,“HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);”使LED灯熄灭,为了使实验现象明显,我们需要让他暂停在当前状态几秒钟,所以要加入延时HAL_Delay()。
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
HAL_Delay(500);
紧接着编译查看报错和警告,没有报错即可下载。
如果没有现象就按最小板上的复位按键,嫌麻烦可以勾选这个选项,勾选后自动复位。
以上即为闪烁灯实验的全部内容。
标签:HAL,PIN,WritePin,LED,STM32,GPIO,闪烁,时钟 From: https://blog.csdn.net/aiileng/article/details/141857311