目录

一、ADC

1.1 简介

1.2 工作模式:逐次逼近型ADC

1.3 STM32的ADC框图

​编辑1. 模拟输入通道

2. 模拟多路开关

3. 规则通道与注入通道

4. 模拟至数字转换器

5. AD数据寄存器

6. 中断与标志位

7. 模拟看门狗

8. 触发机制

9. 时钟与电源

10. DMA请求

1.4 ADC基本结构

1.5 输入通道

1.6 转换模式

-->补充:存储器映像

二、DMA

2.1 概念

2.2 主要作用

2.3 DMA框图

​编辑1. DMA控制器

2. AHB从设备

3. 总线矩阵

4. 复位和时钟控制 (RCC)

5. 桥接器 (Bridge)

6. 外设

7. 以太网MAC和USB OTG FS

8. DMA 请求

---工作流程示例

2.4 DMA基本结构图

​编辑使用DMA配置步骤

1.传输计数器

2.自动重装器

3.触发机制

4.M2M模式

5.开关控制

2.5 DMA请求​编辑

2.6 数据宽度与对齐​编辑

2.7 详细工作原理

1. 初始化阶段(CPU参与)

2. DMA请求与总线仲裁

3. 数据传输阶段(DMA控制器主导)

4. 传输结束与中断通知

2.8 应用场景

2.9 注意事项


一、ADC

1.1 简介

ADC(Analog-Digital Converter)模拟-数字转换器

ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁

12位逐次逼近型ADC,1us转换时间输入电压范围:0~3.3V,转换结果范围:0~4095

18个输入通道,可测量16个外部和2个内部信号源

规则组和注入组两个转换单元

模拟看门狗自动监测输入电压范围 STM32F103C8T6 ADC资源:ADC1、ADC2,10个外部输入通道

1.2 工作模式:逐次逼近型ADC

独立的8位逐次逼近型ADC芯片

通过地址锁存和译码编译选择输入通道,并配置ALE锁存 电压比较器逐次逼近算出输入电压的值(二分法) 当SAR完成逐次逼近过程,得到最终的数字结果后,该结果被锁存在8位三态锁存缓冲器中。 EOC信号:当转换完成后,定时和控制电路会发出EOC(End of Conversion)信号,表示转换结束。 读取数据:通过D0至D7这8个数据引脚,可以读取转换后的8位数字结果。OE(Output Enable)信号用于控制这些数据引脚的输出状态。

1.3 STM32的ADC框图

1. 模拟输入通道
  • ADCx_IN0至ADCx_IN15:这些是ADC的模拟输入通道,最多可以有16个规则通道和4个注入通道。

  • 温度传感器:内部温度传感器作为额外的模拟输入源,其输出电压与芯片温度成正比。

  • VREFINT:内部参考电压,用于校准ADC。

2. 模拟多路开关
  • 模拟多路开关:负责选择当前需要进行转换的模拟输入通道。它可以将选定的模拟信号路由到ADC的输入端。

3. 规则通道与注入通道
  • 规则通道:最多支持16个规则通道,按照预设的顺序依次进行转换。

  • 注入通道:最多支持4个注入通道,可以在规则通道转换过程中插入进行转换,通常用于高优先级的测量任务。

4. 模拟至数字转换器
  • 模拟至数字转换器:(AD转换器)核心部分,负责将选中的模拟信号转换为数字信号。

5. AD数据寄存器
  • 规则通道数据寄存器:存储规则通道转换后的16位数字结果。只有1个数字寄存器

  • 注入通道数据寄存器:存储注入通道转换后的16位数字结果。有4个数字寄存器

6. 中断与标志位
  • EOC、JEOC、AWD:分别是转换结束、注入转换结束和模拟看门狗事件的标志位。

  • EOCIE、JEOCIE、AWDIE:对应的中断使能位,当相应的事件发生且使能位被置位时,会产生中断请求。

  • NVIC的ADC中断:最终的中断请求会被发送到NVIC(嵌套向量中断控制器),由它来处理中断服务程序。

7. 模拟看门狗
  • 模拟看门狗:用于监控ADC转换结果是否在设定的阈值范围内。如果转换结果超出阈值范围,则会触发AWD事件。

  • 阈值高限和低限:分别设置12位的阈值上限和下限。

8. 触发机制
  • EXTSEL[2:0]控制位:用于选择外部触发源,包括定时器的TRGO、CHx等信号。

  • EXTTRIG控制位:用于使能外部触发功能。

  • JEXTSEL[2:0]控制位和JEXTTRIG控制位:用于选择和使能注入组的外部触发源。

  • ADCx_ETRGINJ_REMAP和ADCx_ETRGREG_REMAP控制位:用于重映射触发信号。

9. 时钟与电源
  • ADCCLK:来自ADC预分频器的时钟信号,用于驱动ADC的工作。

  • VDDA和VSSA:模拟电源和地,为ADC提供必要的电源。

  • VREF+和VREF-:外部参考电压的正负极,定义了ADC的转换范围。

10. DMA请求
  • DMA请求:当转换完成后,可以通过DMA(直接内存访问)方式将转换结果传输到内存中,提高数据传输效率。

1.4 ADC基本结构

开启RCC时钟——开启GPIO——配置多路开关——ADC初始化——ADC使能——ADC校准

1.5 输入通道

通道 ADC1 ADC2 ADC3
通道0 PA0 PA0 PA0
通道1 PA1 PA1 PA1
通道2 PA2 PA2 PA2
通道3 PA3 PA3 PA3
通道4 PA4 PA4 PF6
通道5 PA5 PA5 PF7
通道6 PA6 PA6 PF8
通道7 PA7 PA7 PF9
通道8 PB0 PB0 PF10
通道9 PB1 PB1
通道10 PC0 PC0 PC0
通道11 PC1 PC1 PC1
通道12 PC2 PC2 PC2
通道13 PC3 PC3 PC3
通道14 PC4 PC4
通道15 PC5 PC5
通道16 温度传感器
通道17 内部参考电压

1.6 转换模式

  • 单次转换,非扫描模式

  • 连续转换,非扫描模式

  • 单次转换,扫描模式

  • 连续转换,扫描模式

    模式 类比场景
    单次 + 非扫描 去厨房看一眼水烧开了没,看一次就回来
    连续 + 非扫描 一直盯着水壶,看它什么时候开
    单次 + 扫描 顺路看一眼厨房、客厅、卧室的灯有没有关,看一遍就完
    连续 + 扫描 每隔几分钟就巡逻一遍所有房间,检查灯、温度、门窗

-->补充:存储器映像

类型 起始地址 存储器 用途
ROM 0x0800 0000 程序存储器Flash 存储C语言编译后的程序代码
0x1FFF F000 系统存储器 存储BootLoader,用于串口下载
0x1FFF F800 选项字节 存储一些独立于程序代码的配置参数
RAM 0x2000 0000 运行内存SRAM 存储运行过程中的临时变量
0x4000 0000 外设寄存器 存储各个外设的配置参数
0xE000 0000 内核外设寄存器 存储内核各个外设的配置参数

二、DMA

2.1 概念

  • 定义:直接存储器访问(Direct Memory Access,简称DMA)是一种允许外围设备和主内存之间直接进行数据交换的技术,无需中央处理器(CPU)的直接干预。

  • 目的:通过减少CPU在数据传输过程中的参与程度,提高系统效率和性能。


2.2 主要作用

  1. 减轻CPU负载

    • 数据传输不再需要CPU执行一系列读写操作指令,由DMA控制器接管,使得CPU可以专注于其他任务处理。

  2. 加速数据传输

    • 通过直接控制内存与外设之间的数据传输,避免了每次数据传输都要经过CPU的过程,从而加快了数据传输速度。

  3. 支持连续的数据传输

    • 对于音频、视频流媒体等需要持续大量数据传输的应用场景,DMA提供有效的解决方案。

  4. 提升系统并发性

    • CPU可以在DMA处理数据传输的同时执行其他程序代码,提高了系统的并行处理能力和整体性能。


2.3 DMA框图

1. DMA控制器
  • 系统中有两个DMA控制器:DMA1和DMA2。

  • 每个DMA控制器包含多个通道(Channel),用于处理不同的DMA请求:

    • DMA1有7个通道(通道1到通道7)。

    • DMA2有5个通道(通道1到通道5)。

  • 每个通道都有一个仲裁器(Arbiter),用于管理多个DMA请求之间的优先级和调度。

2. AHB从设备
  • AHB(Advanced High-performance Bus)是从设备接口,连接到DMA控制器。

  • 这些从设备可以是各种外设或内存模块,如SRAM、Flash等。

3. 总线矩阵
  • 总线矩阵是一个复杂的互连结构,用于协调不同组件之间的数据传输。

  • 它连接了CPU、DMA控制器、外设和其他系统组件,确保数据能够高效地在各个部分之间流动。

4. 复位和时钟控制 (RCC)
  • RCC模块负责系统的复位和时钟管理,确保系统在正确的时钟频率下运行,并能够在需要时进行复位操作。

5. 桥接器 (Bridge)
  • 桥接器(Bridge)用于连接不同类型的总线,例如APB1和APB2。

  • 它们允许低速外设通过高速总线与系统其他部分通信。

6. 外设
  • 图中列出了多种外设,包括ADC(模数转换器)、GPIO(通用输入输出)、USART(通用同步/异步收发传输器)、SPI(串行外设接口)、I2C(内部集成电路总线)等。

  • 这些外设可以通过DMA请求与内存或其他外设进行数据交换。

7. 以太网MAC和USB OTG FS
  • 以太网MAC(介质访问控制)和USB OTG FS(全速On-The-Go USB)是高级通信接口。

  • 它们也通过DMA请求与其他系统组件进行数据传输,支持高速数据通信。

8. DMA 请求
  • 外设和内存模块可以通过发送DMA请求来启动数据传输。

  • DMA控制器接收到请求后,会根据通道配置和仲裁策略来安排数据传输。

---工作流程示例
  1. 外设发起DMA请求:例如,ADC完成一次采样后,向DMA1的某个通道发送DMA请求。

  2. DMA控制器接收请求:DMA1的仲裁器根据优先级选择合适的通道处理请求。

  3. 数据传输:DMA控制器接管总线控制权,将ADC采集的数据直接传输到指定的内存地址(如SRAM)。

  4. 传输完成:DMA控制器完成数据传输后,释放总线控制权,并可能向CPU发送中断信号,通知数据传输已完成。

2.4 DMA基本结构图

使用DMA配置步骤

RCC开启DMA时钟 ——DMA初始化 完成外设和存储器的配置、方向、传输计数器、自动重装器、选择触发源、通道优先级 ——DMA使能 (如果用的是硬件触发,记得对应的外设调用XXX_DMACmd,开启触发信号的输出) (需要DMA的中断,则调用DMA_ITConfig,开启中断输出——NVIC配置中断通道.....)

1.传输计数器
  • 从给定的数据依次递减,完成一个数据的传输就-1,直到为0时意味着数据传输完成,此时之前自增的地址也会回复到起始地址的位置,以便下一轮的数据传输

  • 写传输计数器时,DMA必须关闭才能写

2.自动重装器
  • 传输计数器减到0时,是否需要自动恢复到初值

  • 不重装:单次传输;

  • 重装:循环模式;(这里和ADC的连续模式相似)

3.触发机制
  • 硬件触发:由外设硬件信号触发DMA传输,适用于实时性要求高的场景。-- 多用于外设相关转运

  • 软件触发:通过软件指令启动DMA传输,灵活性高,适用于多种应用场景。 -- 存储器之间的转运 尽力的使传输计数器清零 —— 与循环模式不能共用

4.M2M模式
  • Memory to Memory (M2M):支持存储器到存储器的数据传输。

  • 数据选择控制位:软件触发——>1; 硬件触发——>0;

5.开关控制
  • 作用:通过开关控制,灵活配置DMA的工作模式和参数,满足不同应用需求。

2.5 DMA请求

选择硬件触发时,要注意外设所在的是哪个通道(需要手动选择所要开启的通道),例如选择ADC1只能选择通道1. 软件触发则不需要注意通道的选择

2.6 数据宽度与对齐


总结如下:

输入 输出 规则
8 8、16、32 输入 < 输出 高位补0补齐
16 8、16、32 输入 = 输出 依次传递原数据
32 8、16、32 输入 > 输出 只传输地位的数据,高位舍弃

2.7 详细工作原理

DMA的工作过程可分为以下几个阶段:

1. 初始化阶段(CPU参与)
  • 配置DMA控制器

    • CPU通过I/O指令向DMA控制器写入必要的传输参数,包括:

      • 源地址(Source Address):数据读取的起始内存或设备地址。

      • 目标地址(Destination Address):数据写入的内存或设备地址。

      • 传输数据量(Transfer Count):需要传输的字节数或数据块数量。

      • 传输模式:单次传输(Single Transfer)、块传输(Block Transfer)、请求模式(Demand Mode)或级联模式(Cascade Mode)等。

      • 传输方向:内存到外设、外设到内存、内存到内存(部分系统支持)。

  • 外设准备就绪

    • 外设(如硬盘、网卡)准备好数据或准备好接收数据后,向DMA控制器发出DMA请求(DREQ,DMA Request)。

2. DMA请求与总线仲裁
  • DMA请求

    • 外设通过硬件信号线向DMA控制器发出DREQ信号。

  • 总线请求

    • DMA控制器接收到DREQ后,向CPU发出总线请求(HOLD 或 Bus Request),请求接管系统总线(地址总线、数据总线和控制总线)的控制权。

  • 总线响应

    • CPU在当前总线周期结束后,释放总线控制权,并向DMA控制器发出总线响应(HLDA 或 Bus Grant)信号。

    • 此时,CPU进入保持状态(Hold State),暂停对总线的访问,但仍可执行内部寄存器操作。

3. 数据传输阶段(DMA控制器主导)
  • 地址与控制信号生成

    • DMA控制器获得总线控制权后,开始控制数据传输:

      • 将源地址或目标地址发送到地址总线上。

      • 发出读/写控制信号(如 MEMR#, IOR#, MEMW#, IOW#)。

  • 数据传输方式

    • 单字节传输(Single Transfer):每次传输一个数据单元后释放总线,适合低速设备。

    • 块传输(Block/Burst Transfer):连续传输整个数据块,期间持续占用总线,效率高,但会阻塞CPU较长时间。

    • 周期窃取(Cycle Stealing):DMA控制器在CPU不使用总线的间隙“窃取”总线周期进行传输,实现CPU与DMA的交替使用,平衡性能与响应性。

  • 地址与计数更新

    • 每传输一个数据单元,DMA控制器自动递增/递减地址寄存器,并减少计数器值。

4. 传输结束与中断通知
  • 传输完成判断

    • 当DMA控制器的计数器减为0时,表示传输完成。

  • 释放总线

    • DMA控制器撤销总线请求信号(HOLD),释放总线控制权,CPU恢复对总线的控制。

  • 中断CPU

    • DMA控制器向CPU发出中断请求(IRQ),通知数据传输已完成。

    • CPU响应中断,执行相应的中断服务程序(ISR),进行后续处理(如释放缓冲区、启动下一次传输等)。


2.8 应用场景

  • 大文件拷贝

  • 音频、视频播放或录制

  • 网络数据包的接收与发送

  • 图形图像处理等需要高效数据传输的任务

  • 与ADC功能高度符合,经常一起使用


2.9 注意事项

  • DMA的使用需要考虑硬件兼容性和配置问题,确保DMA通道正确分配且不发生冲突。

  • 使用DMA虽然能显著提高效率,但在某些情况下,如小量数据传输时,可能不如传统CPU直接管理的方式灵活和高效。


以上内容为结合网上资源以及江协up主的学习心得与笔记,内容有误可及时指出,感谢大家的监督与观看,欢迎大家在评论区沟通探讨有关知识。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐