当前位置: 首页 > news >正文

【STM32外设】ADC

在这里插入图片描述
声明:上图是STM32产品型号各字段含义,本文基于STM32F103

1、ADC的一些概念

常规通道(常规组)和注入通道(注入组)(regular channels and injected channels)
ADC支持的外部通道总共16个(且被3个ADC共享,ADC123),每个通道只能三种状态取其一:作为常规通道(最多能定义16个)、作为注入通道(最多能定义4个)、未配置。
划进常规组的通道即为最普通、最常用的通道,所有通道都是按程序员指定的顺序依次转换,不争不抢。
划进注入组的通道,优先级高,一旦触发,可以打断常规组中正在执行的A/D转换,并保存常规组的上下文,待注入组都转换完了,再切回常规组执行(可以按中断理解)。

独立模式和并行模式(Independent mode and Dual mode)
独立模式是指各个ADC独立运行,不与其他ADC的运行耦合。当然,一个ADC也可以整出很多模式。
并行模式是指两个ADC协作运行,STM32特指ADC1和ADC2协作运行,这又可以产生很多协作方式,当然,也产生了很多模式。

独立模式
单次转换模式(0)、扫描运行模式、扫描+连续运行模式、间断运行模式。
连续转换模式(1)。

注:单次转换模式和连续运行模式的使能共用一个Bit。0表示单次转换模式,1表示连续转换模式。

并行模式
常规并行模式、常规快速交叉模式、常规慢速交叉模式。

综上所述,独立模式中的单次转换模式最为普通,构建起来最为简单。

2、ADC 寄存器

ADC->SR:ADC status register,开发ADC必用的一个寄存器。
Address offset: 0x00  Reset value: 0x0000 0000在这里插入图片描述
rc_w0含义:Software can read as well as clear this bit by writing 0. Writing ‘1’ has no effect on the bit value.

  • Bit4 STRT:Regular channel Start flag,当规则通道开始转换时由硬件置位,由软件复位。用于查询。
    0:无规则通道启动转换  1:有规则通道启动转换
  • Bit1 EOC:End of conversion,一个或一组通道转换完成时由硬件置位,由软件复位或通过读ADC->DR寄存器复位。用于查询。
    0:转换未完成  1:转换已完成

ADC->CR1:ADC control register 1,开发ADC必用的一个寄存器。
Address offset: 0x04  Reset value: 0x0000 0000在这里插入图片描述

  • Bits19:16 DUALMOD[3:0]:Dual mode selection,全零就是独立模式。由软件设置。
    0000: Independent mode.
    0001: Combined regular simultaneous + injected simultaneous mode
    0010: Combined regular simultaneous + alternate trigger mode
    0011: Combined injected simultaneous + fast interleaved mode
    0100: Combined injected simultaneous + slow Interleaved mode
    0101: Injected simultaneous mode only
    0110: Regular simultaneous mode only
    0111: Fast interleaved mode only
    1000: Slow interleaved mode only
    1001: Alternate trigger mode only

ADC->CR2:ADC control register 2,开发ADC必用的一个寄存器。
Address offset: 0x08  Reset value: 0x0000 0000 在这里插入图片描述

  • Bit22 SWSTART:Start conversion of regular channels,软件触发通道转换,由软件置位,转换开始后由硬件复位。
    0:复位值  1:启动常规通道转换

  • Bit20 EXTTRIG:External trigger conversion mode for regular channels,外部事件触发常规通道开启转换的使能位,
    由软件设置。0:禁止外部事件触发转换  1:允许外部事件对转换的触发。

  • Bits19:17 EXTSEL[2:0]:External event select for regular group,选择外部事件,由软件设置。
    以下仅给出ADC12的,ADC3不同但未给出,
    000: Timer 1 CC1 event
    001: Timer 1 CC2 event
    010: Timer 1 CC3 event
    011: Timer 2 CC2 event
    100: Timer 3 TRGO event
    101: Timer 4 CC4 event
    110: EXTI line 11/TIM8_TRGO event (TIM8_TRGO is available only in high-density and XLdensity devices)
    111: SWSTART(software start,由软件触发,即置位Bit22)

  • Bit11 ALIGN:Data alignment,由软件设置。
    0:12位数据右对齐  1:12位数据左对齐

  • Bit 1 CONT:Continuous conversion,连续转换或单次转换模式选择位,由软件设置。
    0:开启单次转换模式  1:开启连续转换模式

ADC->SMPR1: ADC sample time register 1,设置每个通道的采样时间,共18个通道,每通道3bit,因此使用了两个寄存器。
Address offset: 0x0C  Reset value: 0x0000 0000 在这里插入图片描述

  • 注:ADC1 ch17接内部温度传感器、ch16接内部VREFINT
    ADC2 ch17 ch16都接内部VSS
    ADC3 ch17 ch16 ch15 ch14都接VSS

ADC->SMPR2: ADC sample time register 1,开发ADC必用的寄存器。
Address offset: 0x10  Reset value: 0x0000 0000 在这里插入图片描述

  • Bits29:0 SMPx[2:0]: Channel x Sample time selection,由软件设置。
    000: 1.5 cycles
    001: 7.5 cycles
    010: 13.5 cycles
    011: 28.5 cycles
    100: 41.5 cycles
    101: 55.5 cycles
    110: 71.5 cycles
    111: 239.5 cycles
  • 注:ADC3 ch9接到了VSS

ADC->JOFRx(x=1…4):ADC injected channel data offset register x,用不到,暂不作说明。
Address offset: 0x14-0x20  Reset value: 0x0000 0000

ADC->HTR:ADC watchdog High Threshold register,用不到,暂不作说明。
Address offset: 0x24  Reset value: 0x0000 0FFF
ADC->LTR:ADC watchdog low threshold register,用不到,暂不作说明。
Address offset: 0x28  Reset value: 0x0000 0000

ADC->SQR1:ADC regular sequence register 1,用于扫描模式下确认先后顺序,用不到,暂不作说明。
Address offset: 0x2C  Reset value: 0x0000 0000
ADC->SQR2:ADC regular sequence register 2,每通道占5bit,因此用3个寄存器。
Address offset: 0x30  Reset value: 0x0000 0000
ADC->SQR3:ADC regular sequence register 3,
Address offset: 0x34  Reset value: 0x0000 0000

ADC->JSQR:ADC injected sequence register,注入通道在扫描模式下也要有先后顺序。用不到,暂不作说明。
Address offset: 0x38  Reset value: 0x0000 0000

ADC->JDRx(x=1…4):ADC injected data register x,划进注入组的每个通道独享数据寄存器。用不到,暂不作说明。
Address offset: 0x3C - 0x48  Reset value: 0x0000 0000

ADC->DR:ADC regular data register,常规通道共享一个数据寄存器,开发ADC必用的一个寄存器。
Address offset: 0x4C  Reset value: 0x0000 0000在这里插入图片描述

  • Bits31:16 ADC2DATA[15:0]:ADC2 data
    In ADC1:在并行模式下,存放ADC2的数据
  • Bits15:0 DATA[15:0]:Regular data,只读,

右对齐(ADC->CR2:ALIGN = 0):
在这里插入图片描述
左对齐(ADC->CR2:ALIGN = 1): 在这里插入图片描述

3、ADC 独立模式 常规通道 单次转换 配置步骤

  1. 设置ADC->CR1寄存器,Bit19:16(DUALMOD[3:0])为 0000,确保ADC处于独立模式;
    其他位保持复位值。
  2. ADC->CR2的 Bit20(EXTTRIG)写1,以允许外部事件触发转换;
    再设置ADC->CR2的 Bit19:17(EXTSEL[2:0])为111,选定触发事件为软件触发(即稍后通过向ADC->CR2的 Bit22(SWSTART)写1触发);
    ADC->CR2的 Bit11 (ALIGN)写0,以设置12位采样数据的对齐方式为右对齐;
    最后向ADC->CR2的 Bit 1 (CONT)写0,以开启单次转换模式。
    其他位保持复位值。
  3. 向ADC->SMPR2的 Bits5:3(SMP1[2:0])写 111,以设置通道1的采样时间为239.5 个周期。
    其他位保持复位值。
  4. ADC->CR2的 Bit22(SWSTART)写1触发通道1的单次转换。
  5. 阻塞式查询ADC->SR的 Bit1(EOC)是否为1,为1则表明转换完成。
  6. 读取(uint16_t)ADC->DR寄存器。
  7. 重复 3~6
http://www.dtcms.com/a/357197.html

相关文章:

  • OSS Nginx 反代提示 SignatureDoesNotMatch
  • 网络_协议
  • (十)ps识别:Swin Transformer-T 与 ResNet50 结合的 PS 痕迹识别模型训练过程解析
  • 链表有环找入口节点原理
  • Vue3 + TS + MapboxGL.js 三维地图开发项目
  • Marin说PCB之POC电路layout设计仿真案例---11
  • Jenkins Pipeline(二)-设置Docker Agent
  • 渲染速度由什么决定?四大关键因素深度解析
  • 【拍摄学习记录】07-影调、直方图量化、向右向左
  • Docker部署openai-edge-tts和即梦API以及应用案例
  • 透视文件IO:从C库函数的‘表象’到系统调用的‘本质’
  • 12、做中学 | 初一上期 Golang函数 包 异常
  • electron-vite 配合python
  • AI驱动万物智联:IOTE 2025深圳展呈现无线通信×智能传感×AI主控技术融合
  • 软件系统的部署方式:单机、主备(冷主备、热主备)、集群
  • LeetCode100-54螺旋矩阵
  • Verilog 硬件描述语言自学——重温数电之组合逻辑电路
  • 高性能 JSON:System.Text.Json Source Generator vs 手写 Span(Utf8JsonReader/Writer)
  • 并发编程——06 JUC并发同步工具类的应用实战
  • 如何高效批量完成修改文件名的工作?
  • NullPointerException 空指针异常,为什么老是遇到?
  • 嵌入式Ubuntu22.04安装过程详解实现
  • Oracle SQL性能调优之魂:深入理解索引原理与优化实践
  • 智能接听,破局高峰占线:云蝠AI客服重塑企业服务新范式
  • 【Spring底层分析】Spring AOP补充以及@Transactional注解的底层原理分析
  • 球型摄像机实现360°无死角
  • 【前端教程】从基础到专业:诗哩诗哩网HTML视频页面重构解析
  • 技术干货|Prometheus告警及告警规则
  • APM32芯得 EP.31 | APM32F402 HC-SR04超声测距经典操作:波形输出与滤波
  • 微算法科技(NASDAQ:MLGO)一种基于FPGA的Grover搜索优化算法技术引领量子计算