IIC--IIC广播功能的使用及应用

I²C广播(General Call)是一种通过全局地址(0x00)向总线上所有设备同时发送指令的核心协议功能,

其设计目标是实现对多从设备的同步控制

CH32系列单片机均支持此功能,下面介绍此功能的使用。其基本配置代码参考我们EVT IIC中断例程即可

本次主要介绍核心部分。

主机:

I2C_GenerateSTART(I2C1, ENABLE);
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
  
  // 2. 发送广播地址 (0x00 | 写操作)
  I2C_Send7bitAddress(I2C1, 0x00, I2C_Direction_Transmitter);
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
  
  // 3. 发送数据
  for(uint8_t i=0; i<len; i++) {
    I2C_SendData(I2C1, data[i]);
    while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  }
  
  // 4. 停止条件
  I2C_GenerateSTOP(I2C1, ENABLE);

这样即完成一次主机的广播,其主要就是往为0的地址发数据。这样具备从机广播应答功能的从机均会应答。

从机:

 

 

 


  I2C1->CTLR1 |= (1<<6);//在初始化时添加将此位,该位使能从机的IIC广播应答功能

//这段在IIC中断例程的中断里添加,
if
( I2C_GetFlagStatus( I2C1, I2C_FLAG_GENCALL ) != RESET ) { printf("GENCALL\r\n"); printf("rx_data:%x\r\n",I2C_ReceiveData(I2C1)); }

 这样主机发完地址后,每发一次广播的数据,均会进这里一次,在该中断里读取数据即可。

二,代码很简单,那么有哪些常见应用呢。

应用:

1,多设备同步启动/复位

2,多设备同步配置

如IIC通过总线广播发送配置信息,原先需要通过对应地址一个一个发,现在只需要发送一次,提高了效率。

3,多点传感器同步采集

如农业大棚中多个个DHT22同时启动温湿度采样,避免分时读取形成的“采样时间差”

4,多节点固件升级

原先一对一,现在设备同步接收到升级固件,可同步升级。

5,多从机地址分配

传统如果需要N多个从机协同工作,那么就需要准备N多套代码分别给设备下载,以实现不同地址的从机,

有了广播功能可通过代码逻辑实现主机给这N多个从机分配地址。

posted @ 2025-06-19 17:55  WCH_CH32  阅读(213)  评论(0)    收藏  举报