在智能硬件开发过程中,有的小伙伴知道IO口,但不熟悉GPIO,经常听说GPIO,那么什么是GPIO呢?
于是,各种百度,google,知乎......看完还是云里雾里,很快就忘记。
下面小编翻出以前的笔记,重新整理,大家探讨一二,请看下文:
什么是GPIO?怎么理解GPIO?
General Purpose Input Output (通用输入/输出)简称为GPIO,要明白GPIO是干什么用的,我认为要了解什么是IO口。
IO口相当于1个微型的开关,可以输出状态 连通/断开,在数字电路中用1和0表示,这是基础。
如何控制GPIO输入输出?
代码举例:
如何控制 STM32 的 IO 口输入输出?要控制GPIO C 的 11 位为上拉输入,12 位为推挽输出。代码如下:
GPIOC->CRH&=0XFFF00FFF;//清掉这 2 个位原来的设置,同时也不影响其他位的设置
GPIOC->CRH
=0X00038000; //PC11 输入,PC12 输出
GPIOC->ODR=1<<11; //PC11 上拉
//看不懂? 没关系,下面开始详细理解。
一,STM32 的 IO 口可以由软件配置成如下 8 种模式:
1、输入浮空
2、输入上拉
3、输入下拉
4、模拟输入
5、开漏输出
6、推挽输出
7、推挽式复用功能
8、开漏复用功能
二,每一组GPIO有16个IO端口(0...15),可分为 高8位端口,低8位端口。
由于7个寄存器来控制一组GPIO,常用的有CRL,CRH,ODR,IDR,这4个寄存器都是32位。
三,常用的寄存器功能介绍
CRL----32 位的端口配置寄存器,用来设置 低8位IO口的模式和速率,
CRH----32 位的端口配置寄存器,用来设置 高8位IO口的模式和速率
例如 CNF2[1:0] MODE2[1:0] =位1000 是上下拉模式
说明:每个IO端口,占用4个位来配置端口的输入输出模式及速率,例如IO端口2:CNF2[1:0] MODE2[1:0]
CRL 或者CRH的32位 每4位控制1个IO模式
所以,1组GPIO需要用CRL,CRH来控制16个IO端口的输入输出模式。
----------------------------------------------------------------------------------------------//
IDR----16个IO口输入数据寄存器,只用了低 16 位,这个是只读寄存器。
ODR--16个IO输出数据寄存器,也只用了低 16 位。这个寄存器为可读写。
所以,通过IDR,ODR可以读取IO口的状态,也能写入控制某个IO口。
由于这几个寄存器是32位,因为每个IO都有独立的状态,所以只需16位,那么寄存器的高16位就空着。见下图
IDR,ODR可以读取IO口的状态
好了,原理就是这样。
再返回上面看,代码事例,是不是就能理解了呢?------------------------认为这篇文章有用,记得 收藏哦!