规则组和注入组简介
在 STM32 的 ADC 模块中,规则组(Regular Group)和 注入组(Injected Group)是两种不同的 ADC 转换模式,分别用于处理不同优先级和触发条件下的 ADC 转换需求。
规则组(Regular Group)
定义
规则组用于 常规的 ADC 转换任务。规则组可以包含多个通道(从通道 0 到 18,具体通道数量取决于 STM32 的型号),并按预先配置的顺序依次完成这些通道的转换。
特点
- 低优先级:
- 相对于注入组,规则组的优先级较低。当注入组被触发时,规则组的转换会被暂停。
- 支持多通道转换:
- 规则组可以按照用户配置的序列(
ADC_SQRx
寄存器)依次完成多个通道的转换。
- 规则组可以按照用户配置的序列(
- 触发方式灵活:
- 规则组支持软件触发(手动启动转换)和硬件触发(例如定时器、外部事件等)。
- 支持连续转换:
- 规则组支持循环模式(Continuous Conversion Mode),可以不断循环采样。
- 数据读取:
- 每次转换结果存储在
ADC_DR
寄存器中,可以通过 EOC(End of Conversion)标志或 DMA 传输读取数据。
- 每次转换结果存储在
规则组的配置
- 选择规则组通道数量:
- 配置规则组序列的通道数量(
L[3:0]
,位于ADC_SQR1
寄存器中)。 L
决定规则组中通道的数量。例如L = 2
表示规则组包含 3 个通道(通道编号从 0 开始计数)。
- 配置规则组序列的通道数量(
- 设置规则组序列:
- 配置每个通道的顺序,使用
ADC_SQR1
、ADC_SQR2
和ADC_SQR3
寄存器。 - 每个通道编号占用 5 位(支持 0 到 18 通道)。
- 配置每个通道的顺序,使用
- 选择触发方式:
- 软件触发:通过设置
ADC_CR
寄存器中的ADSTART
位启动规则组转换。 - 硬件触发:配置
ADC_CFGR
寄存器的触发源(例如定时器或外部事件)。
- 软件触发:通过设置
- 选择采样时间:
- 每个通道的采样时间可以单独配置,使用
ADC_SMPRx
寄存器。
- 每个通道的采样时间可以单独配置,使用
- 启用 DMA(可选):
- 如果规则组是多通道转换,建议使用 DMA 将转换结果传输到内存。
规则组的数据读取
- 每次通道转换完成后,转换结果存储在
ADC_DR
寄存器中。 - 如果是多通道序列,DMA 会自动将每次转换结果存储到内存。
- 在中断模式下,可以通过 EOC(End of Conversion)或 EOS(End of Sequence)中断读取数据。
规则组的应用场景
- 处理周期性或低优先级的 ADC 转换任务。
- 使用定时器或软件触发来采集传感器数据,例如温度传感器、光线传感器等。
- 多通道采集时,通过规则组进行顺序采样并配合 DMA 自动处理数据。
注入组(Injected Group)
定义
注入组是一种 高优先级的 ADC 转换任务,通常用于实时性要求较高的场景。注入组可以包含多个通道,但优先级高于规则组,在触发时可以立即中断规则组的转换。
特点
- 高优先级:
- 相对于规则组,注入组具有更高的优先级。当注入组被触发时,会立即中断规则组的转换。
- 支持多通道转换:
- 注入组同样支持多通道(最多 4 个通道),可以按用户配置的顺序依次采样。
- 独立的触发源:
- 注入组需要单独配置触发源,支持外部触发和软件触发。
- 单独的数据存储:
- 注入组的转换结果存储在独立的
ADC_JDRx
寄存器中。
- 注入组的转换结果存储在独立的
- 无连续模式:
- 注入组只支持单次转换,不支持循环模式(不能像规则组那样自动重复转换)。
注入组的配置
- 选择注入组通道数量:
- 注入组最多支持 4 个通道,配置方式通过
JSQR
寄存器(注入序列寄存器)。
- 注入组最多支持 4 个通道,配置方式通过
- 设置注入组序列:
- 使用
ADC_JSQR
配置注入组的通道顺序和数量。
- 使用
- 选择触发方式:
- 软件触发:通过设置
JADSTART
位启动注入组转换。 - 硬件触发:通过外部事件(如定时器、GPIO 中断)触发。
- 软件触发:通过设置
- 采样时间配置:
- 注入组的采样时间与规则组共享(通过
ADC_SMPRx
配置)。
- 注入组的采样时间与规则组共享(通过
- 启用自动注入(可选):
- 如果需要规则组和注入组同时工作,可以开启自动注入模式(在规则组转换时插入注入组转换)。
注入组的数据读取
- 每个通道的转换结果存储在独立的
ADC_JDRx
寄存器中(x
表示通道序号)。 - 注入组的转换完成后,会触发 JEOC(注入通道转换完成)或 JEOS(注入序列完成)中断。
注入组的应用场景
- 处理实时性要求较高的 ADC 转换任务,例如电机控制中的电流采样。
- 在规则组转换过程中,插入紧急或高优先级的采样任务。
- 需要外部触发的特殊采样任务,例如检测某个信号达到特定阈值时的采样。
规则组和注入组的对比
属性 | 规则组(Regular Group) | 注入组(Injected Group) |
---|---|---|
优先级 | 低 | 高 |
触发方式 | 软件触发或硬件触发 | 软件触发或外部触发 |
转换序列 | 支持多通道(最多 16 个) | 支持多通道(最多 4 个) |
连续模式 | 支持连续转换 | 不支持连续转换 |
转换结果寄存器 | ADC_DR | ADC_JDRx |
中断 | EOC(单次完成),EOS(序列完成) | JEOC(单次完成),JEOS(序列完成) |
采样时间配置 | 独立配置每个通道 | 与规则组共享 |
主要应用场景 | 常规采样任务,如传感器数据采集 | 实时性强的任务,如电机电流采样 |
规则组与注入组的结合使用
在某些复杂的场景中,可以将规则组和注入组结合使用:
- 规则组:处理周期性或低优先级任务,采集传感器数据。
- 注入组:处理紧急或高优先级任务,例如外部触发的信号采集。
结合使用时,注入组可以在规则组转换过程中被触发,并插入转换任务。转换完成后,规则组会继续执行未完成的转换。
总结
- 规则组 是常规任务的首选,适合需要多通道连续转换或定期采样的场景。
- 注入组 是高优先级任务的首选,适合实时性要求高、需要外部事件触发的采样任务。
- 它们各自独立又可以协同工作,通过合理配置,可以满足复杂应用中的各种 ADC 转换需求。
如有侵权,联系删除