你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教各位GPIOx_IDR 的访问方式是半字还是字模式?

[复制链接]
宏雁张 提问时间:2018-10-12 11:01 /

我的附件图片里面是STM32的技术手册,其中高16位保留,请教各位GPIOx_IDR 的访问方式是半字还是字模式?

GPIOx_IDR

GPIOx_IDR
收藏 评论9 发布时间:2018-10-12 11:01

举报

9个回答
STM1024 回答时间:2018-10-12 14:38:57
toofree 发表于 2018-10-12 11:52
STM32的寄存器都是32位的,不是半字,也是不字,而是双字。
GPIOx_IDR同样是双字,只不过高16位是保留位。 ...

讨论一下。关于字和双字的定义问题。

以前我总觉得1字节8位,1字=2字节 双字=2个字。

后来看一个文章,说字和双字是相对于平台的,1个字就是平台通用寄存器的数据宽度,所以对stm32是32bit处理器,它的字是32bit的(一次处理4字节长度的数据)。半字自然就是16bit(2字节)

我现在都有点懵逼了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

STM1024 回答时间:2018-10-12 11:18:45
本帖最后由 stm1024 于 2018-10-12 11:19 编辑

这个……打开看一下标准库的编写方式:
  1. /**
  2.   * @brief  Reads the specified GPIO input data port.
  3.   * @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.
  4.   * @retval GPIO input data port value.
  5.   */
  6. uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
  7. {
  8.   /* Check the parameters */
  9.   assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  10.   
  11.   return ((uint16_t)GPIOx->IDR);
  12. }
复制代码

这么看, 读取的时候应该是32位的,字方式。
butterflyspring 回答时间:2018-10-12 11:38:05
他的寄存器是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[2];   /*!< GPIO alternate function registers,     Address offset: 0x20-0x24 */
} GPIO_TypeDef;

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

七哥 回答时间:2018-10-12 11:52:51
STM32的寄存器都是32位的,不是半字,也是不字,而是双字。
GPIOx_IDR同样是双字,只不过高16位是保留位。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

wudianjun2001 回答时间:2018-10-12 12:04:12
32位的,当然是字模式,只不过高位保留没有具体定义而已

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

七哥 回答时间:2018-10-12 18:11:15
本帖最后由 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型就分别对应各自的位宽度,表示最有效率的处理数据宽度。
feixiang20 回答时间:2018-10-14 22:50:47
似乎GPIOx_IDR:这些寄存器位为只读 形式,并且只能在字模式下访问

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

宏雁张 回答时间:2019-1-10 09:52:27
stm1024 发表于 2018-10-12 14:38
讨论一下。关于字和双字的定义问题。

以前我总觉得1字节8位,1字=2字节 双字=2个字。

你好

  方便贴一下您看的那篇文章的地址吗?

谢谢
STM1024 回答时间:2019-1-10 12:35:41
宏雁张 发表于 2019-1-10 09:52
你好

  方便贴一下您看的那篇文章的地址吗?

图书馆看的,一下记不起来了

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版