OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4727|回复: 7

stm32f103ZET6系列单片机的ODR寄存器的说明

[复制链接]

3

主题

9

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-2-10
在线时间
2 小时
发表于 2018-2-10 22:04:01 | 显示全部楼层 |阅读模式
2金钱
请问stm32f103ZET6系列单片机的ODR寄存器的
“这些位可读可写并只能以字(16位)的形式操作。”是什么意思    ?


是只能进行十六位数据的写入吗??如果是这样 那位操作是如何做到只对一个位写入数据的?




最佳答案

查看完整内容[请看2#楼]

这是Cortex系列芯片在设计时的一个小小的技巧,叫做Bit-banding。 它将这个寄存器上的每一个bit都映射到了一个其他的内存地址上,这样的话,1兆字节里的所有位,就可以被扩展成32兆字节的地址区。 由于32位处理器的内存位宽为32位,所以,32个bit组成的word可以表示一个bit。 这是在st官方编写的Programming manual里提到的关于Bit-banding的内容。 不信可以去翻阅datasheet。 几乎外设的寄存器地址都 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-2-10 22:04:02 | 显示全部楼层
这是Cortex系列芯片在设计时的一个小小的技巧,叫做Bit-banding。

它将这个寄存器上的每一个bit都映射到了一个其他的内存地址上,这样的话,1兆字节里的所有位,就可以被扩展成32兆字节的地址区。

由于32位处理器的内存位宽为32位,所以,32个bit组成的word可以表示一个bit。
这是在st官方编写的Programming manual里提到的关于Bit-banding的内容。

TIM截图20180210232820.png

TIM截图20180210232839.png





不信可以去翻阅datasheet。
几乎外设的寄存器地址都在0x40000000-0x400FFFFF这个区域。
SRAM地址都在0x20000000-0x200FFFFF这个区域。

而且其他区域没有数据,是保留的无效区。
TIM截图20180210233322.png


TIM截图20180210233336.png


回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-2-10
在线时间
2 小时
 楼主| 发表于 2018-2-11 00:12:44 | 显示全部楼层
a496298685 发表于 2018-2-10 23:34
这是Cortex系列芯片在设计时的一个小小的技巧,叫做Bit-banding。

它将这个寄存器上的每一个bit都映射到 ...

那请问“这些位可读可写并只能以字(16位)的形式操作。”是我理解的意思吗     ?
那每一个位映射成一个32位的地址 写入数据应该是32位才对呀  
刚学32  不怎么懂这些 麻烦您了
回复

使用道具 举报

31

主题

1954

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4505
金钱
4505
注册时间
2018-5-11
在线时间
943 小时
发表于 2018-7-15 22:25:28 | 显示全部楼层
遇上方知有 发表于 2018-2-11 00:12
那请问“这些位可读可写并只能以字(16位)的形式操作。”是我理解的意思吗     ?
那每一个位映射成一个3 ...

写入数据从形式上看是32位,
但位操作机制使得其它这32位只有最低的1BIT有效。

我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

31

主题

1954

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4505
金钱
4505
注册时间
2018-5-11
在线时间
943 小时
发表于 2018-7-15 22:30:34 | 显示全部楼层
其实楼主提的这个问题,
我这几天也想提。
GPIO的ODR,IDR等等几个寄存器,
在手册上都非常明确地写有“这些位可读可写并只能以字(16位)的形式操作。”
这句话是非常令人费解的
事实上是可以单独操作某位的,而不用读写整个字。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-9-28
在线时间
3 小时
发表于 2019-10-5 15:38:03 | 显示全部楼层
warship 发表于 2018-7-15 22:30
其实楼主提的这个问题,
我这几天也想提。
GPIO的ODR,IDR等等几个寄存器,

我觉得是因为对数据的处理都是以字来处理的,stm32是32位,那么处理的数据就是32位的。单独操作某位,是我们的理解。在代码上的解释就是取出了32位的数据,之后对其中的那一位对应的bit位进行判断和处理。鄙人新手入门,不晓得对不对。
回复

使用道具 举报

1

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2019-12-5
在线时间
15 小时
发表于 2020-1-14 14:04:20 | 显示全部楼层
stm32是32位,而ODR是16位,请问这16位为高16位,还是低16位?         stm32菜鸟提问
回复

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2020-1-14 22:06:45 | 显示全部楼层
wdkyzh123 发表于 2020-1-14 14:04
stm32是32位,而ODR是16位,请问这16位为高16位,还是低16位?         stm32菜鸟提问

自然是最低位对齐的,所以是低16位。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-19 16:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表