STM32F103学习 - GPIO
文章目录
一、什么是GPIO?
GPIO全称为General PurposeInput Output,即通用输入输出端口。
GPIO特点:
1、快速翻转,每次翻转最快只需要两个时钟周期。在不超频的情况下F1系列系统时钟频率最高可设置为72Mhz,因此IO口的翻转速度最快为36Mhz。若将芯片系统时钟频率超频到100Mhz以上,则IO口的翻转速度最快可以到50Mhz,通常不建议超频使用。
2、GPIO可分为CMOS端口和TTL端口,见数据手册引脚定义表格,其中IO Level有FT标识的即为TTL端口,表示该端口可容忍5V,兼容3.3V;没有FT标识的即为CMOS端口,表示该端口最大可承受电压为3.3V。
3、GPIO识别电压范围:-0.3V到1.164V识别为低电平,1.833V到3.6V识别为高电平。
二、IO端口基本结构

上图为GPIO基本结构图,其中上半部分为输入,下半部分为输出。
结构图中部分元器件的特性如下:
1、保护二极管的钳位作用:
2、施密特(肖特基)触发器的整形作用:
3、PMOS、NMOS的导通条件
三、GPIO的八种工作模式
1.输入浮空

特点: 空闲时(外部高阻态),IO状态不确定,由外部环境决定
2.输入上拉

特点:空闲时(外部高阻态),IO呈现高电平
3.输入下拉

特点:空闲时(外部高阻态),IO呈现低电平
4.模拟输入

特点:专门用于模拟信号输入或输出,如ADC和DAC
5.开漏输出

PMOS管始终不导通;往ODR对应位写0,NMOS管导通,写1则NMOS管不导通。
相当于PMOS的栅极接了VDD(3.3V),NMOS的栅极接了反相器。
特点:不能输出高电平,必须有外部(或内部)上拉才能输出高电平,常用于IIC。可以实现IO的线与。
6.开漏式复用功能

特点:
1、不能输出高电平,必须有外部(或内部)上拉才能输出高电平
2、由其他外设控制输出
7.推挽输出

往ODR对应位写0,NMOS管导通,写1则PMOS管导通。
相当于NMOS、PMOS的栅极接了反相器。
特点:可输出高低电平,驱动能力强。电平切换速度快,常用于控制输出,但不支持线与。
当GPIO配置为推挽输出模式时,配置上、下拉电阻(GPIO_PuPd)实际并不起作用。在输出模式下,GPIO的输出电平完全由用户写入到输出数据寄存器(ODR)的值决定。但此时该IO口的输入功能仍然生效,因此可以有如下应用:
//GPIO口翻转
#define LED_Toggle GPIO_WriteBit(GPIOB,GPIO_Pin_1,(1 - GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_1)))
8.推挽式复用功能

特点:
1、可输出高低电平,驱动能力强
2、有其他外设控制输出
四、手把手配置GPIO(标准库)
1、初始化GPIO
void gpio_init(void)
{
//使能GPIOB时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
/* Configure the GPIO_LED pin */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //引脚号
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //电平切换速度
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
}
2、在main函数中控制PB5口每500ms闪烁
while (1)
{
Delay(500);
GPIO_SetBits(GPIOB, GPIO_Pin_5);
Delay(500);
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
}
}
五、思考
1.为什么推挽输出不支持线与?

上图可知,当两个推挽输出的IO接到一起时,若IO1输出1,IO2输出0,将导致IO1的上管和IO2的下管短路,烧坏芯片。
2.MCU如何输出5V信号?

可选择开漏输出,通过5V上拉,当控制IO为1时,即可输出5V信号。
3.对比开漏输出和推挽输出的差异?
| 特性 | 推挽输出 | 推挽输出 |
|---|---|---|
| 驱动能力 | 强(主动推/拉) | 弱(依赖上拉电阻) |
| 高电平来源 | 芯片内部VDD | 外部上拉电源 |
| 电平兼容性 | 固定为VDD | 可适配不同电压(如5V) |
| 总线冲突风险 | 有(可能短路) | 无(支持“线与”) |
| 典型应用 | 高速信号、独立驱动 | I2C、电平转换、共享信号线 |
总结
GPIO是STM32最基础的外设,成为一名点灯大师是合格嵌入式工程师的第一步。
更多推荐

所有评论(0)