STM32中AD转换的校准问题

        今天学习STM32的AD转换,在数据手册中看到这样一句话“启动校准前,ADC必须处于关电状态(ADON=’0’)超过至少两个ADC时钟周期。”,英文原句是这样的“Before starting a calibration, the ADC must have been in power-off state(ADON bit = '0') for at least two ADC clock cycles.”。然而,STM32固件库中给出的例程代码如下所示。

  /* Enable ADC1 */
  ADC_Cmd(ADC1, ENABLE);

  /* Enable ADC1 reset calibration register */   
  ADC_ResetCalibration(ADC1);
  /* Check the end of ADC1 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC1));

  /* Start ADC1 calibration */
  ADC_StartCalibration(ADC1);
  /* Check the end of ADC1 calibration */
  while(ADC_GetCalibrationStatus(ADC1));
     
  /* Start ADC1 Software Conversion */ 
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
        程序中使用ADC_Cmd(ADC1, ENABLE);使能了ADC1,即将ADON位设置为了1,然后复位并启动了校准,这样看来是与手册上相违背的,于是我把上面代码的第一条语句放到了最后一条语句之前,结果运行后程序停在了while(ADC_GetResetCalibrationStatus(ADC1));这条语句不往下执行。折腾了半天,发现我看的数据手册上是错的,官网在2017年9月发布的版本上是这样写的“Before starting a calibration, the ADC must have been in power-on state(ADON='1') for at least two ADC clock cycles.”,即在启动校准之前,ADON必须置位至少两个ADC时钟周期,所以说例程中的写法是正确的。

        上面的问题解决了,那么程序是怎么实现ADON='1'两个ADC时钟周期后启动校准的?通过仿真发现,程序从执行完ADC_Cmd(ADC1, ENABLE);到即将执行ADC_StartCalibra tion(ADC1);中间的时间为5us(芯片为stm32f103,系统时钟为72MHz),若设置ADC时钟为9MHz时,两个ADC时钟周期为2/9us,所以说到启动校准的时候,时间已经远远过了两个ADC时钟周期,所以这个问题的解答也算是隐藏在了程序本身之中了。

  • 14
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
STM32AD转换是指STM32微控制器的模数转换器(ADC)。ADC是一种将模拟信号转换为数字信号的电路。在STM32ADC模块可以将外部模拟信号转换为数字值,以供微控制器进行处理。 在STM32AD转换的基本结构包括ADC模块、输入通道、转换控制、数据寄存器等。ADC模块负责执行AD转换的操作,输入通道用于选择要转换的模拟信号源,转换控制用于配置转换模式和触发方式,数据寄存器用于存储转换后的数字值。 在进行AD转换之前,通常需要进行校准操作。校准可以提高AD转换的准确性。在STM32,可以使用固定的代码来执行校准操作,例如使用ADC_ResetCalibration函数进行校准重置,使用ADC_StartCalibration函数启动校准过程,并使用ADC_GetCalibrationStatus函数来检查校准状态。 在AD转换过程转换后的数据存储在数据寄存器。对于规则组转换,数据存储在ADC_DR寄存器,对于注入组转换,数据存储在JDRx寄存器。如果使用多通道转换,需要注意数据覆盖的问题,可以使用DMA模式将数据传输到内存。 总之,STM32AD转换是通过ADC模块将模拟信号转换为数字信号的过程,包括输入通道选择、转换控制、数据寄存器存储等步骤。校准操作可以提高AD转换的准确性。 #### 引用[.reference_title] - *1* *2* [STM32——ADC模数转换器](https://blog.csdn.net/NRWHF/article/details/128562034)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32基础(11)ADC模数转换](https://blog.csdn.net/qq_37443229/article/details/121465222)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值