前几天发过一篇帖子,叫:关于STM32 ADC自校准的个人理解文章大体说的是自校准前要先将ADON位置1,之后再校准。

本以为彻底的了解了自校准的过程,但是昨天晚上无意间看到了一个函数说明,不禁愁云又起,

<ignore_js_op> 
按照这个说明,使用这个自校准函数前应当使ADC处于掉电状态下,但是这样似乎就与英文的参考手册矛盾了。经过探查,方才知道ST的参考手册叙述文笔和结构编排是TM有多烂!

依据手册介绍,我将STM32的ADC分为三种状态:掉电状态、上电状态、工作状态。

当芯片启动运行时,ADC处于掉电状态。当第一次将ADON位设定为1时,ADC从掉电状态进入上电状态,也就是手册里说的“从掉电状态下唤醒”,这时ADON位已经为1。当我们再次设定ADON位等于1时,这时ADC会按照此时的ADC_CR1、ADC_CR2等寄存器的设置开始转换工作,也就进入了工作状态。这也就是下图红框中话的含义。
<ignore_js_op>

接下来再分析HAL_ADCEx_Calibration_Start这个函数,通过一层一层查找,方知这个函数之所以要放在HAL_ADC_Start()之前或HAL_ADC_Stop()之后是因为这个函数本身就会执行将ADON置1这么一条语句。

也就是,执行自校准时ADC必须处于前面所说的上电状态,如果ADC在工作状态下——正在转换或者进行过转换——则要将ADON位清零,使ADC关闭进入掉电状态下,之后再将ADON置1,进入上电状态,之后再校准,再之后该注入组的注入该规则组的SCAN。也就是函数的使用说明和英文版的参考手册并不矛盾,而是TMD ST根本就没把这个说清楚!

接下来在顺便说一下为什么当ADON=1时再次设定置ADON位为1会进入工作状态(知道的就不必往下看了)

原因就是这句话
<ignore_js_op> 
看过正点原子教程的应该都有这个印象,在ADC转换实验中原子将ADC_CR2的EXTSEL位设定为111,将EXTTRIG位设定为1,之后通过SWSTART位置1的方式来启动转换。其实根本不用这么复杂,只需要将ADON再置1就可以启动转换,无论这个转换是单个通道还是还是通道组,效果与软件触发方式完全一样。

接下来再说说规则组的连续转换。
昨天晚上一直在尝试这个,想在中断中读取多个通道的值,一直不成功,只能得到最后一个被转换通道的值,现在才发现,又TM被ST的参考手册坑!了!

关于连续转换模式,手册里是这么说的,
<ignore_js_op> 
一个规则通道被转换完毕后EOC会被置位同时进入中断。

但是,在ADC中断章节又是这么说的,
<ignore_js_op> 
一个通道组转换完毕后才进入中断,而非单个通道。这也就是说,当规则组采用中断方式时ADC_DR里必定放置的是最后被转换的那个通道的值。那么是不是上面那个连续转换模式的说明写错了。又前后翻了手册n遍发现不是。
<ignore_js_op> 
其实这里的单次转换模式和连续转换模式讲的都是针对1个通道的,而规则组多通道的转换在手册里其实是叫扫描模式(还有另外一个间断模式),然后扫描模式里再按照CONT位的不同分为单次转换模式和连续转换模式。
也就是,文档里的目录层次结构如果是这样会更利于阅读和理解。
<ignore_js_op> 
而不是像摊大饼一样全部放在同一级目录里。

现在我也才明白,为什么AN3116文档中那么强烈的建议规则通道组连续转换要使用DMA方式,因为用中断就是白瞎啊!!!!
另外,中文参考手册里关于扫描模式使用DMA的传输时间写错了
<ignore_js_op> 
正确的应该是
<ignore_js_op> 
只要ADC_DR更新就会进行传递。而ADC_DR会在每个通道转换完后就更新。同时,这里也明确指出,使用扫描模式必须使用DMA。

有句话叫:一流的翻译能把二流的文章翻译成一流的作品,二流的翻译能把一流的作品翻译成二流的文章,二流的文章如果碰到二流的翻译,只能成为三流的shit。在我看来ST属于最后这一种,尤其是 be set翻译成被设置,简直是梗到家了。

之前看着数据手册自学AVR时顺风顺水,错误和编排不当非常少,虽说STM32相比之下更复杂、产品线更长、页数更多但是参考手册里这么多明显的叙述错误和槽糕的层次结构就我这个门外汉也能看出来啊,这么多错误和含混不清简直就是残害生命、初学者的噩梦啊,撞墙的心都有了。那STM8和STVD更是一块烂豆腐,第一次见ERRATA能写那么长的。现在看ST的参考手册无论中英文都有一种哈利波特找魂器的感觉,要上下来回翻阅n次,然后将关联点组织在一起,之后再去进行逻辑分析判断正误,太累心了!!!ST为中国市场砸这么多钱就不能好好写写自己的文档吗,重新编排一下能费几个钱。中文版的文档5年都没改过了,翻译都死光了吗。各位前辈都是怎么过来的?难道因为一直在用函数库没关注过底层这些?

最后分享一个AN3116文档中提到的范例包,里面有SCAN模式DMA传输的范例。结合关于STM32 ADC自校准的个人理解中的AN3116文档一起使用“更有利于钙质吸收”。

此帖出自stm32/stm8论坛

STM32 的ADC 模式及其应用 范例.zip

2.56 MB, 下载次数: 82

关于STM32 ADC自校准的个人理解的更多相关文章

  1. STM32 ADC多通道转换DMA模式与非DMA模式两种方法(HAL库)

    一.非DMA模式(转) 说明:这个是自己刚做的时候百度出来的,不是我自己做出来的,因为感觉有用就保存下来做学习用,原文链接:https://blog.csdn.net/qq_24815615/arti ...

  2. STM32 ADC多通道规则采样和注入采样

    layout: post tags: [STM32] comments: true 文章目录 layout: post tags: [STM32] comments: true 什么是ADC? STM ...

  3. STM32—ADC多通道采集电压

    文章目录 ADC详解 程序说明 函数主体 引脚配置 ADC和DMA配置 主函数 ADC详解 前面的博客中详细介绍了STM32中ADC的相关信息,这篇博客是对ADC内容的一个总结提升,ADC的详细介绍: ...

  4. STM32 ADC 采样 频率的确定

    一 STM32 ADC 采样频率的确定 1.       : 先看一些资料,确定一下ADC 的时钟: (1),由时钟控制器提供的ADCCLK 时钟和PCLK2(APB2 时钟)同步.CLK 控制器为A ...

  5. Stm32 ADC学习

    stm32 ADC 简介 stm32的ADC是 12位逐次逼近型 模拟数字转换器;它包括18个通道,可以用来测量16个外部通道和2个内部通道.ADC转换的结果存放在16位数据寄存器(ADC规则数据寄存 ...

  6. stm32 ADC模数转换 ADC多通道 ADC DMA

    通过调节电位器,改变AD转换值和电压值 STM32F1 ADC 配置步骤 1.使能GPIO时钟和ADC时钟 2.配置引脚模式为模拟输入 3.配置ADC的分频因子 4.初始化ADC参数,ADC_Init ...

  7. STM32—ADC详解

    文章目录 一.ADC简介 二.ADC功能框图讲解 1.电压输入范围 2.输入通道 3.转换顺序 4.触发源 5.转换时间 6.数据寄存器 7.中断 8.电压转换 三.初始化结构体 四.单通道电压采集 ...

  8. STM32 ADC 测电压

    1. STM32F103 ADC 本例使用STM32F103芯片的PA1引脚测试模拟输入的电压值. 查看文档<STM32F103X.pdf>第31页,引脚定义图: 得知PA1使用ADC1的 ...

  9. stm32 ADC配置

    STM32 的 ADC 是 12 位逐次逼近型的模拟数字转换器,它有 18 个通道,可测量 16 个外部和 2 个内部信号源 各通道的 A/D 转换可以单次.连续.扫描或间断模式执行. ADC 的结果 ...

随机推荐

  1. django面试题必知

    Django的Model的继承有几种形式,分别是什么?(私信小编001 .002 .003 .007任何一个即可获取Python学习资料) 一.抽象继承: 这种继承的定义方法如下: 上例中,我们的Hu ...

  2. js第一天学习内容

    var a=12: var t=(- -a)-(a- -)+(a++)-(a++) console.log(a) t=-1: a=12: (- -a)=11-(a=11- -)=10+(a=10++) ...

  3. ubuntu 安装 mysql 的正确姿势

    1.下载官方提供的mysql-apt-config.deb包进行APT源设置,下载地址:https://dev.mysql.com/downloads/repo/apt/ 2. // 将 mysql- ...

  4. HDU 6098 17多校6 Inversion(思维+优化)

    Problem Description Give an array A, the index starts from 1.Now we want to know Bi=maxi∤jAj , i≥2. ...

  5. JS之鼠标改变img

    代码用途: 通过点击图片,来改变图片内容 代码: <!DOCTYPE html> <html> <body> <script> function cha ...

  6. [转] [Elasticsearch] 数据建模 - 处理关联关系(1)

    [Elasticsearch] 数据建模 - 处理关联关系(1) 标签: 建模elasticsearch搜索搜索引擎 2015-08-16 23:55 6958人阅读 评论(0) 收藏 举报 分类: ...

  7. python基于并发与socket实现远程文件传输程序

    FTP程序 Client: * bin/start.py 程序入口 * conf/配置文件存放 * core/ * auth.py 登陆,注册以及上传下载查看当前文件夹下文件以及删除功能存放 * cl ...

  8. JavaBasic_10

    JVM中的对一个对象的所有初始化动作,是javac在字节码文件中帮我们生成的 1.成员变量的显式初始化 2.初始化代码块(构造代码块) 3.构造方法 初始化静态的东西 在Java中,一个没有方法体的方 ...

  9. 九度OJ-1131-合唱排队-双向递增子序列

    题目1131:合唱队形 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4948 解决:1570 题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交 ...

  10. fckeditor配置

    <!DOCTYPE html> <html > <head> <title>发布</title> <meta name="v ...