当前位置:   article > 正文

【STM32+HAL+Proteus】系列学习教程3---GPIO输出模式(LED流水灯、LED跑马灯)

【STM32+HAL+Proteus】系列学习教程3---GPIO输出模式(LED流水灯、LED跑马灯)

实现目标

1、掌握GPIO 输出模式控制

2、学会STM32CubeMX软件配置GPIO

3、具体目标:1、开发板4个LED实现流水灯;2、开发板4个LED实现跑马灯灯。


一、STM32 GPIO 概述

1、GPIO定义

      GPIOGeneral-purpose input/output)是通用输入输出端口的英文简写,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。
        STM32单片机的GPIO被分为很多组,每组有16个引脚,不同型号的MCU的GPIO个数是不同的,比如STM32F103C6T6只有PA、PB以及个别PC引脚而STM32F103ZET6拥有PA~PG的全部112个引脚。所有的GPIO都有基本的输入输出功能,同时GPIO还可以作为其它的外设功能引脚。
        STM32的大部分引脚除了当GPIO使用之外,还可以复用为外设功能引脚(比如串口、PWM、ADC等)。

2、GPIO硬件结构框图

 关键器件解析:
1、保护二极管:防止I/O引脚外部过高、过低的电压输入,当引脚电压高于VDDIOx时,上方的二极管导通;当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。
2、开关:开关为TTL肖特基触发器,将模拟信号转化为0和1的数字信号,但当GPIO作为ADC采集电压通道时,此时信号不再经过触发器进行TTL电平转换。
3、P-MOS、N-MOS:单元电路使得GPIO具有“推挽输出”和“开漏输出”的功能。

3、GPIO工作模式

         STM32的GPIO共有8种工作模式:输入模式的模拟输入、上拉输入、下拉输入和浮空输入以及输出模式的推挽输出、开漏输出、推挽复用输出和开漏复用输出。同时,GPIO还支持三种最大翻转速度(2MHz、10MHz、50MHz)。

GPIO_Mode_AIN              // 模拟输入
GPIO_Mode_IN_FLOATING   // 浮空输入
GPIO_Mode_IPD               // 下拉输入
GPIO_Mode_IPU               // 上拉输入
GPIO_Mode_Out_OD        // 开漏输出
GPIO_Mode_Out_PP        // 推挽输出
GPIO_Mode_AF_OD         // 复用开漏输出
GPIO_Mode_AF_PP          // 复用推挽输出

4、GPIO每种工作模式的应用方式

二、原理图设计

说明:四个LED都是低电平点亮。开发板上管脚对应LED1--PB9,LED2--PB8,LED3--PB5,LED4--PB4.

三、STM32CubeMX 配置

1.4个LED配置

配置1:(1)上电初始电平为  High ,LED先不点亮;(2) 4个LED配置为推挽输出模式(OutPut Push Pull );(3)不需要上拉,下拉;(4)输出速度为Low  2MHz; (5)设置管脚标号 LED1--LED4

四、主要函数说明

1、GPIO外设库的文件:            
stm32f10xx_hal_gpio.h、
stm32f10xx_hal_gpio.c
2、操作GPIO常用HAL库函数
(1)功能:读取一个引脚的电平。
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

(2)功能:写一个引脚的电平,可写高电平,也可以是低电平。
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

(3)功能:翻转一个引脚的电平
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

五、程序设计

1、流水灯

  1. HAL_GPIO_WritePin(GPIOB, LED1_Pin, GPIO_PIN_RESET); //LED1亮
  2. HAL_Delay(200); //延时200m
  3. HAL_GPIO_WritePin(GPIOB, LED2_Pin, GPIO_PIN_RESET); //LED2亮
  4. HAL_Delay(200); //延时200m
  5. HAL_GPIO_WritePin(GPIOB, LED3_Pin, GPIO_PIN_RESET); //LED3亮
  6. HAL_Delay(200); //延时200m
  7. HAL_GPIO_WritePin(GPIOB, LED4_Pin, GPIO_PIN_RESET); //LED4亮
  8. HAL_Delay(200); //延时200m
  9. HAL_GPIO_WritePin(GPIOB, LED4_Pin|LED3_Pin|LED2_Pin|LED1_Pin, GPIO_PIN_SET);//关闭4个灯
  10. HAL_Delay(200); //延时200m

2、跑马灯

  1. HAL_GPIO_WritePin(GPIOB, LED1_Pin, GPIO_PIN_RESET); //LED1亮
  2. HAL_Delay(200); //延时200m
  3. HAL_GPIO_WritePin(GPIOB, LED1_Pin, GPIO_PIN_SET); //LED1灭
  4. HAL_GPIO_WritePin(GPIOB, LED2_Pin, GPIO_PIN_RESET); //LED2亮
  5. HAL_Delay(200); //延时200m
  6. HAL_GPIO_WritePin(GPIOB, LED2_Pin, GPIO_PIN_SET); //LED2灭
  7. HAL_GPIO_WritePin(GPIOB, LED3_Pin, GPIO_PIN_RESET); //LED3亮
  8. HAL_Delay(200); //延时200m
  9. HAL_GPIO_WritePin(GPIOB, LED3_Pin, GPIO_PIN_SET); //LED3灭
  10. HAL_GPIO_WritePin(GPIOB, LED4_Pin, GPIO_PIN_RESET); //LED4亮
  11. HAL_Delay(200); //延时200m
  12. HAL_GPIO_WritePin(GPIOB, LED4_Pin|LED3_Pin|LED2_Pin|LED1_Pin, GPIO_PIN_SET);//关闭4个灯
  13. HAL_Delay(200); //延时200m

六、实验效果

七、仿真实现


总结

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/473645
推荐阅读
相关标签
  

闽ICP备14008679号