GPIO工作方式:
4种输入模式:
输入浮空:一般多用于外部按键输入,此状态下IO口的电平状态完全由外部输入决定,常用作KEY识别
输入上拉:将不确定的信号通过一个电阻嵌位在高电平,电阻同时起限流作用
输入下拉:将不确定的信号通过一个电阻嵌位在低电平,电阻同时起限流作用
模拟输入:输入为模拟量,用于ADC模拟输入或低功耗下省电
4种输出模式:
开漏输出:IO口为0输出强低电平,IO口为1时需要通过外部电阻拉高,输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行
适合做电流型驱动,吸收电流能力相对较强(20mA以内)
IO口状态由上拉电阻拉高电平,但可由外部电路改为低电平或不变,可以读IO口输入电平变化
推挽输出:可以输出强高低电平,连接数字器件
读输入值时未知
开漏复用:片内外设功能(TX1,MOSI,MISO,SCK,SS)
推挽复用:片内外设功能(I2C的SCL,SDA)
4种最大输出速度:2MHZ
配置寄存器:
7组IO口(GPIOA-GPIOG),每组有16个IO(GPIOA.0-GPIOA.15),每组IO口含有下边10个寄存器,控制16个IO口
端口模式寄存器(GPIOx_MODER):每IO口两位
1 MODERy[1:0]:(y=0...15) 2 00:输入(复位状态) 3 01:通用输出模式 4 10:复用功能模式 5 11:模拟模式
端口输出类型寄存器(GPIOx_OTYPER):每IO口一位,高16位不用
1 OTy[1:0]:(y=0...15) 2 0:输出推挽(复位状态) 3 1:输出开漏
端口输出速度寄存器(GPIOx_OSPEEDR):每IO口两位
1 OSPEEDRy[1:0]:(y=0...15) 2 00:2MHz 3 01:25MHz 4 10:50MHz 5 11:100MHz
端口上拉下拉寄存器(GPIOx_PUPDR):
1 PUPDRy[1:0]:(y=0...15) 2 00:无上拉或下拉 3 01:上拉 4 10:下拉 5 11:保留
端口输入数据寄存器(GPIOx_IDR):
1 IDRy[15:0]:(y=0...15) 2 端口输入数据
端口输出数据寄存器(GPIOx_ODR):
1 ODRy[15:0]:(y=0...15) 2 端口输出数据
端口置位复位寄存器(GPIOx_BSRR):
1 BRy[15:0]:位31:16 2 0:不会对相应的ODRx位执行任何操作 3 1:对相应的ODRx位进行复位 4 5 BSy[15:0]:位15:0 6 0:不会对相应的ODRx位执行任何操作 7 1:对相应的ODRx位进行置位 8 同时对BSx和BRx置位,则BSx的优先级更高
端口配置锁存寄存器(GPIOx_LCKR):
两个复位功能寄存器(GPIOx_AFRL & GPIOx_AFRH):
引脚复用:
通过芯片资料中的pin and ball definitions查看,将普通IO口复用为外设引脚
5V容忍:
STM32的引脚一般接的电压是3.3V的,但有些管脚允许接入5V电压,通过pin and ball definitions中的I/O structure查看,如果显示FT就是可以容忍5V,未标识FT则代表不支持5V容忍