我的程序,不明白 ,请帮下小弟。。。。
void ADC1_Init(void)
{
RCC->APB2ENR|=1<<9;
RCC->APB2RSTR|=1<<9;
RCC->APB2RSTR&=~(1<<9);
RCC->CFGR|=2<<14;//设置分频因子
ADC1->CR1&=0<<16;//独立模式,复位后就是独立模式
//ADC1->CR1|=5<<13;//
ADC1->CR1|=1<<8;//设置为扫描模式
//ADC1->CR1|=1<<7;//允许转换完成中断
ADC1->CR2&=0x00000000;
ADC1->CR2|=1<<20;//允许使用外部触发
ADC1->CR2|=7<<17;//软件触发
ADC1->CR2&=~(1<<11); //右对齐
ADC1->SMPR2&=0XFFF00000;//通道0,1,2,3,4采样时间清空
ADC1->SMPR2|=7<<0; // 0
ADC1->SMPR2|=7<<3; // 1
ADC1->SMPR2|=7<<6; // 2
ADC1->SMPR2|=7<<9;// 3
ADC1->SMPR2|=7<<12;// 4
ADC1->SQR1|=4<<20; //开启5个转换
ADC1->CR2|=1<<0;
ADC1->CR2|=1<<1;
ADC1->CR2|=1<<8; //开DMA
ADC1->CR2|=1<<3;
while(ADC1->CR2&1<<3) ;
ADC1->CR2|=1<<2;
while(ADC1->CR2&1<<2);
ADC1->SQR3&=0x00000000;
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->CR2|=1<<22; //启动规则转换通道
}
void DMA1_Init(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar)
{
RCC->AHBENR|=1<<0;
delay_ms(1);//yanshi 等待时钟稳定
DMA_CHx->CPAR=cpar; //DMA1 外设地址
DMA_CHx->CMAR=(u32)cmar;//DMA1,存储器地址
DMA_CHx->CNDTR=5;
DMA_CHx->CCR&=0X00000000;//复位
DMA_CHx->CCR|=1<<8; //外设宽度为16位
DMA_CHx->CCR|=1<<10; //存储器宽度为16位
DMA_CHx->CCR&=~(1<<14); //非存储器到存储器
DMA_CHx->CCR|=1<<13; //高优先级
DMA_CHx->CCR|=1<<7; //存储器地址增量模式
DMA_CHx->CCR|=1<<1; //允许传输完成中断
DMA_CHx->CCR&=~(1<<4);
DMA_CHx->CCR|=1<<5; //执行循环模式
DMA_CHx->CCR&=~(1<<0); //关闭DMA传输
DMA_CHx->CNDTR=5;
DMA_CHx->CCR|=1<<0; //开启DMA传输
}
主函数中部分为
DMA1_Init(DMA1_Channel1,(u32)&ADC1->DR,(u32) cunchu);
ADC1_Init();
管脚单独函数初始化。。。
在主函数中初始化后,直接对数组进行操作,请问有什么不对的地方???
|