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口?
刚开始自学,拜托各位了!!!!!
8 个解决方案
#1
先从最基本的理解起, 以51为例, IO口的状态只需要一位就够了, 如果这位置1,那就是输出高,反之则输出1.
那么问题就来了,
如果有8个IO口,那么其控制位就是8位了, 正好可以凑一个字节.
你问为什么非要凑一个字节? 不是每一位占用一个字节,其余7位闲置?
一是片内reg区域是有限的,能挤在一起就挤在一起, 多出来的空间可以当RAM用
另外很重要的一点是,放在一个字节的话,要对IO进行批量操作的时候会简单很多,比如你要这8个IO同时拉低, 直接向该字节写0就行了,不用一个一个的挨着来.
于是这8个IO口就可以称为一组了,可以记PA,或者PB,PC什么的
你这个问题问的是有问题的,不知道怎么回答
那么问题就来了,
如果有8个IO口,那么其控制位就是8位了, 正好可以凑一个字节.
你问为什么非要凑一个字节? 不是每一位占用一个字节,其余7位闲置?
一是片内reg区域是有限的,能挤在一起就挤在一起, 多出来的空间可以当RAM用
另外很重要的一点是,放在一个字节的话,要对IO进行批量操作的时候会简单很多,比如你要这8个IO同时拉低, 直接向该字节写0就行了,不用一个一个的挨着来.
于是这8个IO口就可以称为一组了,可以记PA,或者PB,PC什么的
你这个问题问的是有问题的,不知道怎么回答
#2
我大概懂了,就是说一个GPIO口可携带的信息量太小无法完成很多功能。
那指向结构体内容的方式就是给一个组中的每个IO口配置一个值然后这一个字节的数据就可以指向一个寄存器是吧?
还有我看书上说IO口通信有等待队列,就是FIFO队列,可以起缓冲作用,那这个FIFO队列在硬件上是怎么实现的?
那指向结构体内容的方式就是给一个组中的每个IO口配置一个值然后这一个字节的数据就可以指向一个寄存器是吧?
还有我看书上说IO口通信有等待队列,就是FIFO队列,可以起缓冲作用,那这个FIFO队列在硬件上是怎么实现的?
#3
GPIO脚实际是和一个寄存器相连(口寄存器)LZ想向外部输出,都是写这个寄存器,因此,LZ可以认为两者是等效的
但读一般是读脚,不是读该口寄存器
#4
我大概懂了,就是说一个GPIO口可携带的信息量太小无法完成很多功能。
那指向结构体内容的方式就是给一个组中的每个IO口配置一个值然后这一个字节的数据就可以指向一个寄存器是吧?
还有我看书上说IO口通信有等待队列,就是FIFO队列,可以起缓冲作用,那这个FIFO队列在硬件上是怎么实现的?
我也不知道了,没留意过IO FIFO
#5
GPIO_TypeDef 定义的是一组I/O的控制寄存器。I/O的配置要通过这些寄存器来进行,比如输入/输出,上拉/下拉,推挽/开漏输出等等。
I/O没有FIFO缓冲的,是通讯模块才有,比如UART,I2C
I/O没有FIFO缓冲的,是通讯模块才有,比如UART,I2C
#6
GPIO_TypeDef 定义的是一组I/O的控制寄存器。I/O的配置要通过这些寄存器来进行,比如输入/输出,上拉/下拉,推挽/开漏输出等等。
I/O没有FIFO缓冲的,是通讯模块才有,比如UART,I2C
那UART,I2C这些也都是属于外设是吧,那肯定也需要和GPIO口连接吧?是不是说通过GPIO数据指向的寄存器实现了FIFO缓冲功能的?
#7
GPIO_TypeDef 定义的是一组I/O的控制寄存器。I/O的配置要通过这些寄存器来进行,比如输入/输出,上拉/下拉,推挽/开漏输出等等。
I/O没有FIFO缓冲的,是通讯模块才有,比如UART,I2C
那UART,I2C这些也都是属于外设是吧,那肯定也需要和GPIO口连接吧?是不是说通过GPIO数据指向的寄存器实现了FIFO缓冲功能的?
应该说是UART,I2C 这些外设的寄存器实现FIFO,只是输入/输出信号连到了GPIO上
#8
也都是 并列存在的 只是IP的时候只用了一个ip核
#1
先从最基本的理解起, 以51为例, IO口的状态只需要一位就够了, 如果这位置1,那就是输出高,反之则输出1.
那么问题就来了,
如果有8个IO口,那么其控制位就是8位了, 正好可以凑一个字节.
你问为什么非要凑一个字节? 不是每一位占用一个字节,其余7位闲置?
一是片内reg区域是有限的,能挤在一起就挤在一起, 多出来的空间可以当RAM用
另外很重要的一点是,放在一个字节的话,要对IO进行批量操作的时候会简单很多,比如你要这8个IO同时拉低, 直接向该字节写0就行了,不用一个一个的挨着来.
于是这8个IO口就可以称为一组了,可以记PA,或者PB,PC什么的
你这个问题问的是有问题的,不知道怎么回答
那么问题就来了,
如果有8个IO口,那么其控制位就是8位了, 正好可以凑一个字节.
你问为什么非要凑一个字节? 不是每一位占用一个字节,其余7位闲置?
一是片内reg区域是有限的,能挤在一起就挤在一起, 多出来的空间可以当RAM用
另外很重要的一点是,放在一个字节的话,要对IO进行批量操作的时候会简单很多,比如你要这8个IO同时拉低, 直接向该字节写0就行了,不用一个一个的挨着来.
于是这8个IO口就可以称为一组了,可以记PA,或者PB,PC什么的
这是一组关于寄存器的定义,那GPIO组里面的到底是寄存器还是不同的GPIO口?
你这个问题问的是有问题的,不知道怎么回答
#2
我大概懂了,就是说一个GPIO口可携带的信息量太小无法完成很多功能。
那指向结构体内容的方式就是给一个组中的每个IO口配置一个值然后这一个字节的数据就可以指向一个寄存器是吧?
还有我看书上说IO口通信有等待队列,就是FIFO队列,可以起缓冲作用,那这个FIFO队列在硬件上是怎么实现的?
那指向结构体内容的方式就是给一个组中的每个IO口配置一个值然后这一个字节的数据就可以指向一个寄存器是吧?
还有我看书上说IO口通信有等待队列,就是FIFO队列,可以起缓冲作用,那这个FIFO队列在硬件上是怎么实现的?
#3
这是一组关于寄存器的定义,那GPIO组里面的到底是寄存器还是不同的GPIO口?
你这个问题问的是有问题的,不知道怎么回答
GPIO脚实际是和一个寄存器相连(口寄存器)LZ想向外部输出,都是写这个寄存器,因此,LZ可以认为两者是等效的
但读一般是读脚,不是读该口寄存器
#4
我大概懂了,就是说一个GPIO口可携带的信息量太小无法完成很多功能。
那指向结构体内容的方式就是给一个组中的每个IO口配置一个值然后这一个字节的数据就可以指向一个寄存器是吧?
还有我看书上说IO口通信有等待队列,就是FIFO队列,可以起缓冲作用,那这个FIFO队列在硬件上是怎么实现的?
我也不知道了,没留意过IO FIFO
#5
GPIO_TypeDef 定义的是一组I/O的控制寄存器。I/O的配置要通过这些寄存器来进行,比如输入/输出,上拉/下拉,推挽/开漏输出等等。
I/O没有FIFO缓冲的,是通讯模块才有,比如UART,I2C
I/O没有FIFO缓冲的,是通讯模块才有,比如UART,I2C
#6
GPIO_TypeDef 定义的是一组I/O的控制寄存器。I/O的配置要通过这些寄存器来进行,比如输入/输出,上拉/下拉,推挽/开漏输出等等。
I/O没有FIFO缓冲的,是通讯模块才有,比如UART,I2C
那UART,I2C这些也都是属于外设是吧,那肯定也需要和GPIO口连接吧?是不是说通过GPIO数据指向的寄存器实现了FIFO缓冲功能的?
#7
GPIO_TypeDef 定义的是一组I/O的控制寄存器。I/O的配置要通过这些寄存器来进行,比如输入/输出,上拉/下拉,推挽/开漏输出等等。
I/O没有FIFO缓冲的,是通讯模块才有,比如UART,I2C
那UART,I2C这些也都是属于外设是吧,那肯定也需要和GPIO口连接吧?是不是说通过GPIO数据指向的寄存器实现了FIFO缓冲功能的?
应该说是UART,I2C 这些外设的寄存器实现FIFO,只是输入/输出信号连到了GPIO上
#8
也都是 并列存在的 只是IP的时候只用了一个ip核