HAL i2c驱动程序始终返回繁忙状态

问题描述

我正在STM32L412上使用HAL_I2C_Master_Transmit_DMA驱动程序。我正在将8个字节的数据传输到外部4通道I2C DAC-总线上只有一个设备。通过在i2c总线上使用示波器确认驱动程序的首次使用可以正常工作,DAC更新并且存在停止条件。从那时起,驱动程序始终返回繁忙状态-特别是在驱动程序使用HAL_DMA_Start_IT的时候。尚未设置busy标志,似乎在首次使用后状态永远不会重置

我已经读到其他人在使用I2C HAL驱动程序时提到相同(或非常相似)的问题,对此有解决办法吗?

dma设置-

static void MX_DMA_Init(void) 
{

 /* DMA controller clock enable */
  __HAL_RCC_DMA1_CLK_ENABLE();

/* DMA interrupt init */
/* DMA1_Channel4_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Channel4_IRQn,0);
HAL_NVIC_EnableIRQ(DMA1_Channel4_IRQn);

}

i2c设置-

static void MX_I2C2_Init(void)
{
hi2c2.Instance = I2C2;
hi2c2.Init.Timing = 0x00610611;
hi2c2.Init.OwnAddress1 = 192;
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();
}
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)