OpenEdv-开源电子网

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

有个小问题 关于位操作

[复制链接]

17

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2017-8-5
在线时间
36 小时
发表于 2018-12-3 22:44:05 | 显示全部楼层 |阅读模式
1金钱
在配置odr寄存器的时候:
想拉高PE2~4 我这么写  GPIOE->ODR |= 0x00011100; 为啥不对

而这么写的话又是对的 GPIOE->ODR |= 7<<2;       

请问上面那个问什么不对

最佳答案

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

0x00011100表示的是十六进制, 应该改成0x1C就对了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4523
金钱
4523
注册时间
2018-5-11
在线时间
947 小时
发表于 2018-12-3 22:44:06 | 显示全部楼层
0x00011100表示的是十六进制,
应该改成0x1C就对了
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

17

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2017-8-5
在线时间
36 小时
 楼主| 发表于 2018-12-4 11:48:18 | 显示全部楼层
warship 发表于 2018-12-3 22:44
0x00011100表示的是十六进制,
应该改成0x1C就对了

啊 这两个不是一样的吗
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4523
金钱
4523
注册时间
2018-5-11
在线时间
947 小时
发表于 2018-12-4 12:02:22 | 显示全部楼层
Jasonlearning 发表于 2018-12-4 11:48
啊 这两个不是一样的吗

如果这样的话,
我就无语了!!!
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

17

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2017-8-5
在线时间
36 小时
 楼主| 发表于 2018-12-4 15:35:49 | 显示全部楼层
warship 发表于 2018-12-4 12:02
如果这样的话,
我就无语了!!!

o 我写成 0001 1100 就行了是吧,还请赐教
回复

使用道具 举报

4

主题

380

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3088
金钱
3088
注册时间
2015-10-17
在线时间
320 小时
发表于 2018-12-4 15:54:18 | 显示全部楼层
基础的c语言去学下吧,兄弟
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4523
金钱
4523
注册时间
2018-5-11
在线时间
947 小时
发表于 2018-12-4 15:57:29 | 显示全部楼层
Jasonlearning 发表于 2018-12-4 15:35
o 我写成 0001 1100 就行了是吧,还请赐教

0x用于表示十六进制数,
你的0001 1100本意是二进制数,实际上就是0x1C
所以写成0x1C就可以了,难道写成0x1C会死的吗?
二进制写起来太长了,读写都不方便,在C语言里一般不用。
试想STM32是32位机,你写一个32位的二进制试试。
如果你非要写二进制,可以用0b00011100看行不行(我不确定,很久没直接写二进制了)。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

1

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2018-11-13
在线时间
26 小时
发表于 2018-12-4 15:59:15 | 显示全部楼层
Jasonlearning 发表于 2018-12-4 15:35
o 我写成 0001 1100 就行了是吧,还请赐教

根本问题:如何把二进制转十六进制
你看GPIOx_ODR 寄存器,用到了低16位,高16位保留。(不方便截图)
把对应的位写1,应该是0000 0000  0001 1100(共16位)
这是二进制表示法,但一般不会写成二进制,因为可读性差,所以用十六进制表示的。
那么怎么写成十六进制呢?
这个问题你应该问度娘了。
回复

使用道具 举报

17

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2017-8-5
在线时间
36 小时
 楼主| 发表于 2018-12-4 16:07:23 | 显示全部楼层
hgr211 发表于 2018-12-4 15:54
基础的c语言去学下吧,兄弟

正在学
回复

使用道具 举报

17

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2017-8-5
在线时间
36 小时
 楼主| 发表于 2018-12-4 16:09:36 | 显示全部楼层
warship 发表于 2018-12-4 15:57
0x用于表示十六进制数,
你的0001 1100本意是二进制数,实际上就是0x1C
所以写成0x1C就可以了,难道写 ...

嗯谢谢
我是对应着寄存器图写下的二进制数
回复

使用道具 举报

17

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2017-8-5
在线时间
36 小时
 楼主| 发表于 2018-12-4 16:10:23 | 显示全部楼层
2018Dog 发表于 2018-12-4 15:59
根本问题:如何把二进制转十六进制
你看GPIOx_ODR 寄存器,用到了低16位,高16位保留。(不方便截图)
...

感谢感谢
回复

使用道具 举报

24

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2018-5-13
在线时间
32 小时
发表于 2018-12-4 19:45:21 | 显示全部楼层
0x表示的是16进制 你写的0x0001 1100实际上是10001000100000000
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 08:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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