OpenEdv-开源电子网

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

有一个51的程序现在想移植成STM32,但是一直有语法错误。求解释

[复制链接]

18

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2015-7-11
在线时间
0 小时
发表于 2015-7-22 10:38:04 | 显示全部楼层 |阅读模式
5金钱
//原51
void AD9854_WR_Byte(uchar addr,uchar dat)
{
AD9854_AdrBus  = (addr&0x3f) | (P2&0xc0);
AD9854_DataBus = dat;
AD9854_WR      = 0;
AD9854_WR      = 1;
}
这里在stm32中把GPIO该定义的都定义了,但是51可以直接用P2与上一个8位地址,那stm32怎么做?我已经给GPIOC的GPIO0到7都做好定义了,都是推挽输出,50M的速度。
但是在本人写的

void AD9854_WR_Byte(u8 addr, u8 dat)


AD9854_AdrBus  = (addr&0x3f) | ((GPIOC))&0xc0);     //1.  GPIOC&0xc0报错     error:  #137: expression must be a——                                                                                                                                                          modifiable lvalue
                                                                                                                         和 #174-D: expression has no effect
AD9854_DataBus = dat;                                               //2.=号处报错  . error:  #137: expression must be a modifiable lvalue
                                                                                                               #174-D: expression has no effect
GPIO_ResetBits(GPIOA,GPIO_Pin_11);   //AD9854_WR =0
  GPIO_SetBits(GPIOB,GPIO_Pin_11);     // AD9854_WR =1;

}
这该怎么改?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-7-22 10:55:09 | 显示全部楼层
1.GPIOC是一个宏定义,不可直接相与,相应操作可参考原子哥STM32手册OLED章节的多个IO统一操作宏定义处理
2.没用过这个芯片,不知道AD9854_DataBus是什么类型,猜不出来原因
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-7-22 12:00:22 | 显示全部楼层
GPIOC这里是寄存器地址的结构体,不能直接与,如果用库函数的话就改成
AD9854_AdrBus  = (addr&0x3f) | (GPIO_ReadInputDate(GPIOC))&0xc0);
或者寄存器
AD9854_AdrBus  = (addr&0x3f) | (GPIOC->IDR)&0xc0);
回复

使用道具 举报

18

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2015-7-11
在线时间
0 小时
 楼主| 发表于 2015-7-22 15:04:43 | 显示全部楼层
回复【3楼】zc123:
--------------------------
谢谢!
回复

使用道具 举报

18

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2015-7-11
在线时间
0 小时
 楼主| 发表于 2015-7-22 16:02:52 | 显示全部楼层
回复【4楼】musilinlin:
---------------------------------
回复【3楼】zc123:
---------------------------------
刚才试了一下还是不行。。。和之前一样的错误。
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2015-7-22 17:12:38 | 显示全部楼层
首先你要明白这个操作实现了什么才行:AD9854_AdrBus  = (addr&0x3f) | (P2&0xc0);
要看下AD9854的数据手册。看下硬件的连接。我感觉P2^6 、P2^7这两个脚是操作AD9854的通道的。
你要看下硬件连接,不要盲目的照搬程序。说不定你只控制几个脚的输出就能等效这个AD9854_AdrBus  = (addr&0x3f) | (P2&0xc0);
操作功能了的。
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 16:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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