OpenEdv-开源电子网

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

STM32中IIC的一点疑惑

[复制链接]

1

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2013-5-8
在线时间
0 小时
发表于 2013-5-9 12:55:52 | 显示全部楼层 |阅读模式
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;//时钟输出0   
return 0;  


原子哥,红色的那两句话是否应该顺序反过来??SDA_IN();  把PC11设置为上下拉输入,但是IIC_SDA=1; 没有经过IO寄存器的配置就进行输出,就是在IO口设置为输入状态时进行输出,这个正确吗?

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-9 15:24:40 | 显示全部楼层
回复【楼主位】lirx:
---------------------------------
这里是上拉。
原代码没问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2013-5-8
在线时间
0 小时
 楼主| 发表于 2013-5-9 17:49:59 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
#define SDA_IN()  {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<12;} 这里把PC11设置为输入。
#define IIC_SDA    Cout(11) //SDA  这里的PC11是输出。
在输入的状态下,不经过io口的状态转换,就直接跳到了输出,这当中是怎么切换的啊?原子哥,我还是不太懂,能不能将具体详细一点。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-10 00:37:14 | 显示全部楼层
回复【3楼】lirx:
---------------------------------
这里是2个宏定义啊!!!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2012-8-6
在线时间
0 小时
发表于 2013-5-10 02:03:19 | 显示全部楼层
IO口寄存器设置好输入模式的情况下改ODR可以正常输出吗?的确是两个宏定义,但还没有看出来。同问
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-10 10:44:07 | 显示全部楼层
回复【5楼】端钱:
---------------------------------
设置为带上下拉输入的时候,设置ODR寄存器,就相当于提供上下拉。
你好好再看看IO口的使用
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

16

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-4-15
在线时间
7 小时
发表于 2013-5-10 16:41:34 | 显示全部楼层
回复【5楼】端钱: --------------------------------- 设置为带上下拉输入的时候,设置ODR寄存器,就相当于提供上下拉。 你好好再看看IO口的使用
---------------------------------
不对吧,STM32中文参考手册描述:
8.1.7 输入配置当I/O端口配置为输入时: ● 输出缓冲器被禁止 ● 施密特触发输入被激活 ● 根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接 ● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器 ● 对输入数据寄存器的读访问可得到I/O状态
回复 支持 反对

使用道具 举报

16

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-4-15
在线时间
7 小时
发表于 2013-5-10 16:45:58 | 显示全部楼层
我的理解:
1:当配置为输入时,写输出数据寄存器不会有任何影响,因为输出缓冲器通道已被切断,
2:作为输入时的上下拉电阻与作为输出时的上下拉电阻是互相独立的
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2013-5-8
在线时间
0 小时
 楼主| 发表于 2013-5-10 17:42:08 | 显示全部楼层
我有点明白原子哥的意思了,IIC_SDA=1;这一句其实并不是要达到输出一个高电平的作用,而是起到一个对输入上拉的作用。当我们向ODR写进“1”的时候,是为输入口接上上拉电阻,并不是输出高电平。各位觉得这样对吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-10 21:45:56 | 显示全部楼层
回复【9楼】lirx:
---------------------------------
是的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

16

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2013-3-17
在线时间
13 小时
发表于 2013-6-17 15:29:03 | 显示全部楼层
mark,学习了
回复 支持 反对

使用道具 举报

1

主题

215

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2013-9-23
在线时间
4 小时
发表于 2015-1-8 17:58:53 | 显示全部楼层
回复【9楼】lirx:
---------------------------------
学习
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-27 06:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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