ADC3_DR_Address+1你这个地址为何加1?不是直接为ADC3的DR寄存器地址吗?- #define ADC1_DR_Address ((u32)0x4001244C)//定义ADC的地址(ADC1_DR规则数据寄存器)
- //DMA1通道1初始化,对应为ADC1,即外设为ADC1
- void DMA1_Init(DMA_Channel_TypeDef*DMA_CHx,unsigned long ADC_Temp)
- {
- RCC->AHBENR |= BIT(0);//使能DMA1时钟
- DMA_CHx->CNDTR |=BIT(1)|BIT(0);//传输的数据量为3
- DMA_CHx->CMAR = ADC_Temp;//DMA存储器地址(用来存储数据)
- DMA_CHx->CPAR = ADC1_DR_Address;//DMA读取数据的地址
- DMA_CHx->CCR &=~BIT(14);//非存储模式到存储模式(外设到存储器模式)
- DMA_CHx->CCR &=~BIT(6);//不执行外设地址增量操作
- DMA_CHx->CCR &=~BIT(4);//数据从外设读
- DMA_CHx->CCR |= BIT(13)|BIT(12);//通道优先级最高
- DMA_CHx->CCR |= BIT(10);//存储数据宽度为16位
- DMA_CHx->CCR |= BIT(8);//外设数据宽度为16位
- DMA_CHx->CCR |= BIT(7);//执行存储器地址增量操作
- DMA_CHx->CCR |= BIT(5);//执行循环操作
- // DMA_CHx->CCR |= BIT(1);//允许传输完成产生中断
- DMA_CHx->CCR |= BIT(0);//DMA通道开启
- }
,这是我以前用ADC跟DMA结合的代码,或许楼主可以参考一下
|