打印
[其他ST产品]

iiC通信协议详解以及STM32iic代码理解

[复制链接]
楼主: yellow555
手机看帖
扫描二维码
随时随地手机跟帖
21
yellow555|  楼主 | 2023-8-27 00:42 | 只看该作者 回帖奖励 |倒序浏览
应答和非应答信号
//产生ACK应答
void IIC_Ack(void)
{
        IIC_SCL=0;
        SDA_OUT();
        IIC_SDA=0;     //数据位拉低
        delay_us(2);
        IIC_SCL=1;
        delay_us(2);
        IIC_SCL=0;
}
//不产生ACK应答                    
void IIC_NAck(void)
{
        IIC_SCL=0;
        SDA_OUT();
        IIC_SDA=1;   //数据位拉高
        delay_us(2);
        IIC_SCL=1;
        delay_us(2);
        IIC_SCL=0;
}       

使用特权

评论回复
22
yellow555|  楼主 | 2023-8-27 00:42 | 只看该作者
主机等待应答信号的接收,当数据线被拉低的时候就代表接收了应答信号,让时钟线拉低继续进行传输,当SDA == 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;  
}

使用特权

评论回复
23
yellow555|  楼主 | 2023-8-27 00:43 | 只看该作者
主机等待应答信号的接收,当数据线被拉低的时候就代表接收了应答信号,让时钟线拉低继续进行传输,当SDA == 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;  
}

使用特权

评论回复
24
yellow555|  楼主 | 2023-8-27 00:43 | 只看该作者
读取字节和传输字节

传入的数据txd会和0X80(1000000)进行与运算,然后结果右移七位,换句话说就是把传进来的字节的最高位单拿出来,赋值给SDA,以便于传输,然后将字节左移一位,就会把第二位变为最高位,以此类推,将每一位都传入SDA。

使用特权

评论回复
25
yellow555|  楼主 | 2023-8-27 00:43 | 只看该作者
void IIC_Send_Byte(u8 txd)
{                        
    u8 t;   
        SDA_OUT();             
    IIC_SCL=0;//拉低时钟开始数据传输
    for(t=0;t<8;t++)
    {              
        IIC_SDA=(txd&0x80)>>7;
        txd<<=1;           
                delay_us(2);   //对TEA5767这三个延时都是必须的
                IIC_SCL=1;
                delay_us(2);
                IIC_SCL=0;       
                delay_us(2);
    }         
}             
//读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);
                IIC_SCL=1;
        receive<<=1;
        if(READ_SDA)receive++;   
                delay_us(1);
    }                                         
    if (!ack)
        IIC_NAck();//发送nACK
    else
        IIC_Ack(); //发送ACK   
    return receive;
}

使用特权

评论回复
26
chenjunt| | 2023-8-27 10:43 | 只看该作者
注意上拉电阻会把总线也拉成高电平模式

使用特权

评论回复
27
belindagraham| | 2023-9-5 10:11 | 只看该作者
I2C通信协议使用时序控制,包括启动信号、结束信号、应答信号、复位信号等。

使用特权

评论回复
28
loutin| | 2023-9-5 11:56 | 只看该作者
IIC通信协议广泛应用于微控制器、传感器、存储器和其他电子设备中。

使用特权

评论回复
29
jtracy3| | 2023-9-5 12:35 | 只看该作者
如何使用STM32的IIC接口进行通信

使用特权

评论回复
30
eefas| | 2023-9-5 14:08 | 只看该作者
常用的串行通信协议,用于在多个设备之间进行数据传输。

使用特权

评论回复
31
tifmill| | 2023-9-5 14:21 | 只看该作者
I2C通信协议支持多种数据传输模式,包括数据传输、读取、写入等。其中,数据传输模式是最常用的模式,用于在主从器件之间传输数据。

使用特权

评论回复
32
wangdezhi| | 2023-9-5 15:05 | 只看该作者
IIC通信协议支持双向通信,即可以在同一方向上进行收发数据。

使用特权

评论回复
33
minzisc| | 2023-9-5 16:43 | 只看该作者
IIC通信协议的基本原理是,它使用了两根线,一根是数据线(SDA),另一根是时钟线(SCL)。这两个线在所有参与通信的设备之间是共享的。

使用特权

评论回复
34
abotomson| | 2023-9-5 17:57 | 只看该作者
IIC通信协议可达100kbps的通信速率。

使用特权

评论回复
35
pl202| | 2023-9-5 21:04 | 只看该作者
可以使用STM32 HAL库提供的函数来实现I2C通信。

使用特权

评论回复
36
LLGTR| | 2023-9-6 12:10 | 只看该作者
i2c通信协议可达100kbps的通讯速度。

使用特权

评论回复
37
天天向善| | 2023-9-6 12:54 | 只看该作者
iic通信协议利用时序节制,包含启动旌旗灯号、竣事旌旗灯号、应对旌旗灯号、复位旌旗灯号等。

使用特权

评论回复
38
AIsignel| | 2023-9-6 13:40 | 只看该作者
iic通信协议支持双向通信,这意味着数据可以在同一方向上发送和接收。

使用特权

评论回复
39
理想阳| | 2023-9-6 14:06 | 只看该作者
可以利用stm,hal库供给的函数来实现iic通讯。

使用特权

评论回复
40
minzisc| | 2023-9-7 10:50 | 只看该作者
IIC通信协议具有较长的传输距离,可以达到125m的距离。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则