首页 > 其他分享 >零基础学STM32(四)-LED灯闪烁实验

零基础学STM32(四)-LED灯闪烁实验

时间:2024-09-28 21:48:15浏览次数:10  
标签:HAL PIN WritePin LED STM32 GPIO 闪烁 时钟

本项目讲解所用工程均使用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

相关文章

  • 蓝桥杯—STM32G431RBT6(TIM定时器输入捕获频率和占空比)
    一、什么是输入捕获?对比输出捕获区别?输入捕获是指对输入信号的特定事件进行检测和记录它主要用于测量输入信号的时间间隔、频率等参数。而输出捕获则是对输出信号的特定事件进行控制和监测。两者的主要区别在于作用对象不同,输入捕获关注的是输入信号,而输出捕获关注的是输出信......
  • 蓝桥杯--STM32G431RBT6(TIM定时器的输出频率和占空比,含详细原理介绍和使用方法)
    目录一、前言二、代码实现功能:​编辑按如图配置定义变量编写执行代码 显示在LCD上加入按键效果三、效果展示四、代码开源 一、前言ARR即自动重装载值(AutoReloadRegister)。相当于一个水杯,水杯容量,水满为一个周期,倒掉重新滴水。它是一个用于指定特定数值的参......
  • STM32 f407 多通道ADC采集+DMA传输 基于HAL库和Cubemx配置
    在实际应用中ADC往往是要和DMA一起使用的,DMA将ADC转换值放入预设好的变量中,该过程不占用CPU资源,需要读取ADC输入时再让CPU读取变量即可。下面记录使用cubemx配置多通道ADC采集的具体流程,并编写对ADC采样值进行滤波的程序(选择开发板、开启外部时钟和SW调试接口、ProjectManage......
  • STM32 f407 多通道PWM输出 基于HAL库和Cubemx配置
    STM32PWM的相关理论知识可以参考江科大的视频教程,或者正点和野火的HAL库开发手册,以下是相关链接:[6-4]PWM驱动LED呼吸灯&PWM驱动舵机&PWM驱动直流电机_哔哩哔哩_bilibili31.TIM—高级定时器—[野火]STM32HAL库开发实战指南——基于野火F4系列开发板文档下面记录一下使......
  • STM32F407+IAP+Ymodem协议
    首先硬件, BOOT的接线方式是选择方式1,当stm32软件复位可以0x08000000重新启动程序重新加载bootloader程序移植官方的ymodem协议common.c1/**2******************************************************************************3*@fileSTM32F4xx_IAP/s......
  • 关于Clion汉化失败Plugin “Chinese (Simplified) Language Pack / 中文语言包“ was
    关于Clion汉化失败出现Plugin"Chinese(Simplified)LanguagePack/中文语言包"wasnotinstalled:Invalidfilenamereturnedbyaserver意思是你安装的汉化包不可被识别,截止到23/7/22pluginsmarket搜索到的汉化包版本不再能兼容21版本的clion了解决方法有两个1.升......
  • 三星G8 OLED显示器S34BG850SC,使用DP线连接电脑,显示器黑屏问题解决。
    这个问题在网上好像很多人问,但是每个人的情况不同,总之我也是遇到了。事情大概:PC机显卡的DP口通过显示器自带的MiniDP线和显示器相连,这个没什么好说的了,原配只送MiniDP线,想必买这台显示器的人都是先用的这根线。然而我有一台NUC,通过雷电口也连接到了这台显示器。所以我这台G8是......
  • mapbox没有token/token失效,地图闪烁后变空白,报错Error: A valid Mapbox access token
    目录mapbox没有token/token失效,地图闪烁后空白,报错Error:AvalidMapboxaccesstokenisrequiredtouseMapboxGLJS.一、问题描述二、mapbox去除token验证1、找到mapbox-gl文件夹2、找到mapbox-gl.js文件3、找到对应位置并修改 4、清除缓存5、问题解决三、高阶......
  • 嵌入式项目:STM32平衡车详解 (基础知识篇) (基于STM32F103C8T6)
    前言:本文是基于B站草履虫编写的平衡车相关内容,包括模块和基础知识,结合代码进行讲解,将知识进行汇总(由于本篇内容较长,请结合目录使用)注:基于开源精神,本文仅供学习参考目录前言:本文是基于B站草履虫编写的平衡车相关内容,包括模块和基础知识,结合代码进行讲解,将知识进行汇总......
  • STM32-使用串口空闲中断,实现串口不定长接收
    示例代码是直接操作寄存器的核心思路很简单:接收到消息后,打开串口总线空闲中断总线进入空闲中断后,关闭空闲中断代码如下:``点击查看代码#include"myusart2.h"#include"string.h"#include"tool.h"charusart2_rec_buff[usart2_rec_len];u8usart2_rec_flag=0;......