初级会员

- 积分
- 54
- 金钱
- 54
- 注册时间
- 2018-7-27
- 在线时间
- 16 小时
|
1金钱
按照数据手册配置adc和dma后,采集不到数据,贴上源码和工程文件,希望大家一起讨论,谢谢了用keil3.8编写的
adc配置
void Adc_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA口时钟
GPIOA->CRL&=0XFF000000;//PA0 1 2 3 4 5 anolog输入
RCC->APB2ENR|=1<<9; //ADC1时钟使能
RCC->APB2RSTR|=1<<9; //ADC1复位
RCC->APB2RSTR&=~(1<<9);//复位结束
RCC->CFGR&=~(3<<14); //分频因子清零
RCC->CFGR|=2<<14; //设置频率
ADC1->CR1&=0XF0FFFF; //工作模式清零
ADC1->CR1|=0<<16; //独立工作模式
ADC1->CR1&=~(0<<8); //扫描模式
printf("ADC1_CR1:%x\r\n",ADC1->CR1);
ADC1->CR2&=~(0<<1); //连续转换模式
ADC1->CR2|=1<<8; //ADC1 DMA设置
ADC1->CR2&=~(7<<17);
ADC1->CR2|=7<<17; //软件控制转换
ADC1->CR2|=1<<20; //使用用外部触发(SWSTART)!!! 必须使用一个事件来触发
ADC1->CR2&=~(1<<11); //右对齐
printf("ADC1_CR2:%x\r\n",ADC1->CR2);
ADC1->SQR1&=~(0XF<<20);//转换数目清零
ADC1->SQR1|=5<<20; //设置转换数目
printf("ADC1_SQR1:%x\r\n",ADC1->SQR1);
//设置通道0~5的采样时间
ADC1->SMPR2&=0XFFFC0000;//通道0,1,2,3,4,5采样时间清空
ADC1->SMPR2|=7<<0; //通道0 239.5周期,提高采样时间可以提高精确度
ADC1->SMPR2|=7<<3; //通道1 239.5周期,提高采样时间可以提高精确度
ADC1->SMPR2|=7<<6; //通道2 239.5周期,提高采样时间可以提高精确度
ADC1->SMPR2|=7<<9; //通道3 239.5周期,提高采样时间可以提高精确度
ADC1->SMPR2|=7<<12; //通道4 239.5周期,提高采样时间可以提高精确度
ADC1->SMPR2|=7<<15; //通道5 239.5周期,提高采样时间可以提高精确度
printf("ADC1_SMPR2:%x\r\n",ADC1->SMPR2);
//设置转换序列
ADC1->SQR3&=~(0X2FFFFFFF);
ADC1->SQR3|=0<<0; //0通道第1个转换
ADC1->SQR3|=1<<5; //1通道第2个转换
ADC1->SQR3|=2<<10; //2通道第3个转换
ADC1->SQR3|=3<<15; //3通道第4个转换
ADC1->SQR3|=4<<20; //4通道第5个转换
ADC1->SQR3|=5<<25; //5通道第6个转换
printf("ADC1_SQR3:%x\r\n",ADC1->SQR3);
ADC1->CR2|=1<<0; //开启AD转换器
ADC1->CR2|=1<<3; //使能复位校准
while(ADC1->CR2&1<<3); //等待校准结束
ADC1->CR2|=1<<2; //开启AD校准
while(ADC1->CR2&1<<2); //等待校准结束
ADC1->CR2|=1<<22; //启动规则转换通道
}
dma配置
void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
RCC->AHBENR|=1<<0; //开启DMA1时钟
delay_ms(5); //等待DMA时钟稳定
DMA_CHx->CPAR=(u32)cpar; //DMA1 外设地址
DMA_CHx->CMAR=(u32)cmar; //DMA1,存储器地址
DMA1_MEM_LEN=cndtr; //保存DMA传输数据量
DMA_CHx->CNDTR=cndtr; //DMA1,传输数据量
DMA_CHx->CCR=0X00000000; //复位
DMA_CHx->CCR|=0<<4; //从外设读
DMA_CHx->CCR|=1<<5; //循环模式
DMA_CHx->CCR|=0<<6; //外设地址非增量模式
DMA_CHx->CCR|=1<<7; //存储器增量模式
DMA_CHx->CCR|=1<<8; //外设数据宽度为16位
DMA_CHx->CCR|=1<<10; //存储器数据宽度16位
DMA_CHx->CCR|=3<<12; //最高等优先级
DMA_CHx->CCR|=0<<14; //非存储器到存储器模式
DMA_CHx->CCR|=1<<0; //使能DMA
}
|
|