1、GPIO:I/O口,8种输入输出模式,引脚电平0-3.3V,带FT的可以容忍5V
2、输入模式可读取端口的高低电平:读取按键输入、外接模块电平信号,ADC电压采集,模拟通信协议接收数据
3、输出模式可以控制端口输出高低电平,驱动LED, 控制蜂鸣器, 模拟通信协议输出时序;
3、GPIO构造:(寄存器的低16位对应端口,高16位没用到)
GPIO都是挂载在APB2总线上的外设

GPIO的基本结构

输入部分:
(1)保护二极管:对输入电压进行限幅,使电流经过二极管流走
(2)上拉电阻和下拉电阻:上拉输入模式(默认高电平),下拉输入模式(默认低电平),浮空输入模式
(3)施密特触发器:对输入电压进行整形,只有高于上限和低于下限才发生变化,避免信号波动造成的抖动现象
(2)输入数据寄存器
(3)模拟输入至ADC:施密特触发器之前
(4)复用功能输入:施密特触发器之后
| 浮空输入 | 数字输入 | 可读取引脚电平,如果引脚悬空,则电平不稳定 |
| 上拉输入 | 数字输入 | 可读取引脚电平,内部连接上拉电阻,悬空默认高电平 |
| 下拉输入 | 数字输入 | 可读取引脚电平,内部连接上拉电阻,悬空默认低电平 |

| 模拟输入 | 模拟输入 | GPIO无效,引脚直接接入内部ADC |

输出部分:
(1)位设置/位清除寄存器:单独操作输出数据寄存器中的某一位
(2)输出数据寄存器:按位与和按位或的方法
(3)PMOS和NMOS管:
推挽输出模式(P和N都有效)
开漏输出模式(P无效,N有效,I2C通信采用)
关闭模式(P和N都无效)
| 开漏输出 | 数字输出 | 可输出引脚电平,高电平为高阻态,低电平接VSS |
| 推挽输出 | 数字输出 | 可输出引脚电平,高电平接VDD,低电平接VSS |

| 复用开漏输出 | 数字输出 | 由片上外设控制,高电平为高阻态,低电平接VSS |
| 复用推挽输出 | 数字输出 | 由片上外设控制,高电平接VDD,低电平接VSS |

GPIO的寄存器:
1、端口配置低寄存器
2、端口配置高寄存器
3、端口输入数据寄存器
4、端口输出数据寄存器
5、端口位设置/位清除寄存器
6、端口配置锁定寄存器
GPIO控制流水灯实验

#include "stm32f10x.h" // Device header
#include "Delay.h"
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 启用GPIOC的外设时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 引脚:模式通用推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2 | GPIO_Pin_4; // 要初始化的引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 输出速度
GPIO_Init(GPIOA, &GPIO_InitStructure);
while(1)
{
GPIO_WriteBit(GPIOA, GPIO_Pin_0,Bit_RESET);
Delay_ms(200);
GPIO_WriteBit(GPIOA, GPIO_Pin_0,Bit_SET);
Delay_ms(200);
GPIO_WriteBit(GPIOA, GPIO_Pin_2,Bit_RESET);
Delay_ms(200);
GPIO_WriteBit(GPIOA, GPIO_Pin_2,Bit_SET);
Delay_ms(200);
GPIO_WriteBit(GPIOA, GPIO_Pin_4,Bit_RESET);
Delay_ms(200);
GPIO_WriteBit(GPIOA, GPIO_Pin_4,Bit_SET);
Delay_ms(200);
}
}
GPIO
浙公网安备 33010602011771号