OpenEdv-开源电子网

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

关于IIC的一点疑问

[复制链接]

15

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-9-22
在线时间
26 小时
发表于 2016-10-28 12:51:48 | 显示全部楼层 |阅读模式
1金钱
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配置成输入模式  不是输出缓冲器被关闭了吗 ?那么IIC_SDA=1;delay_us(1);          
        IIC_SCL=1;delay_us(1);         设置ODR输出寄存器 还有什么作用吗?我试着删掉  发现不行?求解释

最佳答案

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

这个IIC_SDA=1;delay_us(1); 就是在操作odr寄存器 不是上下拉寄存器 所以就是输出的意思 不是上拉下拉的意思 然而输出缓冲器关了 不就是输出不了吗
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-9-22
在线时间
26 小时
 楼主| 发表于 2016-10-28 12:51:49 | 显示全部楼层
本帖最后由 初学者要变大师 于 2016-10-28 13:25 编辑

这个IIC_SDA=1;delay_us(1);         就是在操作odr寄存器  不是上下拉寄存器  所以就是输出的意思  不是上拉下拉的意思  然而输出缓冲器关了  不就是输出不了吗
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-10-28 13:58:15 | 显示全部楼层
这不是为了输出,可能相当于设置个初始状态,等待被改变,作为判断基础吧
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

28

主题

288

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1213
金钱
1213
注册时间
2011-4-9
在线时间
97 小时
发表于 2016-10-28 15:33:31 | 显示全部楼层
因为IIC空闲状态的两根线都是高电平,这里是为了释放总线。
回复

使用道具 举报

15

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-9-22
在线时间
26 小时
 楼主| 发表于 2016-10-28 15:47:54 | 显示全部楼层
本帖最后由 初学者要变大师 于 2016-10-28 16:10 编辑
山峰雪狼 发表于 2016-10-28 15:33
因为IIC空闲状态的两根线都是高电平,这里是为了释放总线。

恩  很有道理  我再理解一下
回复

使用道具 举报

2

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2016-6-7
在线时间
27 小时
发表于 2016-12-1 16:58:12 | 显示全部楼层
这个楼主,怎么样理解的
回复

使用道具 举报

2

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2016-6-7
在线时间
27 小时
发表于 2016-12-1 16:58:51 | 显示全部楼层
能不能帮帮我解释一下,我在这个也有地方迷惑
回复

使用道具 举报

5

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2016-11-7
在线时间
63 小时
发表于 2017-1-5 07:35:08 来自手机 | 显示全部楼层
为什么receive先左移在判断IIC_SDA 第一次是无效
S70105-071900.jpg
回复

使用道具 举报

5

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2016-11-7
在线时间
63 小时
发表于 2017-1-5 21:40:22 | 显示全部楼层
u8 IIC_Read_Byte(unsigned char ack)
{
        unsigned char i,receive=0;
        SDA_IN();//SDA设置为输入
    for(i=0;i<8;i++ )
        {
        IIC_SCL=0;
        delay_us(2);
                IIC_SCL=1;
        receive<<=1;
        if(READ_SDA)receive++;   
                delay_us(1);
    }                                         
    if (!ack)
        IIC_NAck();//发送nACK
    else
        IIC_Ack(); //发送ACK   
    return receive;        这个入口参数有没有人详解一下啊 谢谢了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-29 04:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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