OpenEdv-开源电子网

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

关于位操作的小小疑问????

[复制链接]

22

主题

109

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2015-5-28
在线时间
0 小时
发表于 2015-7-27 23:58:33 | 显示全部楼层 |阅读模式
5金钱
在教程4  按键输入中 位操作有两个方法 
//#define KEY0 PEin(4)   //PE4
#define KEY0  GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)//读取按键0

在实验1  流水灯中 有位操作
//#define DS0 PEin(5)   //PE5
可是我用库函数的位操作如下就会出现问题  main.c(11): error:  #137: expression must be a modifiable lvalue

#define DS0 GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5)
怎么回事?

再不玩命努力,你就老了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2015-7-28 01:23:06 | 显示全部楼层
当然不能这么干了,这是个函数...
函数不能被赋值...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

22

主题

109

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2015-5-28
在线时间
0 小时
 楼主| 发表于 2015-7-28 06:45:00 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
早上好
那原子哥 为啥在 按键输入中    可以呀
#define KEY0  GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)//读取按键0
再不玩命努力,你就老了
回复

使用道具 举报

39

主题

598

帖子

0

精华

高级会员

Rank: 4

积分
875
金钱
875
注册时间
2013-12-18
在线时间
41 小时
发表于 2015-7-28 09:13:22 | 显示全部楼层
我靠,你是PEin(5),你看好,是In啊啊啊啊啊,你在看看你,GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5)是out啊啊啊啊啊,
我用库虽然不熟,但是也应该知道,PEin(5)要等价于,也是等价于GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_5)把?试试看去把。还是那句画,不建议初学者就库和寄存器一起学,原子哥都是习惯用寄存器的,你意思你刚上手就要超越原子哥?先把一种学明白,想学另一种也可以的,不要这么着急图块。
回复

使用道具 举报

22

主题

109

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2015-5-28
在线时间
0 小时
 楼主| 发表于 2015-7-28 22:17:48 | 显示全部楼层
我感谢您能回我帖子。。
可是你好像没有看明白  
在按键输入教材中  
有这两种 宏定义 方式
#define KEY0 Ein(4)   //PE4
#define KEY0  GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)//读取按键0

可是我对应的在led中用这两个
#define DS0 Bout(5)          //这个编译通过
#define DS0 GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5)    
//可是这个类似呀 编译不通过 那为啥按键用 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) 这个可以呀?
再不玩命努力,你就老了
回复

使用道具 举报

22

主题

109

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2015-5-28
在线时间
0 小时
 楼主| 发表于 2015-7-28 22:18:37 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥 你既然说函数不能这样用,可是为啥在按键输入中可以这样定义呀
在按键输入教材中   
有这两种 宏定义 方式 
#define KEY0 Ein(4)   //PE4 
#define KEY0  GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)//读取按键0 

可是我对应的在led中用这两个 
#define DS0 Bout(5)          //这个编译通过 
#define DS0 GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5)     
//可是这个类似呀 编译不通过 那为啥按键用 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) 这个可以呀?
再不玩命努力,你就老了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2015-7-28 22:48:42 | 显示全部楼层
回复【6楼】逍遥居士_888:
---------------------------------
一个是读值,一个是赋值。
给你举个简单例子吧:
A=函数();
函数()=A;

如果还不懂的话,别问我了,回去学习C语言先。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

17

主题

181

帖子

0

精华

高级会员

Rank: 4

积分
503
金钱
503
注册时间
2017-7-24
在线时间
117 小时
发表于 2017-8-9 14:56:15 | 显示全部楼层
正点原子 发表于 2015-7-28 22:48
回复【6楼】逍遥居士_888:
---------------------------------
一个是读值,一个是赋值。
给你举个简单例子 ...

C语言左边不能是表达式= =!!!所以还是不太懂你想表达的意思。读值是个什么概念??读取接口的值的意思么???
回复

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2384
金钱
2384
注册时间
2012-11-22
在线时间
403 小时
发表于 2017-8-9 16:05:33 | 显示全部楼层
q247341184 发表于 2017-8-9 14:56
C语言左边不能是表达式= =!!!所以还是不太懂你想表达的意思。读值是个什么概念??读取接口的值的意思 ...

A = DS0可以,但是DS0 = A就不可以,问题不出在你宏定义的地方,出在你使用这个宏定义的地方,按键程序中只是会读KEY0,但是你流水灯中会赋值DS0,这下明白了吧。
态度决定一切
回复

使用道具 举报

29

主题

311

帖子

0

精华

高级会员

Rank: 4

积分
747
金钱
747
注册时间
2016-5-21
在线时间
199 小时
发表于 2017-8-9 16:11:29 | 显示全部楼层
你可以先不要用宏定义,先直接用函数操作,用输了再自己改宏定义 ,就明白了
回复

使用道具 举报

17

主题

181

帖子

0

精华

高级会员

Rank: 4

积分
503
金钱
503
注册时间
2017-7-24
在线时间
117 小时
发表于 2017-8-10 10:10:32 | 显示全部楼层
冰封嗜魔 发表于 2017-8-9 16:05
A = DS0可以,但是DS0 = A就不可以,问题不出在你宏定义的地方,出在你使用这个宏定义的地方,按键程序中 ...

明白了,非常感谢!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-20 12:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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