请教各位GPIOx_IDR 的访问方式是半字还是字模式?
我的附件图片里面是STM32的技术手册,其中高16位保留,请教各位GPIOx_IDR 的访问方式是半字还是字模式?
toofree 发表于 2018-10-12 11:52
STM32的寄存器都是32位的,不是半字,也是不字,而是双字。
GPIOx_IDR同样是双字,只不过高16位是保留位。 ...
讨论一下。关于字和双字的定义问题。
以前我总觉得1字节8位,1字=2字节 双字=2个字。
后来看一个文章,说字和双字是相对于平台的,1个字就是平台通用寄存器的数据宽度,所以对stm32是32bit处理器,它的字是32bit的(一次处理4字节长度的数据)。半字自然就是16bit(2字节)
我现在都有点懵逼了。 本帖最后由 stm1024 于 2018-10-12 11:19 编辑
这个……打开看一下标准库的编写方式:
/**
* @briefReads the specified GPIO input data port.
* @paramGPIOx: where x can be (A..G) to select the GPIO peripheral.
* @retval GPIO input data port value.
*/
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
{
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
return ((uint16_t)GPIOx->IDR);
}
这么看, 读取的时候应该是32位的,字方式。
他的寄存器是32位的,但是有效只有16位,你可以强制转换一下就好
typedef struct
{
__IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */
__IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */
__IO uint32_t OSPEEDR;/*!< GPIO port output speed register, Address offset: 0x08 */
__IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register,Address offset: 0x0C */
__IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */
__IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */
__IO uint32_t BSRR; /*!< GPIO port bit set/reset register, Address offset: 0x18 */
__IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */
__IO uint32_t AFR; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */
} GPIO_TypeDef; STM32的寄存器都是32位的,不是半字,也是不字,而是双字。
GPIOx_IDR同样是双字,只不过高16位是保留位。 32位的,当然是字模式,只不过高位保留没有具体定义而已 本帖最后由 toofree 于 2018-10-15 17:33 编辑
stm1024 发表于 2018-10-12 14:38
讨论一下。关于字和双字的定义问题。
以前我总觉得1字节8位,1字=2字节 双字=2个字。
我也是不懂球的了,懵逼了。
反正我就认为BYTE、WORD、DWORD、QWORD,就是1、2、4、8的关系了。
英文一般不胡来,按字面理解就行了。
处理器位宽不同,是为了区分int型的,除8位机int是16位外,其它的16、32、64机的int型就分别对应各自的位宽度,表示最有效率的处理数据宽度。
似乎GPIOx_IDR:这些寄存器位为只读 形式,并且只能在字模式下访问 stm1024 发表于 2018-10-12 14:38
讨论一下。关于字和双字的定义问题。
以前我总觉得1字节8位,1字=2字节 双字=2个字。
你好
方便贴一下您看的那篇文章的地址吗?
谢谢 宏雁张 发表于 2019-1-10 09:52
你好
方便贴一下您看的那篇文章的地址吗?
图书馆看的,一下记不起来了
页:
[1]