GD32F303RCT6配置ADC+DMA,使用注入通道,一次采样四个数据,使用最快采样速率,请给出代码.
时间: 2024-03-24 17:42:07 浏览: 166
GD32F303驱动代码.rar
以下是GD32F303RCT6配置ADC+DMA,使用注入通道,一次采样四个数据,使用最快采样速率的基本代码:
```c
#include "gd32f30x.h"
#define ADC_INSERTED_CHANNEL ADC_INSERTED_CHANNEL_0|ADC_INSERTED_CHANNEL_1|ADC_INSERTED_CHANNEL_2|ADC_INSERTED_CHANNEL_3
#define ADC_INSERTED_CHANNEL_NUM 4
uint16_t ADC_InsertedConvertedValue[ADC_INSERTED_CHANNEL_NUM];
void adc_dma_init(void)
{
/* enable ADC and DMA clock */
rcu_periph_clock_enable(RCU_ADC);
rcu_periph_clock_enable(RCU_DMA);
/* configure ADC clock */
adc_clock_config(ADC_ADCCK_PCLK2_DIV2);
/* ADC mode config */
adc_mode_config(ADC_MODE_FREE);
/* ADC scan function enable */
adc_special_function_config(ADC_SCAN_MODE, ENABLE);
/* ADC data alignment config */
adc_data_alignment_config(ADC_DATAALIGN_RIGHT);
/* ADC channel length config */
adc_channel_length_config(ADC_INSERTED_CHANNEL_NUM);
/* ADC inserted channel config */
adc_inserted_channel_config(ADC_INSERTED_CHANNEL, ADC_SAMPLETIME_1POINT5);
/* ADC external trigger enable */
adc_external_trigger_config(ADC_INSERTED_CHANNEL, ADC_EXTTRIG_INSERTED_NONE);
/* enable ADC DMA */
adc_dma_mode_enable(ADC_DMA_MODE_SCAN);
adc_dma_request_after_last_enable();
/* configure DMA channel */
dma_deinit(DMA_CH0);
dma_init(DMA_CH0, DMA_DIR_PERIPHERAL_TO_MEMORY, DMA_MODE_CIRCULAR, (uint32_t)ADC_InsertedConvertedValue, (uint32_t)&ADC_IDATA0, ADC_INSERTED_CHANNEL_NUM, DMA_PERIPHERAL_WIDTH_16BIT, DMA_MEMORY_WIDTH_16BIT);
dma_circulation_enable(DMA_CH0);
dma_channel_priority_config(DMA_CH0, DMA_PRIORITY_ULTRA_HIGH);
dma_memory_increase_disable(DMA_CH0);
dma_periph_increase_disable(DMA_CH0);
dma_memory_to_memory_disable(DMA_CH0);
/* enable DMA channel */
dma_channel_enable(DMA_CH0);
/* ADC software trigger enable */
adc_software_trigger_enable(ADC_INSERTED_CHANNEL);
}
int main(void)
{
/* initialize ADC and DMA */
adc_dma_init();
/* start ADC conversion */
adc_software_trigger_enable(ADC_INSERTED_CHANNEL);
while (1) {
/* do something */
}
}
```
需要注意的是,此代码仅为基本配置代码,具体使用时需要根据实际情况进行修改。例如,需要根据ADC输入电压范围和采样精度选择合适的参考电压和数据对齐方式;需要根据DMA传输速率和缓冲区大小选择合适的DMA通道和传输模式;需要根据实际需求选择合适的ADC触发源和转换模式等。
阅读全文