导图社区 嵌入式——第四章
GPIO主要原理,汇总了GPIO工作模式与输出速度、STM32时钟系统、STM32 GPIO相关配置寄存器、端口复用、GPIO相关的库函数、位操作定义的知识,一起来看。
编辑于2023-04-13 16:54:23 四川省GPIO原理
GPIO工作模式与输出速度
8种工作模式
输入模式
输入浮空 GPIO_Mode_IN_FLOATING 输入上拉 GPIO_Mode_IPU 输入下拉 GPIO_Mode_IPD 模拟输入 GPIO_Mode_AIN
输出模式
开漏输出 GPIO_Mode_Out_OD(Open-Drain) 开漏复用功能 GPIO_Mode_AF_OD 推挽式输出 GPIO_Mode_Out_PP(Push-Pull) 推挽式复用功能 GPIO_Mode_AF_PP
推挽输出: 可以输出强高低电平,连接数字器件 。 开漏输出: 只可以输出强低电平,高电平得靠外部电阻拉高
3种工作速度
2MHZ、10MHz、50MHz
STM32时钟系统
HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。
HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz,一般接8MHz。128分之可以做RTC的时钟源。
LSI是低速内部时钟,RC振荡器,频率为40KHz,提供低功耗时钟。
LSE是低速外部时钟,接频率为32.768KHz的石英晶体。RTC的时钟源。
PLL为锁相环倍频输出,是高速时钟,其时钟输入源可选择为HSI/2、HSE或者HSE/2(2~16倍)
几个重要的时钟
AHB总线时钟。分成HCLK(72MHz)、 APB1、 APB2
SYSCLK(系统时钟)
APB1总线时钟(低速):分成PCLK1速度最高36MHz、 TIMxCLK通用定时器时钟。
APB2总线时钟(高速):分成PCLK2速度最高72MHz、 TIM1CLK、ADCCLK时钟
PLL时钟
STM32 GPIO相关配置寄存器
两个32位配置寄存器(CRL,CRH)
端口配置
两个32位数据寄存器(IDR,ODR)
CLR和ODR共同决定是上拉(1)是还下拉(0)
端口输入输出
一个32位置位/复位寄存器(BSRR)
端口位设置/清除
一个16位复位寄存器(BRR)
端口清除
一个32位锁定寄存器(LCKR)
端口配置锁存
端口复用
一个GPIO口作为内置外设使用时叫复用
例子,串口1的发送接收引脚位PA9、PA10,当它们不做GPIO时,而是作为发送接收,就是复用。
GPIO相关的库函数
1个初始化函数: void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); 作用:初始化一个或者多个IO口(同一组)的工作方式和速度。该函数主要是操作GPIO_CRL(CRH)寄存器,在上拉或者下拉的时候有设置BSRR或者BRR寄存器
2个读取输入电平函数: (按键项目要讲解) uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
4个设置输出电平函数:(去控制GPIO外部接设备) void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//用得比较多。实际操作BSRR寄存器 void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) ;//用得比较多。实际操作的BRR寄存器 void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);//用得较少 void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal );//用得较少
位操作定义
寄存器的某一位映射为一个地址,我们向地址写“1”或者“0”,就能向寄存器某一位写“1”或者“0”。
第一个是 SRAM 区的最低 1MB 范围, 0x20000000 ‐ 0x200FFFFF(SRAM 区中的最低 1MB)。第二个则是片上外设区的最低 1MB范围,0x40000000 ——0x400FFFFF(片上外设区中最低 1MB)