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配置,加上中断,就可以了

注意:即使中断里面什么也不写,就可以发送了,我并不是很清楚是为什么,后期补上
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号