DMA配置示例(以STM32为例):
c
// 启用DMA控制器时钟
__HAL_RCC_DMA1_CLK_ENABLE();
// 配置DMA通道
DMA_HandleTypeDef hdma;
hdma.Instance = DMA1_Channel1;
hdma.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma.Init.PeriphInc = DMA_PINC_DISABLE;
hdma.Init.MemInc = DMA_MINC_ENABLE;
hdma.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma.Init.Mode = DMA_NORMAL;
hdma.Init.Priority = DMA_PRIORITY_LOW;
if (HAL_DMA_Init(&hdma) != HAL_OK) {
// 初始化错误处理
Error_Handler();
}
// 将DMA与外设链接(以ADC为例)
__HAL_LINKDMA(&hadc, DMA_Handle, hdma);
// 启用DMA传输
if (HAL_ADC_Start_DMA(&hadc, (uint32_t*)buffer, buffer_length) != HAL_OK) {
// 启动错误处理
Error_Handler();
}
|