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

Embedded HAL i2c驱动程序始终返回忙碌状态,embedded,stm32,hal,Embedded,Stm32,Hal,我在STM32L412上使用HAL_I2C_Master_Transmit_DMA驱动程序。我正在向外部4通道I2C DAC传输8字节的数据-总线上只有一个设备。第一次使用驱动程序工作正常,通过在i2c总线上使用示波器确认,DAC更新,并且存在停止条件。从那时起,驱动程序总是返回忙碌状态-特别是在驱动程序使用HAL_DMA_Start_IT时。未设置忙标志,第一次使用后,状态似乎从未重置 我曾读到其他人在使用I2C HAL驱动程序时提到相同(或非常类似)的问题,有解决方法吗 dma设置- sta

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

我曾读到其他人在使用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, 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();
}
}

使用I2C HAL驱动程序,是否对此进行了修复
是停止使用HAL驱动程序。非常简单的解决方案。我重写了它的一些部分,它们工作得很好,但我甚至不知道HAL在很多地方都做什么,所以我真的很困惑如何编写我自己的驱动器。你应该有HAL的源代码。走进它,看看它为什么会变得忙碌。