目录
在 STM32 微控制器中,ADC(模数转换器)相关的寄存器用于配置、控制和读取 ADC 的功能。以下是 ADC 的主要寄存器及其功能说明:
[8] AWD2 和 [9] AWD3 - 模拟看门狗 2 和 3 标志
在 STM32 微控制器中,ADC(模数转换器)相关的寄存器用于配置、控制和读取 ADC 的功能。以下是 ADC 的主要寄存器及其功能说明:
目录
在 STM32 微控制器中,ADC(模数转换器)相关的寄存器用于配置、控制和读取 ADC 的功能。以下是 ADC 的主要寄存器及其功能说明:
[8] AWD2 和 [9] AWD3 - 模拟看门狗 2 和 3 标志
ADC_ISR 控制寄存器
ADC_ISR寄存器结构
ADC_ISR 是一个 32 位的寄存器,但实际上只使用了前 10 位,具体结构如下:
位
|
名称
|
功能描述
|
[0]
|
ADRDY
|
ADC 准备就绪标志(ADC Ready)
|
[1]
|
EOSMP
|
采样阶段完成标志(End of Sampling Phase)
|
[2]
|
EOC
|
当前通道转换完成标志(End of Conversion)
|
[3]
|
EOS
|
规则组序列完成标志(End of Sequence)
|
[4]
|
OVR
|
数据覆盖标志(Overrun)
|
[5]
|
JEOC
|
注入组通道转换完成标志(Injected End of Conversion)
|
[6]
|
JEOS
|
注入组序列完成标志(Injected End of Sequence)
|
[7]
|
AWD1
|
模拟看门狗 1 事件标志(Analog Watchdog 1)
|
[8]
|
AWD2
|
模拟看门狗 2 事件标志(Analog Watchdog 2)
|
[9]
|
AWD3
|
模拟看门狗 3 事件标志(Analog Watchdog 3)
|
[10-31]
|
保留
|
未使用,默认为 0。
|

注意:JEOS和JEOC目前只支持F3 F4 H7系列,图中为g0系列,故没有
[0] ADRDY - ADC 准备就绪标志
- 功能:
- 指示 ADC 是否已准备好进入工作状态。
- 当 ADC 启用(ADEN 位设为 1)后,硬件会完成内部初始化,然后置位此标志。
- 触发条件:
- 当 ADC_CR 中的 ADEN 位被置 1 且 ADC 完成初始化后,硬件置位此标志。
- 清除方法:
- 软件写 1 清除(ADC_ISR |= (1U << 0))。
- 用途:
- 确保 ADC 准备好后才启动转换。
- 初始化过程中通常检查此标志。
- 示例:
//写法一
ADC1->CR |= ADC_ISR_ADRDY_Msk; // 启用 ADC
while (!(ADC1->ISR & ADC_ISR_ADRDY_Msk); // 等待 ADRDY 标志
ADC1->ISR |= ADC_ISR_ADRDY_Msk; // 清除 ADRDY 标志
//写法二
ADC1->CR |= (1U << 0); // 启用 ADC
while (!(ADC1->ISR & (1U << 0))); // 等待 ADRDY 标志
ADC1->ISR |= (1U << 0); // 清除 ADRDY 标志
[1] EOSMP - 采样阶段完成标志
- 功能:
- 表示采样阶段结束,ADC 已完成信号采样,准备开始转换。
- 触发条件:
- ADC 的采样阶段完成后,硬件置位此标志。
- 清除方法:
- 软件写 1 清除(ADC_ISR |= (1U << 1))。
- 用途:
- 用于监控采样时间,尤其在需要手动调整采样时(例如设置较长采样时间)。
- 可用于在采样完成后执行特殊处理。
- 示例:
//写法一
if (ADC1->ISR & ADC_ISR_EOSMP_Msk) {
ADC1->ISR |= ADC_ISR_EOSMP_Msk; // 清除 EOSMP 标志
}
//写法二
if (ADC1->ISR & (1U << 1)) {
ADC1->ISR |= (1U << 1); // 清除 EOSMP 标志
}
[2] EOC - 当前通道转换完成标志(单通道)
- 功能:
- 表示当前通道的转换已完成,转换结果可在 ADC_DR 中读取。
- 触发条件:
- 每次完成一个通道的转换时,硬件置位此标志。
- 清除方法:
- 软件写 1 清除(ADC_ISR |= (1U << 2))。
- 用途:
- 用于单通道转换的完成监控。
- 多通道规则组中,用于逐一处理每个通道的转换结果。
- 示例:
//写法一
if (ADC1->ISR & ADC_ISR_EOC_Msk) {
ADC1->ISR |= ADC_ISR_EOC_Msk; // 清除 EOC 标志
}
//写法二
if (ADC1->ISR & (1U << 2)) {
ADC1->ISR |= (1U << 2); // 清除 EOC 标志
}
[3] EOS - 规则组序列完成标志(多通道)
- 功能:
- 表示规则组中所有通道的转换均已完成。
- 触发条件:
- 在规则组的最后一个通道转换完成时,硬件置位此标志。
- 清除方法:
- 软件写 1 清除(ADC_ISR |= (1U << 3))。
- 用途:
- 用于规则组多通道转换的整体完成监控。
- 一般与 DMA 配合使用,确认所有通道的数据已转换完成。
- 示例:
//写法一
if (ADC1->ISR & ADC_ISR_EOS_Msk) {
ADC1->ISR |= ADC_ISR_EOS_Msk; // 清除 EOS 标志
}
//写法二
if (ADC1->ISR & (1U << 3)) {
ADC1->ISR |= (1U << 3); // 清除 EOS 标志
}
[4] OVR - 数据覆盖标志
- 功能:
- 表示 ADC 数据寄存器(ADC_DR)中的数据未被读取时,新数据覆盖了旧数据。
- 触发条件:
- 当新转换结果覆盖未读取的旧结果时,硬件置位此标志。
- 清除方法:
- 软件写 1 清除(ADC_ISR |= (1U << 4))。
- 用途:
- 检测数据读取是否及时,尤其在使用非 DMA 模式时。
- 配合 DMA 时,可能需要禁用数据覆盖以避免数据丢失。
- 示例:
//写法一
if (ADC1->ISR & ADC_ISR_OVR_Msk) {
ADC1->ISR |= ADC_ISR_OVR_Msk; // 清除 OVR 标志
}
//写法二
if (ADC1->ISR & (1U << 4)) {
ADC1->ISR |= (1U << 4); // 清除 OVR 标志
}
[5] JEOC - 注入组通道转换完成标志
- 功能:
- 表示注入组中的当前通道转换完成。
- 触发条件:
- 每当注入组的一个通道完成转换时,硬件置位此标志。
- 清除方法:
- 软件写 1 清除(ADC_ISR |= (1U << 5))。
- 用途:
- 用于注入组的逐通道数据监控。
- 示例:
if (ADC1->ISR & (1U << 5)) {
ADC1->ISR |= (1U << 5); // 清除 JEOC 标志
}
[6] JEOS - 注入组序列完成标志
- 功能:
- 表示注入组中的所有通道转换均已完成。
- 触发条件:
- 在注入组的最后一个通道转换完成时,硬件置位此标志。
- 清除方法:
- 软件写 1 清除(ADC_ISR |= (1U << 6))。
- 用途:
- 用于注入组多通道转换的整体完成监控。
- 示例:
if (ADC1->ISR & (1U << 6)) {
ADC1->ISR |= (1U << 6); // 清除 JEOS 标志
}
[7] AWD1 - 模拟看门狗 1 标志
- 功能:
- 表示规则组或注入组的某个通道电压超出了模拟看门狗 1 的阈值。STM32设置 AWD1 阈值的步骤-优快云博客
- 触发条件:
- 当 ADC 转换结果超出设置的上下限时,硬件置位此标志。
- 清除方法:
- 软件写 1 清除(ADC_ISR |= (1U << 7))。
- 用途:
- 监测 ADC 信号电压是否超出安全范围。
- 示例:
//写法一
if (ADC1->ISR & ADC_IER_AWD1IE_Msk) {
ADC1->ISR |= ADC_IER_AWD1IE_Msk; // 清除 AWD1 标志
}
//写法二
if (ADC1->ISR & (1U << 7)) {
ADC1->ISR |= (1U << 7); // 清除 AWD1 标志
}
[8] AWD2 和 [9] AWD3 - 模拟看门狗 2 和 3 标志
- 功能:
- 分别表示规则组或注入组的某个通道电压超出了模拟看门狗 2 或 3 的阈值。
- 触发条件:
- 当 ADC 转换结果超出设置的上下限时,硬件置位这些标志。
- 清除方法:
- 软件写 1 清除(ADC_ISR |= (1U << 8) 和 ADC_ISR |= (1U << 9))。
- 用途:
- 监测多个不同范围的信号(例如多通道信号的不同安全范围)。
- 示例:
if (ADC1->ISR & (1U << 8)) {
ADC1->ISR |= (1U << 8); // 清除 AWD2 标志
}
if (ADC1->ISR & (1U << 9)) {
ADC1->ISR |= (1U << 9); // 清除 AWD3 标志
}
总结
标志位
|
描述
|
触发条件
|
清除方法
|
ADRDY
|
ADC 准备就绪
|
ADC 完成初始化
|
软件写 1 清除
|
EOSMP
|
采样阶段完成
|
采样阶段结束
|
软件写 1 清除
|
EOC
|
当前通道转换完成
|
当前通道转换完成
|
软件写 1 清除
|
EOS
|
规则组序列完成
|
规则组最后一个通道转换完成
|
软件写 1 清除
|
OVR
|
数据覆盖
|
新数据覆盖未读取数据
|
软件写 1 清除
|
JEOC
|
注入组通道转换完成
|
注入组当前通道转换完成
|
软件写 1 清除
|
JEOS
|
注入组序列完成
|
注入组所有通道转换完成
|
软件写 1 清除
|
AWD1
|
模拟看门狗 1 超限
|
转换结果超出看门狗 1 范围
|
软件写 1 清除
|
AWD2/3
|
模拟看门狗 2 和 3 超限
|
转换结果超出看门狗 2 或 3 范围
|
软件写 1 清除
|
通过使用 ADC_ISR 的每一位,可以对 ADC 的运行状态和事件进行精确监控,满足单通道和多通道的各种应用需求。