ADC_SampleTime

用途:在ADC通道配置(ADC_RegularChannelConfig)需要传输的参数。

含义:指两个采样阶段之间的延迟周期数,该参数会影响ADC在采样过程中的性能和准确性。

选取不同参数的异同:

周期越多 周期越少
采样精度和稳定性
速度和响应时间
抗噪声和抗干扰能力

在实际应用中,选择合适的ADC_SampleTime周期数通常需要根据具体的系统需求进行权衡。如果系统对精度和稳定性要求较高,可以考虑增加延迟周期数;而如果需要更快的响应速度,可以适当减少延迟周期数。

问:为什么是1.5个周期,而在代码中是ADC_SampleTime_1Cycles5

答:ADC_SampleTime_1Cycles5,cycles后面的5表示0.5周期,故改值表示1.5周期而不是一个周期

问:ADC采样周期为1.5周期是不是每1.5周期采样一次的意思?

答:不是,1.5周期的意思是对数据采样的动作持续1.5个周期的意思。以stm32f10x为例,1.5个采样周期还要再加上12.5周期作为数据转换,也就是每一次采样的开始间隔1.5(采样周期)+12.5(转换周期)= 14周期。故当ADC的时钟为14Mhz,采样周期为1.5时,每次采样就需要1us。

不同采样周期对应的总转换时间(以14Mhz晶振为例)

采样周期 总转换时间
1.5 1us
7.5 1.4us
13.5 1.9us
28.5 2.9us
41.5 3.9us
55.5 4.9us
71.5 6us
239.5 18us

规则通道和注入通道

规则通道:用于常规的数据采集,通常用于采集主要的输入信号

注入通道:是一种特殊的输入通道,比规则通道有着更高的优先级

给我的感觉,规则通道就像是main的主程序,注入通道就像是中断程序。

异同点

  • 同:都是ADC的输入通道配置,用于数据采集。
  • 异:
    1. 规则通道用于常规的、定期的数据采集;注入通道用于临时、优先级更高的事件响应采集。
    2. 注入通道的优先级通常高于规则通道,可以在规则通道采集过程中,立刻插入采样操作。
    3. 两者在代码层面上的区别就在于使能的函数名不一样,初始化的结构体是一样的。
    4. 规则通道共用一个数据寄存器(ADC_DR)暂存数据,每个注入通道有独立的数据寄存器(ADC_DRJx)暂存数据

ADC转换流程

单次转换模式的规则通道

  • 转换数据被储存在ADC_DR寄存器中
  • EOC(转换结束)标志位被标志
  • 如果设置了EOCIE,则产生中断

单次转换模式的注入通道

  • 存储特定的ADC_DRJx寄存器中(每一个通道单独分配了一个寄存器)
  • 转换结束的标志位为JEOC
  • 中断标志位为JEOCIE

循环转换模式

循环转换模式则在这一次转换结束后立马启动下一次转换

模拟看门狗

用途:用于保证adc运行的稳定,是一个检测系统

还没看如何使用

DMA请求

用途:因为规则通道共用一个公共的规则通道数据寄存器(ADC_DR),故需要使用DMA来暂存数据,以防止多规则通道转换数据时,ADC_DR寄存器的暂存数据被覆盖掉

好处:

  1. 防止ADC_DR寄存器的数据被覆盖掉
  2. DMA操作无需CPU干预,节省了CPU资源来做其他操作

ADC转换时序

  1. adon给高电平脉冲,ADC上电
  2. 等待tSTAB时间,使ADC稳定
  3. adon给高电平脉冲,ADC开始转换
  4. 等待转换结束后,EOC位被设置,数据存储在对应的数据寄存器中
  5. 软件清除EOC位
  6. 开始下一次ADC转换

ADC的低功耗

见文(还没看):https://www.elecfans.com/d/897318.html

数据对齐

规则通道:

  • 左对齐(右边4位,置0)
  • 右对齐(左边4位,置0)

注入通道:

  • 左对齐(左边第一位SEXT;右边3位,置0)

  • 右对齐(左边四位,SEXT位)

  1. SEXT位是拓展的符号位(怎么用还不知道)
  2. 一般用右对齐吧,两种通道的数据存放都是一样的(除了0和SEXT位)

扫描模式

启用扫描模式则可以按顺序自动对所有的通道进行adc转换(不需要cpu参与)

问:多个规则通道共用一个ADC_DR寄存器,那数据不会出现被覆盖的情况吗?

答:会的,但是可以通过使用DMA请求来避免数据被覆盖的情况,每次EOC后,DMA控制器会把规则通道的转换数据传输到SRAM中,注入通道则还是留在数据通道的暂存寄存器(ADC_JDRx)

校准

流程:

  1. 软件设置ADC_CR2寄存器的CAL位
  2. tCAL时间过后,校准结束,CAL位硬件复位
  3. 校准码被暂存ADC_DR中,然后被用于消除误差

建议:

  1. 每次上电后进行一次校准
  2. 校准前,ADC处于关电状态(ADON=‘0’)超过两个ADC时钟周期

注入通道管理

触发注入:

  1. 触发方式:通过外部触发设置ADC_CR2寄存器的ADON位
  2. 转换流程:在规则通道转换期间,外部触发注入产生,则规则通道转换被复位,进入注入通道序列;注入通道转换完成后,回到刚刚被中断的规则通道继续转换
  3. 注意点:触发事件的间隔必须长于注入序列(防止注入通道没转换完,又产生一次触发注入)
  4. 优点:实时性高(类中断机制)

自动注入:

感觉有种把注入通道当成规则通道来用的感觉,因为没用到注入通道的核心功能中断

  1. 触发方式:设置JAUTO位
  2. 转换流程:规则通道转换完成后,注入通道被自动转换(规则通道和注入通道之间的转换会有1~2个ADC时钟间隔,具体看ADC时钟预分频系数,详见手册)
  3. 注意点:
    • 此模式下禁止外部触发
    • 不能同时使用自动注入和间断模式
  4. 优点:不需要外部触发,使用简单

双ADC模式

双adc模式可以使用两个adc采集有关联的数据(没关联直接用独立模式就行咯)

注意点: 转换配置为外部触发时,一般只设置主adc为外部事件触发,而从adc设置为软件触发

这样的好处是可以的让从adc在需要的时候触发(因为两个adc是有关联的,主adc触发可以联动从adc触发)

同步注入模式 && 同步规则模式

  1. 来自ADC1的外部触发会同时给ADC2提供同步触发
  2. 双通道转换结束,产生中断
  3. 必须等两个ADC的转化都结束了才能进行下一次触发,否则较短序列的ADC转换可能会被重启

快速交叉模式 && 慢速交叉模式

  1. ADC2先启动,ADC1在 7 or 14 个周期后启动
  2. 快速交叉模式需要设置CONT位,慢速交叉模式无需设置CONT位,因为它将连续转换所选择的规则通道
  3. 注意点:
    • 应用程序必须确保使用交叉模式时,不能有注入通道的外部触发产生
    • 交叉模式只适用于规则通道,且通常为单通道

stm32学习之ADC入门的更多相关文章

  1. STM32学习之路入门篇之指令集及cortex——m3的存储系统

    STM32学习之路入门篇之指令集及cortex——m3的存储系统 一.汇编语言基础 一).汇编语言:基本语法 1.汇编指令最典型的书写模式: 标号 操作码        操作数1, 操作数2,... ...

  2. STM32学习笔记(二) 基于STM32-GPIO的流水灯实现

    学会了如何新建一个工程模板,下面就要开始动手实践了.像c/c++中经典的入门代码"hello world"一样,流水灯作为最简单的硬件设备在单片机领域也是入门首推.如果你已经有了一 ...

  3. STM32学习笔记——OLED屏

    STM32学习笔记--OLED屏 OLED屏的特点: 1.  模块有单色和双色可选,单色为纯蓝色,双色为黄蓝双色(本人选用双色): 2.  显示尺寸为0.96寸 3.  分辨率为128*64 4.   ...

  4. STM32学习笔记——点亮LED

    STM32学习笔记——点亮LED 本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本: 先简单的介绍一下stm32的GPIO: stm32的GPIO有多种模式: 1 ...

  5. 从零开始学习jQuery (一) 入门篇

    本系列文章导航 从零开始学习jQuery (一) 入门篇 一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些 ...

  6. stm32学习笔记----双串口同时打开时的printf()问题

    stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...

  7. stm32学习笔记——外部中断的使用

    stm32学习笔记——外部中断的使用 基本概念 stm32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组为一个单位的,同组间的外部中断同一时间只能使用一个.比如说,PA0,PB0 ...

  8. STM32学习内容和计划

    一.STM32学习内容(流程) 1.学习STM32开发流程 ①MDK使用.建立工程.调试等 ②库开发方法 2.学习STM32常用外设开发 ①GPIO ②中断 ③定时器 ④串口 ⑤CAN 3.学习STM ...

  9. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  10. WebSocket学习笔记——无痛入门

    WebSocket学习笔记——无痛入门 标签: websocket 2014-04-09 22:05 4987人阅读 评论(1) 收藏 举报  分类: 物联网学习笔记(37)  版权声明:本文为博主原 ...

随机推荐

  1. socket 地址复用 SO_REUSEADDR

    背景 默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端口(例如888),这时候,别的套接字就无法使用这个端口( 888 ) ref : https://blog.csdn.net/tenn ...

  2. mtr和traceroute的区别,以及为什么traceroute不显示路径mtr却可以显示路径

    最近工作主要都是网络策略的开通和网络测试,在测试的过程当中发现当网络不通时,用traceroute来看路由路径的时候总是无法显示出来,于是就换了个工具-mtr,发现mtr可以正常显示出路由路径,帮助我 ...

  3. CPU的保护模式

    保护模式是为了克服实模式低劣的内存管理方式,物理内存地址不能直接被程序访问,程序内部的地址需要被转化为物理地址后再去访问.实模式CPU运行环境16位,保护模式32位. 寄存器扩展: 由于CPU发展到3 ...

  4. 如何做好一场NPS调研?

    我们在工作中经常遇到的一个词,那就是"产品NPS调研".当部分项目缺少专业的用研人员时,设计师.产品经理则经常会接受上级的要求,投身于NPS调研工作. 笔者也曾在2022年的某天突 ...

  5. SpringBoot实战:Spring Boot接入Security权限认证服务

    引言 Spring Security 是一个功能强大且高度可定制的身份验证和访问控制的框架,提供了完善的认证机制和方法级的授权功能,是一个非常优秀的权限管理框架.其核心是一组过滤器链,不同的功能经由不 ...

  6. 华为matebook 14s笔记本,Chrome浏览器开启硬件加速,屏幕闪屏,黑框,页面屏幕卡死,解决办法

    解决办法使用了 https://zhuanlan.zhihu.com/p/644296061 这个连接下的最后一个折中办法解决! 一.现象 Chrome开启"硬件加速模式"后,在观 ...

  7. java面试一日一题:java内存模型

    问题:请讲下java内存模型? 分析:该问题比较容易和jvm内存区域(java内存结构)这样的问题混淆,其实他们是两个概念,jvm内存区域指的是运行时的几块数据区域,包括堆.方法区.虚拟机栈.本地方法 ...

  8. 记hashmap

    hashmap是map接口的一个实现类,在同步的情况下hashmap的性能是比较好的 hashmap就是一个kv键值对的集合,将数值散列均匀的存储在哈希表中.插入方法为map.put(k,v),读取方 ...

  9. DNS在架构中的使用

    1 介绍 DNS(Domain Name System,域名系统)是一种服务,它是域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP地址数串. ...

  10. 【C】Re02

    一.命令行参数 #include <stdio.h> /** * 运行执行程序的命令携带 一些附加参数,传递给程序执行 * @param argc 命令行参数的个数 * @param ar ...