OpenEdv-开源电子网

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

IIC心得体会

[复制链接]

39

主题

234

帖子

0

精华

高级会员

Rank: 4

积分
630
金钱
630
注册时间
2016-8-25
在线时间
57 小时
发表于 2017-2-22 13:07:36 | 显示全部楼层 |阅读模式
本人不才,今天上午刚写完一个完整的IIC协议程序,有所悟,想和大家讨论一下。希望大家多批评指正。个人iic程序难点主要集中在等待应答函数,和发送接收字节3个函数。写字节函数,需要在SCL上升沿之前将所要写的位发送到SDA,然后SCL置1,延时,再将SCL置0。读字节函数和等待响应函数则相反,需要现将SCL位置1,然后读位,再将SCL位拉低。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

145

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2016-12-14
在线时间
75 小时
发表于 2017-2-22 15:34:43 | 显示全部楼层
书山有路勤为径,学海无涯苦作舟!
回复 支持 反对

使用道具 举报

19

主题

51

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1906
金钱
1906
注册时间
2017-10-8
在线时间
230 小时
发表于 2017-10-16 21:14:15 | 显示全部楼层
您好,我想问一下,这里的receive怎么就能是主机读取的字节呢,它仅仅表示计数啊,IIC这个协议可以看通,可是代码似乎不是完全按照协议来处理的,问的不知对不对,请大家见谅
//读1个字节,ack=1时,发送ACK,ack=0,发送nACK   
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);
        receive<<=1;//这里讲接收到的数据左移,原来发送函数先发送高位,现在接受的话如果依然左移,使得数据变得和原来的本末倒置了啊。

        if(READ_SDA)receive++;   
                delay_us(1);
    }                                         
    if (!ack)
        IIC_NAck();//发送nACK
    else
        IIC_Ack(); //发送ACK   
    return receive;
}
回复 支持 反对

使用道具 举报

18

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
330
金钱
330
注册时间
2017-8-24
在线时间
75 小时
发表于 2017-10-18 15:59:45 | 显示全部楼层
学习了
回复 支持 反对

使用道具 举报

39

主题

234

帖子

0

精华

高级会员

Rank: 4

积分
630
金钱
630
注册时间
2016-8-25
在线时间
57 小时
 楼主| 发表于 2017-10-22 09:31:40 | 显示全部楼层
天耀中华 发表于 2017-10-16 21:14
您好,我想问一下,这里的receive怎么就能是主机读取的字节呢,它仅仅表示计数啊,IIC这个协议可以看通,可 ...

这个协议没有问题, 通过右移保存数据Bit
回复 支持 反对

使用道具 举报

39

主题

234

帖子

0

精华

高级会员

Rank: 4

积分
630
金钱
630
注册时间
2016-8-25
在线时间
57 小时
 楼主| 发表于 2017-10-22 09:32:43 | 显示全部楼层
天耀中华 发表于 2017-10-16 21:14
您好,我想问一下,这里的receive怎么就能是主机读取的字节呢,它仅仅表示计数啊,IIC这个协议可以看通,可 ...

++保存1,不加保存0
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2017-10-24
在线时间
15 小时
发表于 2017-10-24 22:01:57 | 显示全部楼层
受教了
回复 支持 反对

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

积分
795
金钱
795
注册时间
2015-3-26
在线时间
151 小时
发表于 2017-10-25 10:48:05 | 显示全部楼层
重点是应答信号必须要进得来,进得来包括,能进来、还有能被程序检测到两点,  此两点又包括,io口的正确配置,使应答电平能够长驱直入+外围电路的正确搭建,还有就是程序的编写,别进来了电平都没被检测到那还是通信不了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 14:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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