stm32h750 多路采集ADC dma传输的代码怎么写
时间: 2023-10-08 14:13:38 浏览: 136
可以参考以下代码实现stm32h750多路采集ADC DMA传输:
首先,需要配置ADC的时钟,并将ADC引脚设置为模拟输入模式:
```
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; //使能GPIOA时钟
GPIOA->MODER |= GPIO_MODER_MODER4; //将PA4设置为模拟输入模式
RCC->AHB1ENR |= RCC_AHB1ENR_ADC12EN; //开启ADC1时钟
ADC12_COMMON->CCR |= ADC12_CCR_CKMODE_0; //将ADC时钟设置为HCLK/2
```
然后,需要配置ADC通道和DMA传输:
```
//配置ADC通道1、2
ADC1->SQR1 = 0;
ADC1->SQR1 |= (ADC_SQR1_L_1 | ADC_SQR1_SQ4_0 | ADC_SQR1_SQ5_2); //第1、2个转换顺序为1、2号通道
//DMA传输
RCC->AHB1ENR |= RCC_AHB1ENR_DMA1EN; //开启DMA1时钟
DMA1_Stream0->CR &= ~(DMA_SxCR_EN); //关闭DMA0
while (DMA1_Stream0->CR & DMA_SxCR_EN); //等待DMA0关闭
DMA1_Stream0->PAR = (uint32_t)(&(ADC1->DR)); //配置DMA传输地址为ADC数据寄存器
DMA1_Stream0->M0AR = (uint32_t)(&adcValues); //配置内存地址
DMA1_Stream0->NDTR = 2; //配置传输数据数量,此处为2个
DMA1_Stream0->CR |= (DMA_SxCR_CHSEL_0 | DMA_SxCR_CHSEL_1 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PSIZE_0 | DMA_SxCR_MINC | DMA_SxCR_CIRC | DMA_SxCR_EN); //配置DMA通道、数据传输大小、数据增量、循环传输等
```
最后,启动ADC和DMA传输:
```
ADC1->CR |= ADC_CR_ADEN; //开启ADC1
while (!(ADC1->ISR & ADC_ISR_ADRDY)); //等待ADC1准备就绪
ADC1->CFGR |= ADC_CFGR_DMAEN; //开启ADC1 DMA传输
ADC1->CR |= ADC_CR_ADSTART; //启动ADC1转换
```
阅读全文