小白笔记:什么是GPIO?怎么理解,如何控制GPIO输入输出?

服务器

  在智能硬件开发过程中,有的小伙伴知道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口的状态

  好了,原理就是这样。

  再返回上面看,代码事例,是不是就能理解了呢?------------------------认为这篇文章有用,记得 收藏哦!

标签: 服务器