【发布时间】:2021-02-11 02:27:13
【问题描述】:
我正在使用 STM32 板通过中断模式向 I2C 从机发送 I2C 命令。 我已经初始化了 I2C 模块,如下所示,
hi2c2.Instance = I2C2;
hi2c2.Init.Timing = 0x00303D5B;
hi2c2.Init.OwnAddress1 = 0;
hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c2.Init.OwnAddress2 = 0;
hi2c2.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c2) != HAL_OK)
{
Error_Handler();
}
/** Configure Analogue filter
*/
if (HAL_I2CEx_ConfigAnalogFilter(&hi2c2, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
{
Error_Handler();
}
/** Configure Digital filter
*/
if (HAL_I2CEx_ConfigDigitalFilter(&hi2c2, 0) != HAL_OK)
{
Error_Handler();
}
对于传输,我使用 HAL API,
HAL_I2C_Master_Transmit_IT(&hi2c2, 0x60, buffer, 2);
但这段代码似乎对我不起作用。
在缓冲区中,第一个字节是 I2C 从机上的寄存器地址,第二个字节是数据。 当我使用阻塞模式 API 时,
HAL_I2C_Master_Transmit(&hi2c2, 0x60, buffer, 2,HAL_MAX_DELAY);
它工作正常。有什么建议吗?
【问题讨论】:
-
不要为此使用 HAL。
-
@P__J__你为什么这么说?
标签: stm32 interrupt nonblocking i2c