stm32f103zet6的GPIO基础知识

IO数量

16*7=112个,GPIOA~GPIOG7组,共144个引脚

IO模式

很多IO口既可以做为输入,也可以做为输出

输入模式

VSS指的是地,VDD是高电平,
MOS英文全称为Metal-Oxide-Semiconductor。 意思为金属-氧化物-半导体,而拥有这种结构的晶体管我们称之为MOS晶体管。MOS管的管脚有三个:源极S(source)、栅极G(Gate)和漏极(Drain)

图片引用:https://zhuanlan.zhihu.com/p/567240024,注意D和S的电平根据PNMOS管的不同,下面图中的高电平都在上。
stm32f103zet6的GPIO基础知识_第1张图片

模式1:输入浮空模式
stm32f103zet6的GPIO基础知识_第2张图片
工作模式2:输入上拉模式
stm32f103zet6的GPIO基础知识_第3张图片
工作模式3,输入下拉模式
stm32f103zet6的GPIO基础知识_第4张图片
模式4:模拟模式
TTL施密特触发器不作用
stm32f103zet6的GPIO基础知识_第5张图片

输出模式

模式1,开漏输出模式
使用NMOS管和寄存器输出,D漏极接在外面输出,
stm32f103zet6的GPIO基础知识_第6张图片
模式2:开漏复用输出
使用NMOS管和外设输出
stm32f103zet6的GPIO基础知识_第7张图片
工作模式3推挽输出模式
使用两个MOS管
stm32f103zet6的GPIO基础知识_第8张图片
推挽复用输出
stm32f103zet6的GPIO基础知识_第9张图片

反转速度

2mhz,10mhz,50mhz

每组IO口寄存器有7个,可控制一组GPIO的16个IO口

- GPIOx_CRL :端口配置低寄存器
- GPIOx_CRH:端口配置高寄存器
- GPIOx_IDR:端口数据输入寄存器
- GPIOx_ODR:端口数据输出寄存器
- GPIOx_BSRR:端口位设置/清除寄存器
- GPIOx_BRR :端口位清除寄存器
- GPIOx_LCKR:端口配置锁存寄存器
//每组有7个寄存器分为
两个32位配置寄存器(GPIOx_CRL ,GPIOx_CRH) ,
两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR),
一个32位置位/ 复位寄存器(GPIOx_BSRR),
一个16位复位寄存器(GPIOx_BRR),
一个32位锁定寄存器(GPIOx_LCKR)

寄存器设置

端口配置寄存器:GPIOx_CRL ,GPIOx_CRH,

共64位,因为4位(32个二进制位)确定一个IO的工作
下图中可以看出,四个位中,后两位表示输出还是输入,高两位表示输出或输入的模式,GPIOx_CRH配置Px8-15,GPIOx_CRL配置的是0-7
stm32f103zet6的GPIO基础知识_第10张图片
stm32f103zet6的GPIO基础知识_第11张图片

端口输入数据寄存器GPIOx_IDR,GPIOx_ODR

stm32f103zet6的GPIO基础知识_第12张图片
stm32f103zet6的GPIO基础知识_第13张图片

置位/ 复位寄存器(GPIOx_BSRR)

低16位是清除,高16位指的是置位ODR寄存器,S=SET; R=RESET
stm32f103zet6的GPIO基础知识_第14张图片

复位寄存器(GPIOx_BRR)

只使用了16位
stm32f103zet6的GPIO基础知识_第15张图片

端口复用和映射和中断

复用:端口不仅仅可以做为通用IO口,还可以复用为一些外设引脚;最大限度使用端口

stm32f103zet6的GPIO基础知识_第16张图片

端口重映射功能:方便布线

stm32f103zet6的GPIO基础知识_第17张图片

每个端口都可以做为中断

经典的灯实验

硬件基础

stm32f103zet6的GPIO基础知识_第18张图片
stm32f103zet6的GPIO基础知识_第19张图片
电路分析:当输出为低电平时,led灯会亮起来

对IO口做为控制开关的过程本质

1,对时钟寄存器设置
2,GPIOx_CRL,GPIOx_CRH:设置外设IO口的工作模式(输入/输出,输出:推挽/开漏..。输入:模拟/浮空/上拉/下拉),

首先,设置时钟寄存器中的外设口的输出控制时钟(在时钟寄存器RCC的外设时钟寄存器APB2 )使能对应PB\PE端口组时钟。然后对端口指定一个口的
每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)

库函数中函数使用

重要函数:
1个初始化函数:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

2个读取输入电平函数:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

2个读取输出电平函数:
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

4个设置输出电平函数:
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

使用寄存器设置时

void LED_Init(void)
{
	//设置使能时钟
	RCC->APB2ENR|=1<<3;    //使能PORTB时钟	   	 
	RCC->APB2ENR|=1<<6;    //使能PORTE时钟	
	//对端口设定	 
	GPIOB->CRL&=0XFF0FFFFF; //先对控制位清零
	GPIOB->CRL|=0X00300000;//PB.5 推挽输出   ,再设置控制端口工作模式	 
    GPIOB->ODR|=1<<5;      //PB.5 输出高
											  
	GPIOE->CRL&=0XFF0FFFFF;
	GPIOE->CRL|=0X00300000;//PE.5推挽输出
	GPIOE->ODR|=1<<5;      //PE.5输出高 
}

你可能感兴趣的:(笔记,stm32,单片机,嵌入式硬件)