【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、流水灯

	HAL_GPIO_WritePin(GPIOB, LED1_Pin, GPIO_PIN_RESET);	//LED1亮  
	HAL_Delay(200);  //延时200m	  
	HAL_GPIO_WritePin(GPIOB, LED2_Pin, GPIO_PIN_RESET);	//LED2亮  
	HAL_Delay(200);  //延时200m	  
	HAL_GPIO_WritePin(GPIOB, LED3_Pin, GPIO_PIN_RESET);	//LED3亮  
	HAL_Delay(200);  //延时200m	  
	HAL_GPIO_WritePin(GPIOB, LED4_Pin, GPIO_PIN_RESET);	//LED4亮  
	HAL_Delay(200);  //延时200m	  	  
	HAL_GPIO_WritePin(GPIOB, LED4_Pin|LED3_Pin|LED2_Pin|LED1_Pin, GPIO_PIN_SET);//关闭4个灯 
	HAL_Delay(200);  //延时200m	

2、跑马灯

	HAL_GPIO_WritePin(GPIOB, LED1_Pin, GPIO_PIN_RESET);	//LED1亮  
	HAL_Delay(200);  //延时200m	
	HAL_GPIO_WritePin(GPIOB, LED1_Pin, GPIO_PIN_SET);	//LED1灭	  
	HAL_GPIO_WritePin(GPIOB, LED2_Pin, GPIO_PIN_RESET);	//LED2亮  
	HAL_Delay(200);  //延时200m	  
	HAL_GPIO_WritePin(GPIOB, LED2_Pin, GPIO_PIN_SET);	//LED2灭	  
	HAL_GPIO_WritePin(GPIOB, LED3_Pin, GPIO_PIN_RESET);	//LED3亮  
	HAL_Delay(200);  //延时200m	  
	HAL_GPIO_WritePin(GPIOB, LED3_Pin, GPIO_PIN_SET);	//LED3灭	  
	HAL_GPIO_WritePin(GPIOB, LED4_Pin, GPIO_PIN_RESET);	//LED4亮  
	HAL_Delay(200);  //延时200m	  	  
	HAL_GPIO_WritePin(GPIOB, LED4_Pin|LED3_Pin|LED2_Pin|LED1_Pin, GPIO_PIN_SET);//关闭4个灯 
	HAL_Delay(200);  //延时200m	

六、实验效果

七、仿真实现


总结

相关推荐

  1. LED流水

    2024-04-26 14:16:03       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-26 14:16:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-26 14:16:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-26 14:16:03       87 阅读
  4. Python语言-面向对象

    2024-04-26 14:16:03       96 阅读

热门阅读

  1. 市政行业乙级资质改革对公共交通工程的影响

    2024-04-26 14:16:03       29 阅读
  2. 商业认证项目表

    2024-04-26 14:16:03       35 阅读
  3. Leetcode 5.最长回文子串

    2024-04-26 14:16:03       38 阅读
  4. 自动驾驶---OpenSpace之Hybrid A*规划算法

    2024-04-26 14:16:03       38 阅读
  5. word 第十四课

    2024-04-26 14:16:03       29 阅读
  6. IOS恢复

    IOS恢复

    2024-04-26 14:16:03      37 阅读
  7. 如何拥有自己的私有docker仓库

    2024-04-26 14:16:03       39 阅读