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
1. 八种模式
1.1. 浮空输入
CPU可以随时读取IO口的电平状态,什么都不接,相当于高电平,很容易受干扰
1.2. 带上拉输入
①CPU可以随时读取IO口的电平状态,
②减少干扰.通过在数据通道上部,接入上拉电阻和电源VDD,钳位在高电平!电阻同时起限流作用
1.3. 带下拉输入
①CPU可以随时读取IO口的电平状态,
②减少干扰,通过在数据通道上部,接入下拉电阻和接地,钳位在低电平!电阻同时起限流作用
1.4. 模拟输入
前面三种都是数字信 输入,模拟输入与它们不同,
从IO口过来的模拟量要被ADC转换成数字量才能被CPU读取咯
1.5. 开漏输出(只用作输出低电平)
GPIO软件置0,且接地——-IO输出低电平
GPIO软件置1,不接上拉——IO悬空
GPIO软件置1,接上拉——IO输出高电平
CPU可以在”输入数据寄存器IDR”监控IO口的状态,因为IO口的信息反馈到CPU相当于输入CPU,所以是在”输入状态寄存器”查看
1.6. 开漏复用输出
GPIO口被用作第二功能时,比如用于片内外设功能(TX1,MOSI,MISO.SCK.SS)
1.7. 推挽输出(既可以输出低电平,也可以高电平)
GPIO软件置0,且接地——-IO输出低电平
GPIO软件置1,且接上拉——IO输出高电平
1.8. 推挽复用输出
GPIO口被用作第二功能时,比如用于片内外设功能(I2C的SCL,SDA)
2. GPIO的配置
模式的配置介绍:
一个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:复用开漏输出
3.软件配置的写法
端口配置寄存器(2个32位的寄存器):CRH,CRL
作用: 配置输入输出模式
按照每四个bit位,为1个IO口
CRH:负责8~15 IO端口
CRL:负责0~7 IO口
数据寄存器(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
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!