初级会员

- 积分
- 105
- 金钱
- 105
- 注册时间
- 2016-7-26
- 在线时间
- 19 小时
|

楼主 |
发表于 2016-8-31 13:05:41
|
显示全部楼层
可以的话就请大神帮我看看这两段初始化函数吧,我已经改过很多遍了,实在找不出问题所在
void adc_init(void)
{
RCC->APB2ENR|=1<<2; //GPIOA时钟使能
GPIOA->CRL&=0XF00000FF; //PA2,3,4,5,6anolog输入
RCC->APB2ENR|=1<<9; //ADC1时钟使能
RCC->APB2RSTR|=1<<9; //ADC1复位
RCC->APB2RSTR&=~(1<<9); //复位结束
RCC->CFGR&=~(3<<14); //分频因子清零
RCC->CFGR|=2<<14; //PCLK6分频后作为ADC时钟()12MHz
ADC1->CR1&=0XF0FFFF; //工作模式清零
ADC1->CR1|=0<<16; //独立工作模式
ADC1->CR1|=1<<8; //扫描模式
// ADC1->CR1&=~(1<<8); //非扫描模式
ADC1->CR2&=(1<<1); //单次转换模式
// ADC1->CR2|=1<<1; //连续转换模式
ADC1->CR2&=~(7<<17);
// ADC1->CR2|=7<<17; //软件控制转换
ADC1->CR2|=3<<17; //定时器2的CC2控制转换
ADC1->CR2|=1<<20; //使用外部事件启动转换
ADC1->CR2&=~(1<<11); //右对齐
ADC1->SQR1&=~(0XF<<20);
ADC1->SQR1|=2<<20; //设置转换总数(3个)
ADC1->SMPR2&=~(7<<6); //通道2采样时间清空
ADC1->SMPR2|=2<<6; //通道2,239.5周期,提高采样时间可以提高精度
ADC1->SMPR2&=~(7<<9); //通道3采样时间清空
ADC1->SMPR2|=2<<9; //通道3,239.5周期,提高采样时间可以提高精度
ADC1->SMPR2&=~(7<<12); //通道4采样时间清空
ADC1->SMPR2|=2<<12; //通道3,239.5周期,提高采样时间可以提高精度
/* ADC1->SMPR2&=~(7<<15); //通道5采样时间清空
ADC1->SMPR2|=2<<15; //通道3,239.5周期,提高采样时间可以提高精度
ADC1->SMPR2&=~(7<<18); //通道6采样时间清空
ADC1->SMPR2|=2<<18; //通道3,239.5周期,提高采样时间可以提高精度 */
ADC1->CR2|=1<<8; //使能DMA
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->SQR3&=0XFFFF8000; //清空规则序列
ADC1->SQR3|=2; //规则序列1,通道2
ADC1->SQR3|=3<<5; //规则序列2,通道3
ADC1->SQR3|=4<<10; //规则序列3,通道4
/* ADC1->SQR3|=5<<15; //规则序列4,通道5
ADC1->SQR3|=6<<20; //规则序列5,通道6 */
ADC1->CR1|=1<<5; //使能ADC转换完成中断
MY_NVIC_Init(1,0,ADC1_2_IRQn,2);
}
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->CCR=0X00000000; //复位
delay_ms(20);
DMA_CHx->CPAR=cpar; //DMA1 外设地址
DMA_CHx->CMAR=(u32)cmar; //DMA1,存储器地址
DMA1_MEM_LEN=cndtr; //保存DMA传输数据量
DMA_CHx->CNDTR=cndtr; //DMA1,传输数据量
DMA_CHx->CCR&=~(1<<4); //从外设读
DMA_CHx->CCR|=1<<5; //循环模式
// DMA_CHx->CCR&=~(1<<5); //非循环模式
DMA_CHx->CCR|=0<<6; //外设地址非增量模式
// DMA_CHx->CCR&=~(1<<7); //存储器非增量模式
DMA_CHx->CCR|=1<<7; //存储器增量模式
DMA_CHx->CCR|=1<<8; //外设数据宽度为16位
DMA_CHx->CCR|=1<<10; //存储器数据宽度16位
DMA_CHx->CCR|=1<<12; //中等优先级
DMA_CHx->CCR|=0<<14; //非存储器到存储器模式
DMA_CHx->CCR|=1<<1; //使能DMA传输完成中断
MY_NVIC_Init(2,0,DMA1_Channel1_IRQn,2); //配置DMA传输完成中断
DMA_CHx->CCR|=1<<0; //DMA通道1开启
} |
|