OpenEdv-开源电子网

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

IIC实验求指教

[复制链接]

19

主题

113

帖子

0

精华

高级会员

Rank: 4

积分
988
金钱
988
注册时间
2013-4-21
在线时间
307 小时
发表于 2013-4-21 22:28:01 | 显示全部楼层 |阅读模式
原子哥IIC实验用的是PB10、PB11,我改用为PB6、PB7。修改前后的程序如下,可是最后检测不到AT24C02的存在,是不是还需要修改其它地方,请大神指点!小民万分感激!

/*
//IO方向设置
#define SDA_IN()  {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8<<12;}
#define SDA_OUT() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=3<<12;}

//IO操作函数     
#define IIC_SCL    PBout(10) //SCL
#define IIC_SDA    PBout(11) //SDA     
#define READ_SDA   PBin(11)  //输入SDA
*/
///*
//IO方向设置
#define SDA_IN()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=8<<8;}
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=3<<8;}

//IO操作函数     
#define IIC_SCL    PBout(6) //SCL
#define IIC_SDA    PBout(7) //SDA     
#define READ_SDA   PBin(7)  //输入SDA
//*/

//初始化IIC
void IIC_Init(void)
{    /*                     
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(    RCC_APB2Periph_GPIOB, ENABLE );    
      
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11);    //PB10,PB11 输出高
    */
    ///*
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(    RCC_APB2Periph_GPIOB, ENABLE );    
      
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7);    //PB6,PB7 输出高
    //*/
}
淘宝小店(一嵌在线):https://shop126340021.taobao.com
QQ:3287952605
QQ群:491729196
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2013-4-21 23:59:53 | 显示全部楼层
#define SDA_IN()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=8<<8;}
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=3<<8;}
错了.
不是<<8
是<<4*7
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

19

主题

113

帖子

0

精华

高级会员

Rank: 4

积分
988
金钱
988
注册时间
2013-4-21
在线时间
307 小时
 楼主| 发表于 2013-4-22 08:41:47 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
多谢!神人哪
淘宝小店(一嵌在线):https://shop126340021.taobao.com
QQ:3287952605
QQ群:491729196
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-6-20
在线时间
0 小时
发表于 2013-6-20 16:23:29 | 显示全部楼层
#define SDA_IN()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=8<<4*7;} 
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=3<<4*7;} 
是改成这吗??但一编译有警告warning:  #68-D: integer conversion resulted in a change of sign求解!
回复 支持 反对

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2013-6-21 11:45:54 | 显示全部楼层
应该是
#define SDA_IN()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=8<<28;}  
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=3<<28;}
原子哥是不是又要出黑科技了呀。^_^...
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-6-3
在线时间
0 小时
发表于 2013-6-21 13:44:15 | 显示全部楼层
8<<28;
编译显示
 warning:  #61-D: integer operation result is out of range
回复 支持 反对

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2013-6-22 14:49:26 | 显示全部楼层
这个警告应该是有个函数的返回值超出整型的变量范围了。双击这个警告查看是不是数据类型选错了。
原子哥是不是又要出黑科技了呀。^_^...
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2013-6-22 18:25:35 | 显示全部楼层
回复【6楼】hpzhyj113:
---------------------------------
前面加个u32的强制转换就OK了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-6-3
在线时间
0 小时
发表于 2013-6-23 22:42:18 | 显示全部楼层
恩 多谢
回复 支持 反对

使用道具 举报

9

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2013-10-23
在线时间
25 小时
发表于 2015-3-21 10:05:47 | 显示全部楼层
在哪里前面加啊?
回复 支持 反对

使用道具 举报

9

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2013-10-23
在线时间
25 小时
发表于 2015-3-21 10:23:37 | 显示全部楼层
在线等,懂的大哥麻烦回复一下,谢谢。
回复 支持 反对

使用道具 举报

9

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2013-10-23
在线时间
25 小时
发表于 2015-3-21 12:06:36 | 显示全部楼层
高手都不出手。
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-8-10
在线时间
89 小时
发表于 2015-3-25 22:18:55 | 显示全部楼层
#define SDA_IN()  {GPIOB->CRH&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}
#define SDA_OUT() {GPIOB->CRH&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;}
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-8-10
在线时间
89 小时
发表于 2015-3-25 22:20:44 | 显示全部楼层
回复【13楼】化功大法:
---------------------------------
改过了应该是这样
#define SDA_IN()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;} 
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;}
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2014-12-16
在线时间
0 小时
发表于 2015-4-14 13:17:54 | 显示全部楼层
楼主问题解决了吗
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2014-12-16
在线时间
0 小时
发表于 2015-4-14 13:19:19 | 显示全部楼层
急求楼主指导啊
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2014-8-27
在线时间
12 小时
发表于 2015-5-7 21:51:34 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,那个4*7是怎么算的呢?
看向明天
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2015-5-8 00:32:35 | 显示全部楼层
回复【17楼】图灵信念:
---------------------------------
每个IO模式配置占用4个位,第7个IO,那不是<<4*7么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
341
金钱
341
注册时间
2015-9-22
在线时间
32 小时
发表于 2015-9-25 10:06:13 | 显示全部楼层
#define SDA_IN()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}  
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;}
请教一下这两句话的具体含义是什么呢?菜鸟不懂,谢谢指教
嵌入式开发微信公众号:嵌入式STM32软硬件开发
STM32交流,加好友,Q707372788
STM32交流群:383260480
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2016-7-11
在线时间
3 小时
发表于 2016-7-12 10:51:20 | 显示全部楼层
正点原子 发表于 2015-5-8 00:32
回复【17楼】图灵信念:
---------------------------------
每个IO模式配置占用4个位,第7个IO,那不是&lt; ...

那第11个IO不就是4*11=44,为什么却是<<12??
回复 支持 反对

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11511
金钱
11511
注册时间
2014-4-1
在线时间
1306 小时
发表于 2016-7-12 10:58:51 | 显示全部楼层

不同的寄存器,每个IO占用的位数不同,
有的4位,所以就是 4 x n;
有的2位,所以是 2 x n;还有1位的。

去看下寄存器的位定义就明白了。



回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2016-7-12 13:57:37 | 显示全部楼层
赵雨骁 发表于 2016-7-12 10:51
那第11个IO不就是4*11=44,为什么却是

每一组IO有16个 PA0~PA15   每个IO又需要占4位寄存器    所以将PA0~PA15分成每8个一组。

PA0~PA7  是一组   PA8~PA15 又是一组。    每个IO就需要4位  所以需要2个32位的寄存器。
GPIOB->CRL 对应低8个IO口(PA0~PA7)      GPIOB->CRH对应高8个IO口(PA8~PA15)
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

9

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2015-5-13
在线时间
18 小时
发表于 2016-8-11 10:08:16 | 显示全部楼层
正点原子 发表于 2015-5-8 00:32
回复【17楼】图灵信念:
---------------------------------
每个IO模式配置占用4个位,第7个IO,那不是&lt; ...

我用SDA是PB7  SCL是PB6,寄存器设置SDA_IN()和SDA_OUT()是怎么弄啊原子哥
回复 支持 反对

使用道具 举报

19

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2015-4-29
在线时间
38 小时
发表于 2016-9-27 20:57:15 | 显示全部楼层
aiyeba 发表于 2016-7-12 13:57
每一组IO有16个 PA0~PA15   每个IO又需要占4位寄存器    所以将PA0~PA15分成每8个一组。

PA0~PA7  是 ...

很详细,赞
回复 支持 反对

使用道具 举报

Hedy 该用户已被删除
发表于 2017-5-10 19:11:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-5-11 07:10:43 | 显示全部楼层
i2c总线当然要使用开漏模式,其它做法,程序复杂,问题多多.
回复 支持 反对

使用道具 举报

2

主题

68

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4028
金钱
4028
注册时间
2016-7-22
在线时间
559 小时
发表于 2017-6-23 14:36:25 | 显示全部楼层
Hedy 发表于 2017-5-10 19:11
#define SDA_IN()  {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8CRH|=3

只有数据引脚才要设置方向,时钟引脚不需要。
回复 支持 反对

使用道具 举报

2

主题

68

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4028
金钱
4028
注册时间
2016-7-22
在线时间
559 小时
发表于 2017-6-23 14:36:41 | 显示全部楼层
Hedy 发表于 2017-5-10 19:11
#define SDA_IN()  {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8CRH|=3

只有数据引脚才要设置方向,时钟引脚不需要。
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2017-7-29
在线时间
19 小时
发表于 2017-8-4 14:48:37 | 显示全部楼层
楼主可以用了吗?我按照上面的改了还是出不来6050的数据
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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