【STM32 + HAL库】之 5 --- GPIO 推挽输出模式,点亮LED灯

目录

第一部分、GPIO 推挽输出 要点

第二部分、CubeMX 配置        

第三部分、代码编写

第四部分、编译+烧录代码


本篇目标:

        以LED灯的亮、灭电路控制为例,学会:

        ①、通过CubeMX,配置引脚工作模式
        ②、使用函数,控制引脚 高、低电平
        ③、如何在程序中编写用户代码     

        不聊底层理论,速度上手 GPIO-推挽输出模式 ,成为点灯大师!       

     


友情约定:本系列的前五篇,为了方便新手玩家熟悉CubeMX、Keil的使用,会详细地截图每一步CubeMX、Keil的操作,并做上标记。之后的篇章,仅截图主要步骤页面。希望新手玩家熟记本篇的基本操作。


第一部分、GPIO 推挽输出 要点

        

1、GPIO引脚 速读

STM32芯片的引脚,通过 GPIO(通用输入输出端口) 进行控制。

下图,是I/O端口位的基本结构,csdn上已有大量文章解释其硬件原理,不再复述。   

这个图,很多新手是完全看不明白的。新手阶段不用太在意,待使用上有一定认识了,以后再深入细刨才能有效地理解。

本篇只讨论 使用

GPIO ,在使用时,就是一组功能寄存器,对寄存器不同的位(地址值),置相应值,就能对每一个引脚进行灵活控制:设置成不同的工作模式、电平状态。

(寄存器是啥:用结构体指针把一段内存地址按规律封装,并给这个结构体整个别名:如 GPIO )

为了更方便地编写程序,官方提供了标准库、 HAL库、LL库,对芯片各种功能寄存器地址值进行了宏定义,对常用操作也进行函数封装,我们只需要调用相应函数,就可以方便地使用各种片上功能,如GPIO的初始化、控制。

2、引脚的工作模式

在日常中,大家已约定俗成地称呼:GPIO == 引脚。

我们后面的讲解,也使用这一称呼习惯。

 GPIO,  我们整理一下,它有4种工作模式:

本节,我们示范使用:推挽输出模式,它用于控制引脚置高、低电平。

3、推挽输出模式 的特点

  • 电平控制:引脚输出高电平(3.3V)或低电平(0V)。
  • 电流能力:单引脚最大输出电流 8mA,最大灌入电流 20mA,芯片总电流不超过 150mA。
  • 应用场景:控制 LED、三极管、MOS 管、继电器等。

4、推挽输出 的坑区:

  • 输出的电平状态,由内部弱电阻控制;  引脚具体状态,受外部电路影响;
  • 怎样输出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的引脚详细参数解释:

   

选项中文解释说明 
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生成的工程,用户代码,必须,  写在配对的BEGINEND注释行之间。

        否则,下次使用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( ) 对引脚电平进行控制;

        ③、用户代码必须写在配对的注释行内;

        如有某些不详尽、错误的地方,欢迎留言指正,按需更新细节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值