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

本文详细介绍了如何使用STM32的GPIO进行LED控制,包括GPIO的基本概念、工作模式,以及在STM32CubeMX中配置GPIO为推挽输出并实现LED流水灯和跑马灯的效果。通过实例演示了GPIO外设库的使用和关键函数的操作,适合STM32初学者学习实践。
摘要由CSDN通过智能技术生成

实现目标

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	

六、实验效果

七、仿真实现


总结

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

面包板扎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值