OpenEdv-开源电子网

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

ministm32f103的iic的SDA_IN()与SDA_OUT()宏定义是不是有误????

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2017-8-7
在线时间
1 小时
发表于 2017-8-7 09:31:31 | 显示全部楼层 |阅读模式
1金钱
#define SDA_IN()  {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<12;}
#define SDA_OUT() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=3<<12;}

//IO操作函数         
#define IIC_SCL    PCout(12) //SCL
#define IIC_SDA    PCout(11) //SDA         
#define READ_SDA   PCin(11)  //输入SDA

#define SDA_IN()  {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<12;}这是不是定义成时钟了呢?谢谢!

最佳答案

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

看一下中文参考手册的GPIOC_CRH寄存器你就明白了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

13

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2017-7-20
在线时间
50 小时
发表于 2017-8-7 09:31:32 | 显示全部楼层
看一下中文参考手册的GPIOC_CRH寄存器你就明白了
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2017-7-20
在线时间
16 小时
发表于 2017-8-7 10:00:20 | 显示全部楼层
这个是对GPIO口的配置吧
回复

使用道具 举报

4

主题

380

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3088
金钱
3088
注册时间
2015-10-17
在线时间
320 小时
发表于 2017-8-7 10:03:40 | 显示全部楼层
只能呵呵
回复

使用道具 举报

8

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2017-7-3
在线时间
30 小时
发表于 2017-8-7 10:52:35 | 显示全部楼层
这代码没毛病 去看看中文参考手册
回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
发表于 2017-8-7 11:23:05 | 显示全部楼层
老铁,没毛病,这里是模拟I2C,实际上就是对于GPIO口的配置,配置它的输入输出模式,速度等等
可以参考STM32中文参考手册的114页   端口配置高寄存器(GPIOx_CRH) (x=A..E)
11.png
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2017-8-7
在线时间
1 小时
 楼主| 发表于 2017-8-7 12:41:41 | 显示全部楼层
#define SDA_IN()  {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<12;}是不是应该改成#define SDA_IN()  {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<11;}左移11位操作的才是PC11????
回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
发表于 2017-8-7 15:33:52 | 显示全部楼层
cdjybchz 发表于 2017-8-7 12:41
#define SDA_IN()  {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8CRH|=8

#define SDA_IN()  {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<12;}
这一条本来就是把PC11模拟成SDA了,你的PC12是被模拟成SCL,这个你要分清楚

比如你要把PC8模拟成SDA,那就是
#define SDA_IN()  {GPIOC->CRH&=0XFFFFFFF0;GPIOC->CRH|=8<<0;}
比如你要把PC9模拟成SDA,那就是
#define SDA_IN()  {GPIOC->CRH&=0XFFFFFF0F;GPIOC->CRH|=8<<4;}

自己对比一下
回复

使用道具 举报

0

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2017-8-23
在线时间
23 小时
发表于 2017-8-23 14:47:31 | 显示全部楼层
这是模拟iic,根本没用到寄存器,我也很纳闷为什么本来就有的硬件居然不用????
回复

使用道具 举报

4

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2017-8-23
在线时间
3 小时
发表于 2017-8-23 14:49:38 | 显示全部楼层
需要ST品牌的样品吗? 填一份扫IC网问卷可以得到三种ST任意型号的样品。[url= https://www.wjx.top/jq/15943942.aspx]》》点击此处申请 [/url]
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-15 00:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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