GD32F470 DMA
时间: 2024-01-08 15:19:30 浏览: 222
GD32F470是一款基于ARM Cortex-M4内核的微控制器,支持DMA(直接内存访问)功能。DMA可以在不干扰CPU的情况下,直接将数据从外设传输到内存或者从内存传输到外设。这样可以大大提高数据传输的效率,减少CPU的负担。下面是GD32F470 DMA的一些介绍和示例代码:
1. GD32F470支持多个DMA通道,每个通道可以配置不同的外设和内存地址,以及传输数据的长度和方向等参数。
2. GD32F470的DMA控制器支持循环传输和非循环传输两种模式,可以根据具体应用场景选择不同的模式。
3. GD32F470的DMA控制器还支持中断和轮询两种传输方式,可以根据具体应用场景选择不同的方式。
下面是一个GD32F470 ADC2+DMA的配置代码示例:
```c
// 定义DMA传输数据的长度
#define BUFFER_SIZE 16
// 定义DMA传输的源地址和目的地址
uint16_t adc_value[BUFFER_SIZE];
uint32_t dma_dest_addr = (uint32_t)adc_value;
uint32_t dma_src_addr = (uint32_t)&ADC_RDATA(ADC2);
// 配置DMA通道0
dma_parameter_struct dma_init_struct;
dma_deinit(DMA1, DMA_CH0);
dma_struct_para_init(&dma_init_struct);
dma_init_struct.direction = DMA_PERIPHERAL_TO_MEMORY;
dma_init_struct.memory_addr = dma_dest_addr;
dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
dma_init_struct.memory_width = DMA_MEMORY_WIDTH_16BIT;
dma_init_struct.number = BUFFER_SIZE;
dma_init_struct.periph_addr = dma_src_addr;
dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;
dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;
dma_init(DMA1, DMA_CH0, &dma_init_struct);
// 配置ADC2
adc_parameter_struct adc_init_struct;
adc_struct_para_init(&adc_init_struct);
adc_init_struct.continuous_mode = ENABLE;
adc_init_struct.data_alignment = ADC_DATAALIGN_RIGHT;
adc_init_struct.external_trigger = ADC_EXTTRIG_REGULAR_NONE;
adc_init_struct.scan_mode = ENABLE;
adc_init_struct.channel_number = 1;
adc_init(ADC2, &adc_init_struct);
// 配置ADC2的DMA传输
adc_dma_mode_enable(ADC2);
adc_dma_request_after_last_enable(ADC2);
// 启动DMA传输
dma_channel_enable(DMA1, DMA_CH0);
adc_software_trigger_enable(ADC2, ADC_REGULAR_CHANNEL);
```
阅读全文