STM32的GPIO 有8种可能的配置:(4种输入+2种输出+2种复用输出) (1) 浮空输入 GPIO_Mode_IN_FLOATING (2) 带上拉输入 GPIO_Mode_IPU (3) 带下拉输入 GPIO_Mode_IPD (4) 模拟输入 GPIO_Mode_AIN
(5) 开漏输出 GPIO_Mode_Out_OD (6) 开漏复用输出 GPIO_Mode_AF_OD (7) 推挽输出 GPIO_Mode_Out_PP (8) 推挽复用输出 GPIO_Mode_AF_PP
CPU可以随时读取IO口的电平状态,什么都不接,相当于高电平,很容易受干扰
①CPU可以随时读取IO口的电平状态, ②减少干扰.通过在数据通道上部,接入上拉电阻和电源VDD,钳位在高电平!电阻同时起限流作用
①CPU可以随时读取IO口的电平状态, ②减少干扰,通过在数据通道上部,接入下拉电阻和接地,钳位在低电平!电阻同时起限流作用
前面三种都是数字信号输入,模拟输入与它们不同, 从IO口过来的模拟量要被ADC转换成数字量才能被CPU读取咯
GPIO软件置0,且接地-------IO输出低电平
GPIO软件置1,不接上拉------IO悬空 GPIO软件置1,接上拉------IO输出高电平
CPU可以在"输入数据寄存器IDR"监控IO口的状态,因为IO口的信息反馈到CPU相当于输入CPU,所以是在"输入状态寄存器"查看
GPIO口被用作第二功能时,比如用于片内外设功能(TX1,MOSI,MISO.SCK.SS)
GPIO软件置0,且接地-------IO输出低电平 GPIO软件置1,且接上拉------IO输出高电平
GPIO口被用作第二功能时,比如用于片内外设功能(I2C的SCL,SDA)
模式的配置介绍: 一个IO口需要4个bit来控制: CNF MODE CNF MODE 00 00 ~ 11 11 也就是十六进制的 0x 0 ~ 0x F
其中MODE是设置输入输出模式:: 00:输入(复位后的状态) 01:输出,最大速度10MHz 10:输出,最大速度2MHz 11:输出,最大速度50MHz
而CNF是在MODE的基础上选择更细分的模式: (1)当MODE为00,即输入模式下: 00:模拟输入 01:浮空输入 10:上拉/下拉输入 11:保留 (2)当MODE为01,10,11,即输出模式时: 00:推挽输出 01:开漏输出 10:复用推挽输出 11:复用开漏输出
端口配置寄存器(2个32位的寄存器):CRH,CRL 作用: 配置输入输出模式 按照每四个bit位,为1个IO口
CRH:负责8~15号IO端口 CRL:负责0~7号IO口
//软件配置的写法: GPIOC->CRH &= 0xFFFFFFF0 //清除PC8的配置 GPIOC->CRH |= 0x00000008 //设置PC8为0x8,也就是bit的10 00,得出 上拉/下拉输入模式 //再通过 GPIO->ODR=1<<8 //得到上拉模式数据寄存器(2个32位的寄存器):IDR,ODR 作用: 配置输入输出模式 按照每四个bit位,为1个IO口
IDR(端口输入数据寄存器,只读):只使用了低16位,读取IO口的输入状态,bit为1有输入,0无 ODR(端口输入数据寄存器,可写,不要读):只使用了低16位,bit写入1,IO口有输出,0则不输出
置位/复位寄存器(1个32位的寄存器):BSRR
复位寄存器(1个16位的寄存器):BRR
锁存寄存器(1个32位的寄存器):LCKR