ST意法半导体
直播中

杜喜喜

7年用户 1492经验值
私信 关注
[问答]

STM32F105的LED驱动器使用I2C1和I2C2面临的挑战有哪些?

我正在使用 STM32F105 处理客户板。有一些 LED 驱动器使用 I2C1 和 I2c2。
串行接口的配置是:
void MX_I2C1_Init(void)
{
/* 用户代码开始 I2C1_Init 0 */
/* 用户代码结束 I2C1_Init 0 */
/* 用户代码开始 I2C1_Init 1 */
/* 用户代码结束 I2C1_Init 1 */
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000;
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
如果(HAL_I2C_Init(&hi2c1)!= HAL_OK)
{
  错误处理程序();
}
/* 用户代码开始 I2C1_Init 2 */
/* 用户代码结束 I2C1_Init 2 */
}
/* I2C2 初始化函数 */
无效 MX_I2C2_Init(无效)
{
/* 用户代码开始 I2C2_Init 0 */
/* 用户代码结束 I2C2_Init 0 */
/* 用户代码开始 I2C2_Init 1 */
/* 用户代码结束 I2C2_Init 1 */
hi2c2.Instance = I2C2;
hi2c2.Init.ClockSpeed = 100000;
hi2c2.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c2.Init.OwnAddress1 = 0;
hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c2.Init.OwnAddress2 = 0;
hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
如果(HAL_I2C_Init(&hi2c2)!= HAL_OK)
{
  错误处理程序();
}
/* 用户代码开始 I2C2_Init 2 */
/* 用户代码结束 I2C2_Init 2 */
}
硬件连接应该是正确的,因为我能够打开他们在 I2C1 和 I2C2 中配置的所有 LED。但经过一些尝试,我错过了 I2C1 和 ErrorCode 32(超时错误)出现。
对于 I2C1,错误代码为 32,而对于 I2C2,则没有错误。
我对两个 I2C 都使用 10ms 超时,如果我设置更多超时也无济于事。
我正在使用以下函数在串行接口上​​写入相关数据的值:
void WriteRegister(HandleTypeDef* handle, uint8_t register_address, uint8_t value)
{
        uint8_t 缓冲区[2];
        buf[0] = 寄存器地址;
        buf[1] = 值;
HAL_I2C_Master_Transmit(handle->Init.I2C_Bus, handle->Init.I2C_Device_Address, buf, 2, handle->Init.I2C_Transmit_timeout_Milliseconds);
}
任何的想法?
  






更多回帖

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