9、STM32 的 ADC 转换器

    

    STM32的ADC转换器是一种12位逐次逼近型的转换器。输入时钟不能超过 14MHz。


l、时钟配置

A、初始化系统时钟

B、使能对应 GPIO 端口时钟、使能 ADC 时钟、使能端口复用时钟。

   ADC时钟不能超过14MHz,因此需要进行ADC时钟分频。

   RCC_ADCCLKConfig(RCC_PCLK2_Div6);

2、GPIO端口初始化

   配置管脚为模拟输入 GPIO_Mode_AIN

3、ADC配置

   定义结构体 ADC_InitTypeDef

   配置工作模式、连续/单次转换、触发条件、数据对齐等参数。

   调用 ADC_Init 函数初始化、如果要使用中断,需要调用 ADC_ITConfig 使能中断。

   如果使用规则组模式、调用 ADC_RegularChannelConfig 函数进行配置、采样通道、采样时间等。

   调用 ADC_Cmd 函数使能 ADC 转换

4、校准

   复位校正寄存器

   ADC_ResetCalibration(ADC1);

   等待复位完成

   while(ADC_GetResetCalibrationStatus(ADC1));

   开始校正

   ADC_StartCalibration(ADC1);

   等待校正完成

   while(ADC_GetCalibrationStatus(ADC1));

5、如果有使用中断的话,清除中断

  ADC_ClearITPendingBit(ADC1,ADC_IT_EOC);

6、启动ADC转换

   ADC_SoftwareStartConvCmd(ADC1,ENABLE);

   

   如果使用的是单次转换模式、则每次需要转换时都需要调用该函数重新启动 ADC 转换。连续转换模式则不需要每次手动去启动。


注意 :一般不建议使用连续转换模式下的中断模式进行 ADC 转换, 因为转换时间太短、中断频繁, 从而导致 

      CPU 无法执行其他的任务,全部消耗在 ADC 转换中断处理上了。如果实在需要连续转换,同时也需要快读

      的获取到 ADC 的值,可以使用 DMA 模式。


配置流程如下 :

   ADC_InitTypeDef ADC_InitStruct;

   /*----------------------------- ADC 配置 ----------------------------*/
   ADC_InitStruct.ADC_Mode               = ADC_Mode_Independent;      /* 独立模式 */
   ADC_InitStruct.ADC_ScanConvMode       = DISABLE; 		      /* 扫描模式为单通道模式 */
   ADC_InitStruct.ADC_ContinuousConvMode = DISABLE; 		      /* 单次转换模式 */
   ADC_InitStruct.ADC_ExternalTrigConv   = ADC_ExternalTrigConv_None; /* 不用外部触发, 软件启动 */
   ADC_InitStruct.ADC_DataAlign          = ADC_DataAlign_Right;       /* 数据右对齐 */
   ADC_InitStruct.ADC_NbrOfChannel       = 1; 		              /* 转换通道个数为 1 */

   /* 完成初始化 */
   ADC_Init(ADC1, &ADC_InitStruct);

   /* 配置规则组, 选择通道 ADC1 的 13, 转换一个通道 */
   ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 1, ADC_SampleTime_239Cycles5);

   /* 使能 ADC1 */
   ADC_Cmd(ADC1, ENABLE);

   /*----------------------------- 校准 ----------------------------*/
   /* 复位校正寄存器 */
   ADC_ResetCalibration(ADC1); 	       

   /* 等待寄存器复位完成 */
   while(ADC_GetResetCalibrationStatus(ADC1)); 

   /* 开始校准 */
   ADC_StartCalibration(ADC1);

   /* 等待校准完成 */
   while(ADC_GetCalibrationStatus(ADC1)); 

   /* 软件启动 ADC */
   ADC_SoftwareStartConvCmd(ADC1, ENABLE);

查询方式代码下载 :STM32 ADC 查询方式

中断方式代码下载 :STM32 ADC 中断方式


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值