STM32中AD转换的校准问题
来源:互联网 发布:淘宝开店要求品牌注册 编辑:程序博客网 时间:2024/05/19 13:22
今天学习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时钟周期,所以这个问题的解答也算是隐藏在了程序本身之中了。
阅读全文
0 0
- STM32中AD转换的校准问题
- 关于STM32中RTC的校准方法
- 关于STM32中RTC的校准方法
- 关于STM32中RTC的校准方法
- STM32中DMA AD
- STM32第十二天AD转换
- STM32的DMA多通道多数据AD转换
- STM32 小于100引脚封装的 AD参考电压问题
- AD转换中参考电压的作用 .
- 7.AD转换—基于CT117E开发板的STM32库函数编程
- STM8S207的AD转换
- AD/DA的转换
- STM 8 AD 转换问题
- PIC AD转换速率控制寄存器的设定问题
- stm32 多通道AD和单通道AD的差别
- 针对stm32 DMA传输AD数据,在完成中断后如何复位的问题的思考
- 针对stm32 DMA传输AD数据,在完成中断后如何复位的问题的思考
- AVR单片机中ATmega8的AD转换探究
- C语言操作符总结
- 了不起的盖茨比——那些年我们没有追到的女神
- [php]windows下的curl异常
- SURF配准差分算法实现
- 14 OF 100DAYS
- STM32中AD转换的校准问题
- nextLine()和next()的区别和使用方法
- Vim初学者记录
- 更精炼更专注的RTMPClient客户端EasyRTMPClient,满足直播、转发、分析等各种需求
- caffe学习笔记:mnist数据集的训练和测试
- Derby数据库使用方法
- mybaits中#{} ${}区别
- HDOJ2105 The Center of Gravity
- 你应该会的一道多线程笔试题