OpenEdv-开源电子网

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

I?C实验,一句话不太懂,请高手帮忙解释

[复制链接]

62

主题

275

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1155
金钱
1155
注册时间
2012-3-4
在线时间
80 小时
发表于 2012-7-17 15:45:07 | 显示全部楼层 |阅读模式

//等待应答信号到来

//返回值:1,接收应答失败

//        0,接收应答成功

u8 IIC_Wait_Ack(void)

{

     u8 ucErrTime=0;

     SDA_IN();      //SDA设置为输入  

     IIC_SDA=1;delay_us(1);              

     IIC_SCL=1;delay_us(1);

     while(READ_SDA)

     {

                 ucErrTime++;

                 if(ucErrTime>250)

                 {

                             IIC_Stop();

                             return 1;

                 }

     }

     IIC_SCL=0;//时钟输出              

     return 0; 


}


不懂,既然输入了PC(11),那
 
IIC_SDA=1;这个是PCOUT(11),怎么弄的呢?输入状态写输出?



那不懂

//IO方向设置
#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 

SDA_IN();      //SDA设置为输入  

     IIC_SDA=1;delay_us(1); 

输入状态不能输出?而输出状态可以输入?不懂啊








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

使用道具 举报

145

主题

477

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1264
金钱
1264
注册时间
2012-4-2
在线时间
69 小时
发表于 2012-7-17 15:53:21 | 显示全部楼层
设为输出就读不了引脚上的电平
回复 支持 反对

使用道具 举报

62

主题

275

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1155
金钱
1155
注册时间
2012-3-4
在线时间
80 小时
 楼主| 发表于 2012-7-17 16:18:16 | 显示全部楼层
回复【2楼】767904101:
---------------------------------
看到原子多个解释,都没解释,都说看,看毛啊,

难道输出不能读?但是输入能输出?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-7-17 20:34:21 | 显示全部楼层
回复【3楼】l1234564555:
---------------------------------
别烦.
你都还没理解STM32的IO怎么用的.
STM32的IO有推挽输出,带上下拉的输入,浮空输入,模拟输入...
其中你现在用到的输入,就是带上下拉的输入.
而这个输入的上下拉控制,就是由ODR寄存器控制的.

所以,叫你多看资料了.不是资料没说,是你自己没理解.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
发表于 2012-12-12 19:49:36 | 显示全部楼层
可以再解释下吗  还是不懂啊
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
发表于 2012-12-12 19:50:24 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
还是不懂啊  是不是IIC_SDA=1 使他变成上啦输入呢?
回复 支持 反对

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2012-12-12 20:38:18 | 显示全部楼层
觉得没用。设为开漏输出,读输入寄存器,就可以得到引脚的电平了。没必要改为输入状态。

这几天在看模拟iic,准备读取陀罗仪数据。
业余程序玩家。
回复 支持 反对

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2012-12-12 20:49:08 | 显示全部楼层

ps 设为开漏输出之后还应该输出高电平,相当于高阻。由于外部接上拉电阻,所以实际电平也是为1;但是此时如果线上其它设备输出0的话,电平则会被拉低。

此时读输入寄存器就可得到端口的实际电平。

业余程序玩家。
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
发表于 2012-12-12 21:00:24 | 显示全部楼层
回复【7楼】ofourme:
---------------------------------
哥们 你那个陀螺仪是mpu6050吗?
回复 支持 反对

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2012-12-12 21:10:57 | 显示全部楼层
回复【9楼】电子好学者:

回复【7楼】ofourme:
---------------------------------
哥们 你那个陀螺仪是mpu6050吗?

---------------------------------
不是,是买的9轴模块,用的L3G4200D和ADXL345。卖家给的stm32程序好像有问题,读出来的数据基本没变。正在慢慢调。
业余程序玩家。
回复 支持 反对

使用道具 举报

10

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
417
金钱
417
注册时间
2014-12-10
在线时间
46 小时
发表于 2016-5-12 10:16:52 | 显示全部楼层
ofourme 发表于 2012-12-12 21:10
回复【9楼】电子好学者:

                                                                        回复【7楼】ofourme:
---------------------------------
哥们&nbsp;你 ...

哥们,我现在就是在调陀螺仪l3g4200d,我在淘宝买的模块,如下图,请问是不是只用4根线,接模块的VCC,GND,SDA,SCL?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-6 22:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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