【STM32 HAL库】GPIO推挽输出模式,实现LED灯点亮
目录
第一部分、GPIO 推挽输出 要点
第二部分、CubeMX 配置
第三部分、代码编写
第四部分、编译+烧录代码
本篇目标:
以LED灯的亮、灭电路控制为例,学会:
①、通过CubeMX,配置引脚工作模式
②、使用函数,控制引脚 高、低电平
③、如何在程序中编写用户代码
不聊底层理论,速度上手 GPIO-推挽输出模式 ,成为点灯大师!
友情约定:本系列的前五篇,为了方便新手玩家熟悉CubeMX、Keil的使用,会详细地截图每一步CubeMX、Keil的操作,并做上标记。之后的篇章,仅截图主要步骤页面。希望新手玩家熟记本篇的基本操作。
第一部分、GPIO 推挽输出 要点
STM32芯片引脚数量众多,除去供电、晶振等功能性引脚,绝大部分引脚可以自由控制。
我们通过一个片上外设功能:GPIO,对这些引脚进行工作模式初始化、电平控制。
GPIO是通用输入输出端口(General-purpose input/output)的英文简写。
上图是I/O端口位的基本结构,csdn上已有大量的解释,不再复述。
本篇跳过其底层原理,只聊使用。待使用上有一定认识了,再回头深入了解更有效果。
GPIO:属于芯片的外设功能,在使用上,本质就是一组功能寄存器,对寄存器不同的位(地址值),置相应的值,就能对每一个引脚进行灵活控制。
(寄存器:用结构体指针把一组内存地址按规律封装,并给这个结构体来个别名:如GPIO )
为了更方便地编写程序,官方提供了标准库、 HAL库、LL库,对芯片各种功能寄存器地址值进行了宏定义,对常用操作也进行函数封装,我们只需要调用相应函数,就可以方便地使用各种片上功能,如GPIO的初始化、控制。
在设计工作日常中,大家已约定俗成地:GPIO == 可控引脚。
我们后面的讲解,也使用这一习惯。
GPIO, 我们整理一下,它有4种工作模式:
其中:通用输出模式下的推挽输出,用于控制引脚置高、低电平。
推挽输出 的特点:
推挽输出 常常应用于:
推挽输出 注意坑区:
第二部分、CubeMX 配置
正式开跑,通过CubeMX把指定引脚配置为-推挽输出工作模式。
步骤 1、打开原理图,记录LED所用引脚。
打开板子的原理图,找到 LED 指示灯 部分:
通过上图,我们可以得知:
红色LED,连接PC5, 即给PC5置低电平时通路(亮);
蓝色LED,连接PB2, 即给PB2置低电平时通路(亮);
步骤2、CubeMX配置引脚工作模式
引脚的工作模式,可以直接使用代码进行配置的。
但既然都用上HAL库了(那些不太了解底层原理的同学),工夫能省就省,用CubeMX干!
① 如果还没有新建工程,先参考:STM32CubeMX 新建工程;
② 如果已有CubeMX生成的工程,双击*.ioc 文件打开CubeMX,对现有工程进行配置;
③ 在下图位置2的输入框,输入 PB2 (前后无空格),软件会闪烁提示引脚位置 (位置3);
技巧1:也可以搜索SPI、I2C等功能,相应功能引脚就会闪烁。
技巧2:芯片图形,可以通过鼠标拖动位置、滚轮放大缩小。
技巧3:黄色引脚 – 不可配置,绿色引脚 – 已配置成功。
④ 点击芯片中PB2引脚,将弹出功能选择框(下图箭头1);
⑤ 选择:GPIO_Output,即输出模式,会增加PB2引脚参数到列表(箭头2);
⑥ 点击(箭头2)引脚列表中,刚才被增加的PB2,将展开更详细的配置(箭头3)。
⑦ 上图中,箭头3的引脚详细参数解释:
选项 | 中文解释 | 说明 |
---|---|---|
GPIO mode | 工作模式 | Output Push Pull, 即 推挽模式输出模式 |
GPIO output level | 输出电平 | Low, 即配置为引脚低电平 |
GPIO Pull-up/Pull-down | 上下拉模式 | down;上电后,如果不配置电平,它的默认电平. |
Maxmum output speed | 引脚翻转速度 | Low; 控制LED而已,选Low也妥妥的了 |
User Label | 自定义别名 | LED_BLUE;随便,也可以不使用 |
注意,这里只是初始化引脚的工作模式。
编写代码时,可以通过代码对引脚自由置高、置低电平,以控制LED的亮灭。
使用同样的操作,把PC5引脚,也配置为推挽输出模式。
⑧ 点击生成配置
等待至弹出询问对话框,先选择关闭。
至此,引脚的工作模式配置,完成!
第三部分、代码编写
步骤一、打开Keil工程
这里分两种情况:
情况1:进行CubeMX配置前,如果已打开Keil工程,这时切回Keil,会自动弹出对话框:
“提示:工程文件被修改了,是否加载更新后的文件?”
这里,我们点击“是”, Keil就会自动把文件更新好。记得保存!
很赞、很实用的自动检测。
情况2:在进行CubeMX配置前,没有打开Keil工程,那我们手动打开工程即可。
下图一是CubeMX配置的工程目录,下图二中绿色图标文件是Keil工程入口文件。
步骤二、查看CubeMX生成的代码
在CubeMX的配置中,我们已把PB2、PC5引脚配置成推挽输出,并设置了低电平。
其生成的代码,在gpio.c文件中,如下图:
它已经帮我们按配置,生成了引脚的工作模式初始化代码(60~71行);
并把PB2、PC5设置为低电平(54、57行);
步骤三、在main.c文件中编写自己的代码
在左侧文件管理器中,双击Core > Src > main.c,即可显示其内容 。
向下滚动至大约89行,找到 /* USER CODE BEGIN 2 */ 部分,
如下图,我们在/*USER CODE BEGIN 2 */ 与它的 /*END 2 */之间,编写自己的代码,
重点:CubeMX生成的工程,用户代码,必须, 写在配对的BEGIN与END注释行之间。
否则,下次使用CubeMX重新生成时,用户代码会被干掉。谨记!谨记!谨记!
函数解释:
HAL_GPIO_WritePin(引脚端口,引脚编号,电平状态); // 用于控制引脚输出高、低电平
引脚端口:参数范围 GPIOA ~ GPIOH
引脚编号:参数范围 GPIO_PIN_0 ~ GPIO_PIN_15 ; 注意:英文字母要大写
电平状态:仅两个参数 GPIO_PIN_RESET 、 GPIO_PIN_SET; 注意:英文字母要大写
常见坑区:没进行配置、初始化的引脚,默认是输入模式,是不能进行电平控制的。
第四部分、编译+烧录代码
步骤一、编译代码
点击工具栏 "Bulid" 按钮,对工程进行编译。
编译过程,底部信息栏输出编译过程相关信息。
编译完成后,会报告汇总有多少个错误、警告。
当出现:0 errors字样,即为代码正常。Warning警告的数量不影响。
技巧1:当有错误时,向上滚动信息栏,找到第一个error字样提示行,双击将跳转到错误处。
注意1:每次编译,会自动删除旧axf文件,必须 0 errors,才能生成新的axf烧录文件。
步骤二、烧录代码
当上一步编译、修改至 0 Error后,单击菜单栏中的 “Load” 按钮,开始烧录代码。
注意1:如果工程还没进行过仿真器的参数设置,需要设置一次仿真器参数。
参考文章:【STM32 + HAL库】之 4 — 设置仿真器CMSIS-DAP参数、烧录代码_cubemx可以烧录程序吗-CSDN博客
当烧录完成后,信息栏输出如下提示:
现在,开发板上LED,成功点亮!!
至此,CubeMX配置GPIO的推挽输出模式、使用函数控制引脚电平,我们已学会了。
复习一下操作重点:
①、使用CubeMX进行引脚配置;
②、通过函数 HAL_GPIO_WritePin( ) 对引脚电平进行控制;
③、用户代码必须写在配对的注释行内;
如有某些不详尽、错误的地方,欢迎留言指正,按需更新细节。