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);			
	}	
}

 

posted on 2025-01-16 21:45  轩~邈  阅读(86)  评论(0)    收藏  举报