完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ADC的配置如下:
void AdcInitial(void) { RCC->APB2RSTR |= (1<<9);//Reset ADC1 RCC->APB2RSTR &= ~(1<<9); //Clear ADC1 Reset RCC->APB2ENR |= (1<<2); //PortA Enable RCC->APB2ENR |= (1<<0); //AFIO Enable RCC->APB2ENR |= (1<<9); //ADC1 Enable RCC->CFGR &= 0xFFFF3FFF;//Clear ADCPRE RCC->CFGR |= (2<<14); //Set ADCPRE 6 Prescaler GPIOA->CRL &= 0xFFFFFFF0;//PoartA0 Anolog Input GPIOA->CRL &= 0xFFFFFF0F;//PoartA1 Anolog Input GPIOA->CRL &= 0xFFFFF0FF;//PoartA2 Anolog Input } void Adc1Set(void) { ADC1->CR1 &=0xFFF0FFFF; //DualMod == 0000 ADC1->CR1 |= (1<<8);//Scan Enable ADC1->CR2 |= (1<<1);//Cont = 1 ADC1->CR2 &=~(1<<20);//Disable ExtTrig ADC1->CR2 &= ~(1<<11);//Right Align ADC1->SQR1 &= 0xFF0FFFFF;//Clear Regular Channel Sequence Length ADC1->SQR1 |= (2<<20);// Set Regular Channel Sequence Length to 3 ADC1->CR2 |= (1<<23);//Temperature and Vrefint Enable ADC1->CR2 |= (7<<17);//Swstart Mode ADC1->SMPR2 &=0xFFFFFE00;//SMPR2 1.5cycle ADC1->SMPR2 |= (7<<0); //239.5Cycle ADC1->SMPR2 |= (7<<3); //239.5Cycle ADC1->SMPR2 |= (7<<6); //239.5Cycle ADC1->SQR3 &= 0xFFFF8000; ADC1->SQR3 |= (0<<0); ADC1->SQR3 |= (1<<5); ADC1->SQR3 |= (2<<10); ADC1->CR2 |= (1<<0);//Enable Converter ADC1->CR2 |= (1<<8);//Enable DMA ADC1->CR2 |= (1<<3); //RstCal while(ADC1->CR2&(1<<3)); ADC1->CR2 |= (1<<2); //Cal while(ADC1->CR2&(1<<2)); } DMA配置如下: u32 DmaAdcValue[]= {1,2,3};// void DmaInitial(void) { RCC->AHBENR |= (1<<0); } void DMA1_Channel1ConfigureSet(void) { u32 DRAdress =0; DMA1_Channel1->CNDTR = 3; //Transfer Count DRAdress = (u32)(&ADC1->DR);//ADC1->DR; DMA1_Channel1->CPAR = DRAdress ; //Peripheral Address DMA1_Channel1->CMAR = (u32)(&DmaAdcValue[0]); //Memory Address DMA1_Channel1->CCR &= ~(1<<14); //Disable Mem2Mem Bit DMA1_Channel1->CCR &= 0xCFFF; //Clear Priority DMA1_Channel1->CCR |= (2<<12); //Hight Priority DMA1_Channel1->CCR &= 0xF3FF; //Clear Memory Size Bit DMA1_Channel1->CCR |= (1<<10);//Memory Size 16 Bit DMA1_Channel1->CCR &= 0xFCFF; //Clear Peripheral Size Bit DMA1_Channel1->CCR |= (1<<8);//Peripheral Size 16Bit DMA1_Channel1->CCR |= (1<<7); //Memory Increment Enable DMA1_Channel1->CCR &= ~(1<<6); //Peripheral Increment Disable DMA1_Channel1->CCR |= (1<<5); //Circular Enable DMA1_Channel1->CCR &= ~(1<<4); //Data Transfer From Peripheral DMA1_Channel1->CCR |= (1<<0);//Enable DMA } 我的想法是:ADC1扫描,连续转换模式,启动ADC1的DMA。用DMA的第一通道,把ADC1 CH0,CH1,CH2通道的值读到DmaAdcValue[]数组里面。配置好上面的参数,但读DmaAdcValue[]数组里面的值,一直没有更新,好像DMA一直没有启动一样,是否这种的配置正确吗?还是其它的问题导致? |
|
相关推荐
3个回答
|
|
应该是你的DMA这样设置只会动作一次.
请参考我的串口DMA实验. //开启一次DMA传输 void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx) { DMA_CHx->CCR&=~(1<<0); //关闭DMA传输 DMA_CHx->CNDTR=DMA1_MEM_LEN; //DMA1,传输数据量 DMA_CHx->CCR|=1<<0; //开启DMA传输 } 这样才可以多次启动,每调用一次,启动一次. |
|
|
|
应该是DMA还没有启动,因为数组里面DmaAdcValue[]= {1,2,3}初始化的值,用软件仿真时看到的全局变量一直没有改变. 按你的方法每调动一次DMA,就使能一次,问题照旧。有点奇怪。
|
|
|
|
论坛搜索"adc dma"看看别人的程序吧.
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1754 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1613 浏览 1 评论
1053 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1667 浏览 2 评论
1927浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
712浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
562浏览 3评论
584浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
544浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 07:31 , Processed in 0.649943 second(s), Total 51, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号