STM32
直播中

张娟

8年用户 2245经验值
私信 关注
[问答]

使用STM32H503的I3C外设,如何设置数据线在时钟线低电平的中间位置进行翻转?

使用STM32H503的I3C外设,但是在设置动态地址的时候一直在报错无应答,我想设置数据线在时钟线低电平的中间位置进行翻转不知道应该怎么设置?请大家帮帮忙!
使用的是官方的NUCLEO-H503RB。

回帖(1)

张艳

2024-3-13 17:11:13
要设置数据线在时钟线低电平的中间位置进行翻转,你可以使用STM32H503的I3C外设中的一个叫做```I3C cin_high_dlc```的寄存器位来配置。

首先,你需要在初始化I3C外设时启用I3C特性。你可以使用类似以下代码的初始化函数来完成:

```c
void I3C_Init(void)
{
    // 使能I2C外设
    LL_I2C_Enable(I2C1);
  
    // 将I2C设置为I3C模式
    LL_I2C_SetI3CMode(I2C1, LL_I2C_I3C_MODE_ENABLE);
    // 配置I3C特性
    LL_I2C_I3C_Enable(I2C1);
  
    // ... 其他初始化操作
}
```

接下来,在发送I3C动态地址时,你可以使用```LL_I2C_GenerateStart```函数发送起始信号,并在发送过程中设置```I3C cin_high_dlc```寄存器位。

```c
void I3C_SendDynamicAddress(uint8_t address)
{
    // 生成起始信号
    LL_I2C_GenerateStart(I2C1);
  
    // 检查起始信号是否成功发送
    while(!LL_I2C_IsActiveFlag_SB(I2C1))
  
    // 设置I3C cin_high_dlc寄存器位
    LL_I2C_SetDataOwnAddress1(I2C1, address | LL_I2C_I3C_CIN_HIGH_DLC_POS);
  
    // ... 其他发送动态地址的操作
}
```

请注意,上述代码是基于LL库编写的,如果你使用的是HAL库或其他库,请根据库函数的命名和用法进行相应的调整。

希望能对你有所帮助!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分