【嵌入式学习笔记】嵌入式入门1——GPIO

STM32的GPIO端口详细解析,包括其通用性、电气特性、引脚分布以及不同模式的应用,如浮空输入、上拉输入、下拉输入、模拟功能、开漏和推挽输出等。此外,还介绍了F1系列与F4/F7/H7系列GPIO的差异和配置寄存器,以及GPIO配置步骤和编程实战中的LED灯控制。
摘要由CSDN通过智能技术生成

1.什么是GPIO

General Purpose Input Output,即通用输入输出端口,简称GPIO,作用是负责采集外部器件的信息或者控制外部器件工作,即输入输出。
在这里插入图片描述

2.STM32 GPIO简介

2.1.GPIO特点

  • 不同型号,IO口数量可能不一样,可通过选型手册快速查询
  • 快速翻转,每次翻转最快只需要两个时钟周期(F1最高速度可以到50Mhz)
  • 每个IO口都可以做中断
  • 支持8种工作模式

2.2.GPIO电气特性

  • STM32工作电压范围——2 V ≤ VDD ≤ 3.6 V

  • GPIO识别电压范围——COMS端口-0.3V ≤ VIL ≤ 1.164V,1.833V ≤ VIH ≤ 3.6V,部分兼容TTL

  • GPIO输出电流——单个IO,最大25mA

详情参考STM32的数据手册

2.3.GPIO引脚分布

STM32引脚类型:电源引脚、晶振引脚、复位引脚、下载引脚、BOOT引脚、GPIO引脚

在这里插入图片描述
在这里插入图片描述
IO引脚分布特点:按组存在、组数视芯片而定、每组最多16个IO引脚

3.IO端口基本结构介绍

  • F1系列IO端口基本结构
    ① 保护二极管
    ② 内部上拉、下拉电阻
    ③ 施密特触发器
    ④ P-MOS & N-MOS管
    在这里插入图片描述

  • F4/F7/H7系列IO端口基本结构
    在这里插入图片描述

  • 施密特触发器:施密特触发器就是一种整形电路,可以将非标准方波,整形成方波
    在这里插入图片描述

  • P-MOS & N-MOS管:MOS管是压控型元件,通过控制栅源电压( Vgs )来实现导通或关闭
    在这里插入图片描述

4.GPIO的八种模式分析

模式特点及应用
浮空输入输入用,完全浮空,状态不定
上拉输入输入用,用内部上拉,默认是高电平
下拉输入输入用,用内部下拉,默认是低电平
模拟功能ADC、DAC
开漏输出软件IIC的SDA、SCL等
推挽输出驱动能力强,25mA(max),通用输出
开漏复用片上外设功能(硬件IIC 的SDA、SCL引脚等)
推挽复用片上外设功能(SPI 的SCK、MISO、MOSI引脚等

4.1.浮空输入

在这里插入图片描述

4.2.上拉输入

在这里插入图片描述

4.3.下拉输入

在这里插入图片描述

4.4.模拟功能

在这里插入图片描述

4.5.开漏输出

在这里插入图片描述

4.6.推挽输出

在这里插入图片描述

4.7.开漏复用

在这里插入图片描述

4.8.推挽复用

在这里插入图片描述

4.9.F4/F7/H7系列和F1系列的GPIO差异点

  • F1在输出模式,禁止使用内部上下拉,F4/F7/H7在输出模式,可以使用内部上下拉
  • 不同系列IO翻转速度可能不同

【STM32能输出5V的电平吗?——可以,兼容5V的引脚可以】

5.GPIO寄存器介绍

在F1系列和F4/F7/F7系列的GPIO中,选择GPIO模式的寄存器不同,控制输入输出的寄存器相同
在这里插入图片描述

5.1.F1/F4/F7/H7相同GPIO寄存器

  • 端口输入数据寄存器IDR——用于判断IO引脚的电平
    在这里插入图片描述
  • 端口输出数据寄存器ODR——用于设置IO引脚输出的电平
    在这里插入图片描述
  • 端口位设置/清除寄存器BSRR——用于设置ODR寄存器
    在这里插入图片描述

5.2.F1系列特有GPIO寄存器

  • 端口配置低/高寄存器CRL/CRH——设置工作模式、输出速度
    在这里插入图片描述

5.3.F4/F7/H7系列特有GPIO寄存器

  • GPIO 端口模式寄存器MODER——用于设置模式
    在这里插入图片描述
  • GPIO 端口输出类型寄存器OTYPER——用于设置输出类型
    在这里插入图片描述
  • GPIO 端口输出速度寄存器OSPEEDR——用于设置IO的输出速度
    在这里插入图片描述
  • GPIO 端口上拉/下拉寄存器(PUPDR)用于设置上拉/下拉电阻
    在这里插入图片描述

5.4.F1系列与F4/F7/H7系列工作模式配置

  • F1系列
    输入上拉/下拉电阻通过ODR寄存器来设置
    在这里插入图片描述
  • F4/F7/H7系列
    在这里插入图片描述

5.5.ODR和BSRR寄存器控制输出的区别

ST官方给的答案:使用ODR,在读和修改访问之间产生中断时,可能会发生风险;BSRR无风险。建议使用BSRR控制输出

ODR修改:读->->写
GPIOB->ODR |= 1 << 3;         	/* PB3 = 1 */
BSRR修改:写 
GPIOB->BSRR = 0x00000008;      	/* PB3 = 1 */

6.通用外设驱动模型(四步法)

在这里插入图片描述

7.GPIO配置步骤

  • 使能时钟 __HAL_RCC_GPIOx_CLK_ENABLE()

  • 设置工作模式 HAL_GPIO_Init()

  • 设置输出状态(可选) HAL_GPIO_WritePin() 、HAL_GPIO_TogglePin()

  • 读取输入状态(可选) HAL_GPIO_ReadPin()
    在这里插入图片描述

  • 关键结构体

// F1
typedef struct 
{ 
  uint32_t Pin;        	/* 引脚号 */ 
  uint32_t Mode;   		/* 模式设置 */ 
  uint32_t Pull;       	/* 上拉下拉设置 */ 
  uint32_t Speed;  		/* 速度设置 */ 
} GPIO_InitTypeDef;
// F4/F7/H7
typedef struct 
{ 
  uint32_t Pin;    		/* 引脚号 */ 
  uint32_t Mode;        /* 模式设置 */ 
  uint32_t Pull;        /* 上拉下拉设置 */ 
  uint32_t Speed;       /* 速度设置 */
  uint32_t Alternate; 	/* 复用功能 */
} GPIO_InitTypeDef;

8.编程实战:点亮一个LED灯/跑马灯

分析IO输出模式——推挽输出
在这里插入图片描述

9.编程实战:通过一个按键控制一个LED灯亮灭

在这里插入图片描述
在这里插入图片描述
【编程实战代码暂不贴出】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值