自173齐振超 作业:

ADC1通道1初始化
1.使能相应的PORT时钟,并设置模拟输入模式,adc1时钟

RCC->APB2ENR|=1<<2;     GPIOA->CRL&=0XFFFFFF0F;
 RCC->APB2ENR|=1<<9;

2.复位ADC1

RCC->APB2RSTR|=1<<9;  RCC->APB2RSTR&=~(1<<9);

3.设置ADCCLOCK分频因子

RCC->CFGR&=~(3<<14);      RCC->CFGR|=2<<14; 

4.设置CR11寄存器

ADC1->CR1&=0XF0FFFF;   //工作模式清零
 ADC1->CR1|=0<<16;      //独立工作模式                                                       ADC1->CR1&=~(1<<8);    //非扫描模式

5.设置CR2

ADC1->CR2&=~(1<<1);    //单次转换模式     ADC1->CR2&=~(7<<17);            ADC1->CR2|=7<<17;      //软件控制转换       ADC1->CR2&=~(1<<11);   //右对齐

6.设置SQR

ADC1->SQR1&=~(0XF<<20);     ADC1->SQR1|=0<<20;    //L位为0,一个转换

7.设置SMPR

ADC1->SMPR2&=~(7<<3);  //通道1采样时间清空 ADC1->SMPR2|=7<<3;     //通道1 239.5周期

8.开启AD并校准

ADC1->CR2|=1<<0;       //开启AD         ADC1->CR2|=1<<3;       //使能复位校准寄存器     while(ADC1->CR2&1<<3); //等待复位校准寄存器准备好             ADC11->CR2|=1<<2;        //开启AD校准        while(ADC1->CR2&1<<2); //等待校准结束 1 2 3 4 5 获取AD的值 unsigned int adc ADC11->SQR3&=0XFFFFFFE0;
     ADC1->SQR3|=ch; //设置规则序列1为通道ch                  
     ADC1->CR2|=1<<22;       //启动规则转换     while(!(ADC1->SR&1<<1));//等待转换结束     adc = ADC1->DR;

在单次转换模式下:

    启动ADC1,则

      1.开始转换CH0、

      2.转换完成后自动开始转换CH1

      3.转换完成后自动开始转换CH2

      4.转换完成后自动开始转换CH3

      5.转换完成后停止,等待ADC的下一次启动下一次ADC启动后从第一步开始转换

  在连续转换模式下:

    启动ADC1,则

      1.开始转换CH0

      2.转换完成后自动开始转换CH1

      3.转换完成后自动开始转换CH2

      4.转换完成后自动开始转换CH3

      5.转换完成后返回第一步,继续转换


————

开启扫描模式后 必须搭配DMA功能才能实现ADC的数据处理

原文链接:http://blog.csdn.net/kiti1013/article/details/44172161

转载于:https://www.cnblogs.com/zhanghankui/p/5192324.html

————————————


on the way to be a Electrical Engineer & Designer......