【STM32 + HAL库】之 5 --- 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( ) 对引脚电平进行控制;

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

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

  • 25
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值