目录
本篇目标:
以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种工作模式:
其中:通用输出模式下的推挽输出,用于控制引脚置高、低电平。
推挽输出 的特点:
- 用于控制引脚输出 高、低电平两种状态;
- 电压:高电平(置1)电压=3.3V、低电平(置0)电压=0V;
- 电流:单引脚最大输出8mA、灌入20mA ; 芯片VDD总流入<150mA,VSS总流出<150mA;
推挽输出 常常应用于:
- 控制板载LED灯,作工作状态指示
- 控制三极管、MOS管的开合(以小控大);
- 控制继电器模块 (以小控大)
- 按通信要求,用高、低电平按规律产生通信所需时序,如单总线、模拟I2C等等;
推挽输出 注意坑区:
- 输出的电平状态,由内部弱电阻控制; 引脚具体状态,受外部电路影响;
- 怎样输出5V或更高电压?方法很多,通过外部mos管或继电器等。
- 单引脚最大输出8mA,最大灌入20mA值!!芯片总电流不要超过150mA;
- 高电平时虽然是3.3V,如上,电流是很小的,即负载是很小的,一般只当信号使用;
- 驱动LED可以,别想着驱动小电机了。
- 电平状态只能是0V或3.3V; 大小不可控,如不能输出2.5V, 那是模拟模式下DAC的事。
- 开发板的排针,一般都是芯片引脚直接引出到排针,没有隔离保护,注意使用!
第二部分、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的引脚详细参数解释:
class="table-box">
选项 | 中文解释 | 说明 |
---|---|---|
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;随便,也可以不使用 |
评论记录:
回复评论: