STM32F103C8----GPIO(跟着江科大学STM32)

一,GPIO简介

GPIO(General Purpose Input Output)通用输入输出口

可配置为8种输入输出模式

引脚电平:0V~3.3V(0V),部分引脚可容忍5V

输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等

输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等

二,GPIO基本结构

所有的GPIO都是关在APB2总线上。在控制板上有如下针脚

三,GPIO位图

3.1 保护二极管

先看右边的的两个保护二极管,VDD接3.3V,VSS接地。当右侧IO引脚输入大于3.3V不会对内部电路产生伤害。

如果右侧IO针脚输入了一个负电压,那么在VSS和IO会形成回路,对内部起到保护作用。

只有当输入电压是0-3.3V,才会进入系统内部 。

3.2 上拉输入

3.3 下拉输入

3.4 浮空输入

输入不是高电平就是低电平,当外部IO什么都不接,这个时候处于浮空状态,极易受外界干扰,就不能确定输入的是高电平还是低电平。所以我们在程序中常用上拉或者下拉输入。

上拉输入:默认输入高电平

下拉输入:默认输入低电平

3.5 肖特基触发器

只在大于上限或者小于下限时做变化,所以简易逻辑如下图 ,

低于上限不一定会发生变化,高于下限也不一定会变化。

有效避免电压波动导致的输入抖动情况。

3.6 推婉输出

推婉输出模式下,输出1,P=MOS导通 ,N-MOS断开,I/O输出高电平

输出0,P=MOS断开 ,N-MOS导通,I/O输出低电平

推婉输出有绝对的控制权。也较强输出。

3.7 开漏输出

在开漏输出模式下,P-MOS无效,只有N-MOS工作。

在多级通讯中,这种模式避免设备之间的相互干扰。

也可用于5V的电平信号输出。当寄存器输出0,是N-MOS导通,输出低电平。

当输出1时,由外部的上拉电阻拉高电平。实现5V通电。

3.8 关闭输出

综上如下表

|------|---------|-------|-------|--------------------------|
| | 输出寄存器的值 | P-MOS | N-MOS | 输出 |
| 推婉输出 | 1 | 导通 | 关闭 | 高电平 |
| 推婉输出 | 0 | 关闭 | 导通 | 低电平 |
| 开漏输出 | 1 | 无效 | 关闭 | 高阻模式(只有低电平有驱动能力。比如I2C引脚) |
| 开漏输出 | 0 | 无效 | 导通 | 低电平 |
| 关闭输出 | 1 | 无效 | 无效 | 端口关闭,外部信号控制 |
| 关闭输出 | 0 | 无效 | 无效 | 端口关闭,外部信号控制 |

四,GPIO模式 简易电路图

通过配置GPIO的端口配置寄存器,端口可以配置成以下8种模式

4.1 程序中代码配置

程序中的GPIO模式配置 枚举如下

cpp 复制代码
typedef enum
{ GPIO_Mode_AIN = 0x0,//模拟输入
  GPIO_Mode_IN_FLOATING = 0x04,//浮空输入
  GPIO_Mode_IPD = 0x28,//下拉输入
  GPIO_Mode_IPU = 0x48,//上拉输入
  GPIO_Mode_Out_OD = 0x14,//开漏输出
  GPIO_Mode_Out_PP = 0x10,//推婉输出
  GPIO_Mode_AF_OD = 0x1C,//复用开漏输出
  GPIO_Mode_AF_PP = 0x18//复用推挽输出

}GPIOMode_TypeDef;

GPIO的初始化配置代码举例(A0针脚,推婉输出)

cpp 复制代码
	/*GPIO初始化*/
	GPIO_InitTypeDef GPIO_InitStructure;					//定义结构体变量
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,赋值为推挽输出模式
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				//GPIO引脚,赋值为第0号引脚
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,赋值为50MHz
	
	GPIO_Init(GPIOA, &GPIO_InitStructure);					//将赋值后的构体变量传递给GPIO_Init函数
															//函数内部会自动根据结构体的参数配置相应寄存器
															//实现GPIOA的初始化

4.2 浮空/上拉/下拉输入 电路图

4.3 模拟输入 电路图

4.4 开漏/推挽输出 电路图

4.5 复用开漏/推挽输出 电路图

相关推荐
不想学习!!2 小时前
【STM32 基础复习 01】初识 STM32F103ZET6:型号、封装、引脚编号与特殊引脚
stm32·单片机·嵌入式硬件
wuyk5552 小时前
66.嵌入式C语言进阶:共用体(Union)实战指南——单片机内存省一半的神级技巧
c语言·开发语言·stm32·单片机·嵌入式硬件
ACP广源盛139246256734 小时前
此芯 P1 AI BOX / AI NAS@ACP#IX8008、IX8024 应用场景与市场机会
大数据·人工智能·分布式·单片机·嵌入式硬件
广药门徒11 小时前
虚拟机联网20260725
嵌入式硬件
国产化创客12 小时前
Kindle 嵌入式交叉开发环境
嵌入式硬件·智能硬件
szxinmai主板定制专家14 小时前
RK3568+FPGA高速并行采集|半导体探针测试设备多通道同步数据采集系统设计
人工智能·嵌入式硬件·计算机视觉·fpga开发
Dlrb121116 小时前
ARM---I2C协议时序详解以及IMX6ULL使用I2C协议与AT24C02,LM75A芯片通信详解与示例代码
嵌入式硬件·arm·lm75a·i2c协议·at24c02·i2c时序
周洲083018 小时前
STM32独立/窗口看门狗完整配置|防止程序跑飞死机、异常复位
stm32·单片机·嵌入式硬件
论迹复利19 小时前
多平台移植 BTBLE Stack 的思路与踩坑实战——从 Ceva IP 到厂商适配层的迁移指南
嵌入式硬件·物联网·架构
SUNNYSPY00119 小时前
30N03DF-ASEMI扫地机器人主驱动30N03DF
单片机