千家信息网

STM32 IIC是什么意思

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了STM32 IIC是什么意思,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、IIC定义IIC 即Inter-Int
千家信息网最后更新 2026年11月01日STM32 IIC是什么意思

这篇文章主要介绍了STM32 IIC是什么意思,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

1、IIC定义

IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司(后被NXP收购)在八十年代初设计出来的一种简单、双向、二线制、同步串行总线,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。多主多从的通讯协议。

下文将结合NXP官方的IIC手册讲解IIC协议。下载链接见文末。

I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。速率最高400Kbit/s。

2、IIC协议规范

2.1 SDA和SCL信号

起始条件:SCL线是高电平时,SDA线从高电平向低电平切换。

停止条件:SCL线是高电平时,SDA线从低电平向高电平切换。

代码实现

void I2C_Start(void){  //IO输出  SDA_OUT();   SCL_OUT();   I2C_DELAY();  //IO置高  SDA_SET();    SCL_SET();   //延时  I2C_DELAY();    //为低  SDA_CLR();  I2C_DELAY();  I2C_DELAY();  SCL_CLR();}

结束信号时类似的方式(不是动图)

代码实现

void I2C_Stop(void){  //IO输出  SDA_OUT();   SCL_OUT();  //IO置0  SDA_CLR();    SCL_CLR();   I2C_DELAY();  SCL_SET();  //延时  I2C_DELAY();    I2C_DELAY();  I2C_DELAY();  //SDA置1  SDA_SET();  I2C_DELAY();  I2C_DELAY();}

2.4 字节格式

SDA数据线上的每个字节必须是8位,每次传输的字节数量没有限制。每个字节后必须跟一个响应位(ACK)。首先传输的数据是最高位(MSB),SDA上的数据必须在SCL高电平周期时保持稳定,数据的高低电平翻转变化发生在SCL低电平时期。

每一个字节后面跟着一个ACK,有ACK就可以继续写或读。NACK,就停止

ACK:主机释放总线,传输完字节最后1位后的SCL的高电处,从机拉低电平。

NACK:主机释放总线,传输完字节最后1位后的SCL的高电处,从机无响应,总线为高电平。

动画描述写入的过程

代码实现

uint8_t I2C_Send_byte(uint8_t data){  uint8_t k;  //发送8bit数据  for(k=0;k<8;k++){        I2C_DELAY();    if(data&0x80){      SDA_SET();    }    else{      SDA_CLR();    }    data=data<<1;    I2C_DELAY();    SCL_SET();    I2C_DELAY();    I2C_DELAY();    SCL_CLR();  }  //延时读取ACK响应  I2C_DELAY();  SDA_SET();  //置为输入线  SDA_IN();  I2C_DELAY();  SCL_SET();     I2C_DELAY(); //这里出现了问题,延时变的无限大  //读数据  k=SDA_READ();  if(k){ NACK响应    return 0;  }  I2C_DELAY();  SCL_CLR();  I2C_DELAY();  SDA_OUT();  if(k){ NACK响应    return 0;  }  return 1;} uint8_t I2C_Receive_byte(uint8_t flg){  uint8_t k,data;  //接收8bit数据  //置为输入线    SDA_IN();  data=0;  for(k=0;k<8;k++){    I2C_DELAY();    SCL_SET();    I2C_DELAY();    //读数据    data=data |SDA_READ();    data=data<<1;    I2C_DELAY();    SCL_CLR();    I2C_DELAY();   }  data=data>>1; //往回移动1次  //返回ACK响应  //置为输出线  SDA_OUT();  if(flg){    SDA_SET(); //输出1-NACK  }else{    SDA_CLR();//输出0-ACK  }  I2C_DELAY();  SCL_SET();  I2C_DELAY();  I2C_DELAY();  SCL_CLR();  I2C_DELAY();  SDA_OUT();  //返回读取的数据  return (uint8_t)data;}

2.5 从机地址和读写位

这里只说7位地址,前7位为地址,最后一位为读写位,1表示读操作,0表示写操作

主机立即读从机数据,从第一个字节

3、计算IIC的频率

通信频率由主机掌控,也就是代码中的延时函数决定的

从上面,我们得知最高速为400Kbit/s。我们设计300Kbit/s。

速率300Kbit/s,对应周期1/300ms=10/3us≈3us,4分频就是3/4us。

我们使用的延时是,1/120MHZ*3*30 =3/4us

也就是频率是300Kbit/s

和SPI类似,时钟下降沿时,数据转换,时钟上升沿时,采样数据。也就是时钟高电平数据有效。

/*120Mhz时钟时,当ulCount为1时,函数耗时3个时钟,延时=3*1/120us=1/40us*//*SystemCoreClock=120000000us级延时,延时n微秒SysCtlDelay(n*(SystemCoreClock/3000000));ms级延时,延时n毫秒SysCtlDelay(n*(SystemCoreClock/3000));m级延时,延时n秒SysCtlDelay(n*(SystemCoreClock/3));*/ #if defined   (__CC_ARM) /*!< ARM Compiler */__asm voidSysCtlDelay(unsigned long ulCount){    subs    r0, #1;    bne     SysCtlDelay;    bx      lr;}#elif defined ( __ICCARM__ ) /*!< IAR Compiler */voidSysCtlDelay(unsigned long ulCount){    __asm("    subs    r0, #1\n"       "    bne.n   SysCtlDelay\n"       "    bx      lr");} #elif defined (__GNUC__) /*!< GNU Compiler */void __attribute__((naked))SysCtlDelay(unsigned long ulCount){    __asm("    subs    r0, #1\n"       "    bne     SysCtlDelay\n"       "    bx      lr");} #elif defined  (__TASKING__) /*!< TASKING Compiler */                           /*无*/#endif /* __CC_ARM */  /* * @brief  SysCtlDelay * @param  ulCount 延时值,必须大于0 * @retval None */void SysCtlDelay_IIC(unsigned long ulCount){    SysCtlDelay(ulCount);}  /定义时钟频率,300KHz#define I2C_DELAY()  SysCtlDelay_IIC(30)

感谢你能够认真阅读完这篇文章,希望小编分享的"STM32 IIC是什么意思"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

数据 总线 电平 字节 时钟 传输 输出 主机 也就是 代码 篇文章 频率 信号 地址 意思 最高 函数 双向 同时 周期 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 天津市摩尔互联网科技 没上市的科技互联网公司 北京互联网科技公司 齐家互联网科技有限公司 互联网科技创新企业排名 云创客互联网科技公司 现代互联网科技股 栖莱科技互联网股份有限公司 崇明区互联网教育科技诚信经营 智腾互联网科技有限公司 阿大互联网科技有限公司 互联网科技产业特征 杭州壁岐互联网科技有限公司 想开互联网科技公司怎么样 烟台灵鸽互联网科技有限公司 上海钢联属于互联网科技股吗 抖集互联网科技技术咨询 银川新华互联网科技学校原画 第三届互联网大会安防黑科技 武汉亿视互联网科技有限公司 互联网科技工作委员会主任 互联网科技资迅 佩信高科技互联网 浙南科技城互联网大厦建设工程 产业互联网科技服务公司 互联网科技包装股 福州德业互联网科技 互联网科技平台产品运营 马化腾互联网科技教学 互联网科技和医药行业
0