Stm32F103使用硬件I2C的DMA模式失败

发布时间 2023-09-19 16:28:31作者: njit-sam

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配置,加上中断,就可以了
cubemx配置
注意:即使中断里面什么也不写,就可以发送了,我并不是很清楚是为什么,后期补上