【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种工作模式:

        其中:通用输出模式下的推挽输出,用于控制引脚置高、低电平。

推挽输出 的特点:

  • 用于控制引脚输出 高、低电平两种状态;
  • 电压:高电平(置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的引脚详细参数解释:

       

    选项 中文解释 说明 
    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( ) 对引脚电平进行控制;

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

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

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【STM32 HAL库】GPIO推挽输出模式,实现LED灯点亮

    发表回复