Stm32F103使用硬件I2C的DMA模式失败
CubeMX配置的硬件I2C,DMA模式,下面发送函数
/**
* @brief 向OLED发送数据的函数
* @param data 要发送的数据
* @param len 要发送的数据长度
* @return None
* @note 此函数是移植本驱动时的重要函数 将本驱动库移植到其他平台时应根据实际情况修改此函数
*/
void OLED_Send(uint8_t *data, uint8_t len)
{
//HAL_I2C_Master_Transmit(&hi2c1, OLED_ADDRESS, data, len,HAL_MAX_DELAY);//HAL_MAX_DELAY
while (HAL_I2C_GetState(&hi2c1)!=HAL_I2C_STATE_READY) {}
while (HAL_I2C_Master_Transmit_DMA(&hi2c1,OLED_ADDRESS,data,len)!= HAL_OK)
{
if (HAL_I2C_GetError(&hi2c1)!= HAL_I2C_ERROR_AF)
{
Error_Handler();
}
}
}
调试发现,可以发送成功一次,但是第二次卡死
)
于是,修改Cubemx的DMA配置,加上中断,就可以了
注意:即使中断里面什么也不写,就可以发送了,我并不是很清楚是为什么,后期补上