GPIO(General Purpose Input Output)通用输入输出口
1.可配置为8种输入输出模式,引脚电平:0V~3.3V,部分引脚可容忍5V,输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等,输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等。
2.STM引脚定义:带FT 就是可以容纳5V电压的引脚
3.APB2外设总线:STM32中所有GPIO都是挂载在APB2总线上,每个GPIO外设有16个引脚;寄存器为32位,高16位未使用;驱动器:负责增大驱动能力(点灯 )施密特触发器。
IO引脚接两个保护二极管,这是对输入电压进行限幅。VDD=3.3V VSS=0V;输入电压>3.3V 上方二极管导通,输入电压<0V 下方二极管导通。不会从内部电路吸取电流。
上拉电阻,下拉电阻(给输入提供一个默认的输入电平):上闭下开:上拉输入模式;下闭上开:下拉输入模式,都闭合:浮空输入模式。
施密特触发器(整形):电压大于上限,输出高电平,电压小于下限,输出低电平,然后输入寄存器可以读取某一位的数据。
模拟输入接ADC,复用功能输入:连接到其他外设输入端口的引脚上
输出寄存器:控制16个端口,只能整体读写。
推挽输出模式(PN-MOS都有效)下,高低电平都有驱动能力,STM32对IO口具有绝对的控制权,高低电平都由STM32说了算。数据寄存器为1,上管导通,下官断开,输出直接街道VDD输出高电平。
开漏输出模式下,P-MOS无效,只有N-MOS工作,只有低电平有驱动能力。作用:输出5V电平信号(输出端口加一个5v的上拉电阻)、I2C通讯
默认低电平输出
模拟输入:ADC模数转换器专属配置。开漏、推挽输出时,输入也是有效的。
使用GPIO的三个步骤:
1. 使用RCC开启GPIO时钟
RCC外设常用的三个函数:AHB、APB2、APB1
2. 使用GPIO_Init函数初始化GPIO
3. 使用输出或者输入的函数控制GPIO口
四个常用GPIO输出函数:
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);第一个参数选择外设,第二个参数__,这个函数可以停驶对16个端口进行写入操作。
GPIO的输出模式:
GPIO_Mode_AIN = 0x0,模拟输入
GPIO_Mode_IN_FLOATING = 0x04,浮空输入
GPIO_Mode_IPD = 0x28,下拉输入
GPIO_Mode_IPU = 0x48,上拉输入
GPIO_Mode_Out_OD = 0x14,开漏输出
GPIO_Mode_Out_PP = 0x10,推免输出
GPIO_Mode_AF_OD = 0x1C,复用开漏
GPIO_Mode_AF_PP = 0x18复用推免
A15,B3,B4 端口不能直接使用,这几个端口默认是JTAG调试端口,需要特殊配置。
按键(输入设备)
电路中,电容一边接地,一边接入电路,考虑是否是滤波电容作用。
51单片机中,int是16位;STM32中,int占32位,long占32位
typedef只能对变量的名字进行重命名,define宏定义任何都可以
GPIO读取函数
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);返回值代表这个端口的高低电平。
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);返回值16位数据,每一位代表一个端口值
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);读取输出寄存器
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);