当前位置: 代码迷 >> 单片机 >> 关于GPIO口分组的有关问题
  详细解决方案

关于GPIO口分组的有关问题

热度:285   发布时间:2016-04-28 14:46:38.0
关于GPIO口分组的问题
看到GPIOA,GPIOB,GPIOC。。。。。一开始不懂,上网查了后看到说这是GPIO的分组,那GPIO口分组的意义是什么,还有每一组中的内容是什么?我原先理解从字面意思理解的是里面有很多GPIO口,但是看到GPIO_TypeDef* GPIOx这个定义,而GPIO_TypeDef的定义是
typedef struct
{
  __IO uint32_t CRL;       
  __IO uint32_t CRH;        
  __IO uint32_t IDR;
  __IO uint32_t ODR;
  __IO uint32_t BSRR;      
  __IO uint32_t BRR;
  __IO uint32_t LCKR;
} GPIO_TypeDef;
这是一组关于寄存器的定义,那GPIO组里面的到底是寄存器还是不同的GPIO口?
刚开始自学,拜托各位了!!!!!
------解决思路----------------------
先从最基本的理解起, 以51为例, IO口的状态只需要一位就够了, 如果这位置1,那就是输出高,反之则输出1.
那么问题就来了, 
如果有8个IO口,那么其控制位就是8位了, 正好可以凑一个字节.
你问为什么非要凑一个字节? 不是每一位占用一个字节,其余7位闲置?
一是片内reg区域是有限的,能挤在一起就挤在一起, 多出来的空间可以当RAM用
另外很重要的一点是,放在一个字节的话,要对IO进行批量操作的时候会简单很多,比如你要这8个IO同时拉低, 直接向该字节写0就行了,不用一个一个的挨着来.
于是这8个IO口就可以称为一组了,可以记PA,或者PB,PC什么的


引用
这是一组关于寄存器的定义,那GPIO组里面的到底是寄存器还是不同的GPIO口?

你这个问题问的是有问题的,不知道怎么回答
------解决思路----------------------
引用:
引用
这是一组关于寄存器的定义,那GPIO组里面的到底是寄存器还是不同的GPIO口?

你这个问题问的是有问题的,不知道怎么回答


GPIO脚实际是和一个寄存器相连(口寄存器)LZ想向外部输出,都是写这个寄存器,因此,LZ可以认为两者是等效的
但读一般是读脚,不是读该口寄存器
------解决思路----------------------
GPIO_TypeDef 定义的是一组I/O的控制寄存器。I/O的配置要通过这些寄存器来进行,比如输入/输出,上拉/下拉,推挽/开漏输出等等。

I/O没有FIFO缓冲的,是通讯模块才有,比如UART,I2C
------解决思路----------------------
引用:
Quote: 引用:

GPIO_TypeDef 定义的是一组I/O的控制寄存器。I/O的配置要通过这些寄存器来进行,比如输入/输出,上拉/下拉,推挽/开漏输出等等。

I/O没有FIFO缓冲的,是通讯模块才有,比如UART,I2C


那UART,I2C这些也都是属于外设是吧,那肯定也需要和GPIO口连接吧?是不是说通过GPIO数据指向的寄存器实现了FIFO缓冲功能的?

应该说是UART,I2C 这些外设的寄存器实现FIFO,只是输入/输出信号连到了GPIO上