hc32l13x通过i2c向ch455h芯片写入数据,ch455h i2c地址为0x48
时间: 2024-02-05 12:13:53 浏览: 36
下面是一个简单的示例代码,可以用于在 HC32L13X 上通过 I2C 总线向 CH455H 芯片写入数据:
```c
#include "hc32l13x.h"
#include "hc32l13x_i2c.h"
#define I2C_CH455H_ADDR (0x48UL)
int main(void)
{
uint8_t au8Data[2] = {0x00, 0x01};
/* 初始化 I2C */
stc_i2c_init_t stcI2cInit;
I2C_StructInit(&stcI2cInit);
stcI2cInit.u32Baudrate = 100000UL;
I2C_Init(M0P_I2C, &stcI2cInit);
/* 启动 I2C */
I2C_Cmd(M0P_I2C, Enable);
/* 发送 START 信号 */
I2C_GenerateSTART(M0P_I2C);
/* 等待 START 信号成功发送 */
while (I2C_GetStatus(M0P_I2C) != I2C_STS_MASTER_START_SEND);
/* 发送从机地址和写信号 */
I2C_SendData(M0P_I2C, (I2C_CH455H_ADDR << 1) | I2C_WR);
/* 等待从机地址和写信号发送成功 */
while (I2C_GetStatus(M0P_I2C) != I2C_STS_MASTER_TX_ADDR_ACK);
/* 发送数据 */
I2C_SendData(M0P_I2C, au8Data[0]);
I2C_SendData(M0P_I2C, au8Data[1]);
/* 等待数据发送成功 */
while (I2C_GetStatus(M0P_I2C) != I2C_STS_MASTER_TX_DATA_ACK);
/* 发送 STOP 信号 */
I2C_GenerateSTOP(M0P_I2C);
/* 等待 STOP 信号发送完成 */
while (I2C_GetStatus(M0P_I2C) != I2C_STS_IDLE);
while (1);
}
```
在这个示例代码中,我们首先初始化了 HC32L13X 的 I2C 模块,然后通过 I2C 发送 START 信号,并等待 START 信号发送成功。接着,我们发送从机地址和写信号,等待从机地址和写信号发送成功。之后,我们通过 I2C 发送两个字节的数据,并等待数据发送成功。最后,我们发送 STOP 信号,并等待 STOP 信号发送完成。