STM32学习笔记14——ADC part2

来源:互联网 发布:java五角星代码 编辑:程序博客网 时间:2024/05/16 17:31

多重 ADC 模式
在具有两个或更多 ADC 的器件中,可使用双重(具有两个 ADC)和三重(具有三个 ADC) ADC 模式(参见图 41)。
在多重 ADC 模式下,通过 ADC1 主器件到 ADC2 和 ADC3 从器件的交替触发或同时触发来 启动转换,具体取决于 ADC_CCR 寄存器中的 MULTI[4:0] 位所选的模式。
注意:在多重 ADC 模式下,配置外部事件触发转换时,应用必须设置为仅主器件触发而禁止从器件 触发,以防止出现意外触发而启动不需要的从转换。
可实现以下四种模式:
● 注入同时模式
● 规则同时模式
● 交替模式
● 交替触发模式
也可按以下方式组合使用上述模式:
● 注入同时模式 + 规则同时模式
● 规则同时模式 + 交替触发模式
注意:在多重 ADC 模式下,可在多模式数据寄存器 (ADC_CDR) 中读取转换的数据。可在多模式状 态寄存器 (ADC_CSR) 中读取状态位。
多重ADC框图
1. 尽管 ADC2 和 ADC3 上存在外部触发,但它们并未显示在此图中。
2. 在双重 ADC 模式下,不存在 ADC3 从器件部分。
3. 在三重 ADC 模式下,ADC 通用数据寄存器 (ADC_CDR) 包含 ADC1、ADC2 和 ADC3 的规则转换数据。
按照所选的存储顺序使用全部 32 个寄存器位。
在双重 ADC 模式下,ADC 通用数据寄存器 (ADC_CDR) 包含 ADC1 和 ADC2 的规则转换数据。使用全部
32 个寄存器位。
● 多重 ADC 模式下的 DMA 请求:
在多重 ADC 模式下,可将 DMA 配置为使用三种不同的模式来传输转换的数据。在所有情况下,要使用的 DMA 流均连接到 ADC:
— DMA 模式 1:每发出一个 DMA 请求(一个数据项可用),就会传输一个表示 ADC转换的数据项的半字。
在双重 ADC 模式下,发出第一个请求时传输 ADC1 的数据,发出第二个请求时传输 ADC2 的数据,依次类推。
在三重 ADC 模式下,发出第一个请求时传输 ADC1 的数据,发出第二个请求时传输ADC2 的数据,发出第三个请求时传输 ADC3 的数据;重复此序列。因此 DMA 首先传输 ADC1 的数据,随后传输 ADC2 的数据,再传输 ADC3 的数据,依次类推。
DMA 模式 1 用于三重规则同时模式。
示例:
三重规则同时模式:生成 3 个连续的 DMA 请求(每个请求对应一个转换数据项)
第 1 个请求:ADC_CDR[31:0] = ADC1_DR[15:0]
第 2 个请求:ADC_CDR[31:0] = ADC2_DR[15:0]
第 3 个请求:ADC_CDR[31:0] = ADC3_DR[15:0]
第 4 个请求:ADC_CDR[31:0] = ADC1_DR[15:0]
— DMA 模式 2:每发送一个 DMA 请求(两个数据项可用),就会以字的形式传输表
示两个 ADC 转换数据项的两个半字。
在双重 ADC 模式下,发出第一个请求时会传输 ADC2 和 ADC1 的数据(ADC2 数据占用高位半字,ADC1 数据占用低位半字),依此类推。
在三重 ADC 模式下,将生成三个 DMA 请求:发出第一个请求时,会传输 ADC2和 ADC1 的数据(ADC2 数据占用高位半字,ADC1 数据占用低位半字)。发出第二个请求时,会传输 ADC1 和 ADC3 的数据(ADC1 数据占用高位半字,ADC3数据占用低位半字)。发出第三个请求时,会传输 ADC3 和 ADC2 的数据(ADC3数据占用高位半字,ADC2 数据占用低位半字),依此类推。
DMA 模式 2 用于交替模式和规则同时模式(仅适用于双重 ADC 模式)。
示例:
a) 双重交替模式:每当有 2 个数据项可用时,就会生成一个 DMA 请求:
第 1 个请求:ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0]
第 2 个请求:ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0]
b) 三重交替模式:每当有 2 个数据项可用时,就会生成一个 DMA 请求
第 1 个请求:ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0]
第 2 个请求:ADC_CDR[31:0] = ADC1_DR[15:0] | ADC3_DR[15:0]
第 3 个请求:ADC_CDR[31:0] = ADC3_DR[15:0] | ADC2_DR[15:0]
第 4 个请求:ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0]
— DMA 模式 3:此模式与 DMA 模式 2 相似。唯一的区别是:在这种模式下,每发送一个 DMA 请求(两个数据项可用),就会以半字的形式传输表示两个 ADC 转换数据项的两个字节。此模式下的数据传输顺序与 DMA 模式 2 相似。
DMA 模式 3 用于分辨率为 6 位和 8 位时的交替模式。
示例:
a) 双重交替模式:每当有 2 个数据项可用时,就会生成一个 DMA 请求
第 1 个请求:ADC_CDR[15:0] = ADC2_DR[7:0] | ADC1_DR[7:0]
第 2 个请求:ADC_CDR[15:0] = ADC2_DR[7:0] | ADC1_DR[7:0]
b) 三重交替模式:每当有 2 个数据项可用时,就会生成一个 DMA 请求
第 1 个请求:ADC_CDR[15:0] = ADC2_DR[7:0] | ADC1_DR7:0]
第 2 个请求:ADC_CDR[15:0] = ADC1_DR[7:0] | ADC3_DR[15:0]
第 3 个请求:ADC_CDR[15:0] = ADC3_DR[7:0] | ADC2_DR[7:0]
第 4 个请求:ADC_CDR[15:0] = ADC2_DR[7:0] | ADC1_DR7:0]
溢出检测:如果在其中一个相关的 ADC(双重和三重模式下的 ADC1 和 ADC2,仅有三重 模式时的 ADC3)上检测到溢出,则不再发出 DMA 请求,以确保传输到 RAM 的所有数据都 有效。对于与某个 ADC 对应的 EOC 位,有时可能会因为此 ADC 的数据寄存器包含有效数据而保持置 1。
注入同时模式
此模式可转换注入通道组。外部触发源来自 ADC1 的注入组多路复用器(通过 ADC1_CR2 寄存器中的 JEXTSEL[3:0] 位进行选择)。同时触发可用于 ADC2 和 ADC3。
注意:不要在两个/三个 ADC 上转换同一通道(转换同一通道时,不允许两个/三个 ADC 采样时间 重叠)。
在同时模式下,必须使用同一长度来转换序列,或必须确保触发之间的间隔长于 2 个序列 (双重 ADC 模式)/3 个序列(三重 ADC 模式)中的较长时间。否则,当序列较长的 ADC 完 成上一次转换时,序列较短的 ADC 可能重新开始转换。
规则转换可在一个或所有 ADC 上执行。这种情况下,它们彼此之间都是独立的,而且会在 出现注入事件时中断。它们会在注入转换组结束时恢复转换。
双重 ADC 模式
在 ADC1 或 ADC2 转换事件结束时:
● 转换的数据会存储在各个 ADC 接口的 ADC_JDRx 寄存器中。
● 当 ADC1/ADC2 的注入通道全部完成转换后,会生成一个 JEOC 中断(如果已在两个
ADC 接口中的一个接口上使能)。

注入同时模式
此模式可转换注入通道组。外部触发源来自 ADC1 的注入组多路复用器(通过 ADC1_CR2 寄存器中的 JEXTSEL[3:0] 位进行选择)。同时触发可用于 ADC2 和 ADC3。
注意:不要在两个/三个 ADC 上转换同一通道(转换同一通道时,不允许两个/三个 ADC 采样时间 重叠)。
在同时模式下,必须使用同一长度来转换序列,或必须确保触发之间的间隔长于 2 个序列 (双重 ADC 模式)/3 个序列(三重 ADC 模式)中的较长时间。否则,当序列较长的 ADC 完 成上一次转换时,序列较短的 ADC 可能重新开始转换。
规则转换可在一个或所有 ADC 上执行。这种情况下,它们彼此之间都是独立的,而且会在 出现注入事件时中断。它们会在注入转换组结束时恢复转换。
双重 ADC 模式
在 ADC1 或 ADC2 转换事件结束时:
● 转换的数据会存储在各个 ADC 接口的 ADC_JDRx 寄存器中。
● 当 ADC1/ADC2 的注入通道全部完成转换后,会生成一个 JEOC 中断(如果已在两个ADC 接口中的一个接口上使能)。

注入同时模式
此模式可转换注入通道组。外部触发源来自 ADC1 的注入组多路复用器(通过 ADC1_CR2 寄存器中的 JEXTSEL[3:0] 位进行选择)。同时触发可用于 ADC2 和 ADC3。
注意:不要在两个/三个 ADC 上转换同一通道(转换同一通道时,不允许两个/三个 ADC 采样时间 重叠)。
在同时模式下,必须使用同一长度来转换序列,或必须确保触发之间的间隔长于 2 个序列 (双重 ADC 模式)/3 个序列(三重 ADC 模式)中的较长时间。否则,当序列较长的 ADC 完 成上一次转换时,序列较短的 ADC 可能重新开始转换。
规则转换可在一个或所有 ADC 上执行。这种情况下,它们彼此之间都是独立的,而且会在 出现注入事件时中断。它们会在注入转换组结束时恢复转换。
双重 ADC 模式
在 ADC1 或 ADC2 转换事件结束时:
● 转换的数据会存储在各个 ADC 接口的 ADC_JDRx 寄存器中。
● 当 ADC1/ADC2 的注入通道全部完成转换后,会生成一个 JEOC 中断(如果已在两个ADC 接口中的一个接口上使能)。
四通道,双重ADC
三重 ADC 模式
在 ADC1、ADC2 或 ADC3 转换事件结束时:
● 转换的数据会存储在各个 ADC 接口的 ADC_JDRx 寄存器中。
● 当 ADC1/ADC2/ADC3 的注入通道全部完成转换后,会生成一个 JEOC 中断(如果已在三个 ADC 接口中的一个接口上使能)。
四通道,三重ADC

规则同时模式
此模式可用于规则通道组。外部触发源来自 ADC1 的规则组多路复用器(通过 ADC1_CR2 寄存器中的 EXTSEL[3:0] 位进行选择)。同时触发可用于 ADC2 和 ADC3。
注意:不要在两个/三个 ADC 上转换同一通道(转换同一通道时,不允许两个/三个 ADC 采样时间 重叠)。
在规则同时模式下,必须使用同一长度来转换序列,或必须确保触发之间的间隔长于 2 个序 列(双重 ADC 模式)/3 个序列(三重 ADC 模式)中的较长转换时间。否则,当序列较长的 ADC 完成上一次转换时,序列较短的 ADC 可能重新开始转换。
必须禁止注入转换。
双重 ADC 模式
在 ADC1 或 ADC2 转换事件结束时:
● 会生成一个 32 位 DMA 传输请求(如果 ADC_CCR 寄存器中的 DMA[1:0] 位等于0b10)。此请求会将存储在 ADC_CDR 32 位寄存器高位半字中的 ADC2 转换数据传输到 SRAM,然后将存储在 ADC_CCR 低位半字中的 ADC1 转换数据传输到 SRAM。
● 当 ADC1/ADC2 的规则通道全部完成转换后,会生成一个 EOC 中断(如果已在两个 ADC接口中的一个接口上使能)。
16通道双重ADC
三重 ADC 模式
在 ADC1、ADC2 或 ADC3 转换事件结束时:
● 会生成三个 32 位 DMA 传输请求(如果 ADC_CCR 寄存器中的 DMA[1:0] 位等于 0b01)。
之后会发生三次从 ADC_CDR 32 位寄存器到 SRAM 的传输:首先传输 ADC1 转换数据,然后是 ADC2 转换数据,最后是 ADC3 转换数据。每次出现新的三阶段转换时都会重复这一过程。
● 当 ADC1/ADC2/ADC3 的规则通道全部完成转换后,会生成一个 EOC 中断(如果已在三个 ADC 接口中的一个接口上使能)。
16通道三重ADC

交替模式
此模式只能用于规则组(通常为一个通道)。外部触发源来自 ADC1 的规则通道多路复用器。
双重 ADC 模式
出现外部触发之后:
● ADC1 立即启动
● 经过几个 ADC 时钟周期延迟后 ADC2 启动
交替模式下 2 个转换之间的最小延迟通过 ADC_CCR 寄存器中的 DELAY 位进行配置。但 是,如果某个 ADC 的互补 ADC 仍在对其输入进行采样,则该 ADC 无法启动转换(在给定 时间内,只有一个 ADC 能够对输入信号采样)。在这种情况下,延迟时间为采样时间 + 2 个 ADC 时钟周期。例如,如果两个 ADC 的 DELAY = 5 个时钟周期,且采样时间为 15 个时钟 周期,则 ADC1 和 ADC2 之间的转换延迟为 17 个时钟周期。
如果 ADC1 和 ADC2 上的 CONT 位均置 1,则这两个 ADC 所选规则通道会连续进行转换。
注意:如果转换序列中断(例如 DMA 传输结束时),则必须首先通过在独立模式下进行配置来将多 重 ADC 定序器复位(位 DUAL[4:0] = 00000),然后才可以对交替模式进行编程。
ADC2 生成一个 EOC 中断之后(如果已通过 EOCIE 位使能),会生成一个 32 位 DMA 传 输请求(如果 ADC_CCR 寄存器中的 DMA[1:0] 位等于 0b10)。此请求首先会将存储在 ADC_CDR 32 位寄存器高位半字中的 ADC2 转换数据传输到 SRAM,然后将存储在寄存器低位半字中的 ADC1 转换数据传输到 SRAM。
连续转换模式下1通道的交替模式,双重ADC
三重 ADC 模式
出现外部触发之后:
● ADC1 立即启动
● 经过几个 ADC 时钟周期延迟后 ADC2 启动
● 在 ADC2 转换经过几个 ADC 时钟周期的延迟后 ADC3 启动
交替模式下 2 个转换之间的最小延迟通过 ADC_CCR 寄存器中的 DELAY 位进行配置。但 是,如果某个 ADC 的互补 ADC 仍在对其输入进行采样,则该 ADC 无法启动转换(在给定 时间内,只有一个 ADC 能够对输入信号采样)。在这种情况下,延迟时间为采样时间 + 2 个 ADC 时钟周期。例如,如果这三个 ADC 的 DELAY = 5 个时钟周期,且采样时间为 15 个时 钟周期,则 ADC1、ADC2 和 ADC3 之间的转换延迟为 17 个时钟周期。
如果 ADC1、ADC2 和 ADC3 上的 CONT 位均置 1,则这些 ADC 所选规则通道会连续进行 转换。
注意:如果转换序列中断(例如 DMA 传输结束时),则必须首先通过在独立模式下进行配置来将多 重 ADC 定序器复位(位 DUAL[4:0] = 00000),然后才可以对交替模式进行编程。
在此模式下,每当出现 2 个可用数据项时,就会生成一个 DMA 传输请求(如果 ADC_CCR 寄存器中的 DMA[1:0] 位等于 0b10)。此请求首先会将存储在 ADC_CDR 32 位寄存器低位 半字中的第一批转换数据传输到 SRAM,然后将存储在 ADC_CDR 高位半字中的第二批转 换数据传输到 SRAM。具体顺序如下:
● 第 1 个请求:ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0]
● 第 2 个请求:ADC_CDR[31:0] = ADC1_DR[15:0] | ADC3_DR[15:0]
● 第 3 个请求:ADC_CDR[31:0] = ADC3_DR[15:0] | ADC2_DR[15:0]
● 第 4 个请求:ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0], …
连续转换模式1下1通道交替模式:三重ADC模式

交替触发模式
此模式只能用于注入组。外部触发源来自 ADC1 的注入组多路复用器。
注意:规则转换可在一个或所有 ADC 上使能。在这种情况下,规则转换彼此之间是独立的。当 ADC 必须执行注入转换时,会中断规则转换。它会在注入转换完成后恢复。
如果转换序列中断(例如 DMA 传输结束时),则必须首先通过在独立模式下进行配置来将 多重 ADC 定序器复位(位 DUAL[4:0] = 00000),然后才可以对交替模式进行编程。
两次触发事件之间的时间间隔必须大于或等于 1 个 ADC 时钟周期。同一个 ADC 上可启动转 换的两个触发事件之间的最小时间间隔与单个 ADC 模式下相同。
双重 ADC 模式
● 发生第一次触发时,将转换 ADC1 中注入组的所有通道
● 发生第二次触发时,将转换 ADC2 中注入组的所有通道
● 以此类推
当组中的所有注入 ADC1 通道都转换完成后,会生成一个 JEOC 中断(如果已使能)。
当组中的所有注入 ADC2 通道都转换完成后,会生成一个 JEOC 中断(如果已使能)。
如果在组中的所有注入通道都完成转换后出现另一个外部触发,则可通过转换组中的注入ADC1 通道来重新启动交替触发过程。
交替触发:各个ADC的注入组
如果使能 ADC1 和 ADC2 的注入不连续采样模式:
● 发生第一次触发时,将转换第一个注入 ADC1 通道
● 发生第二次触发时,将转换第一个注入 ADC2 通道
● 以此类推
当组中的所有注入 ADC1 通道都转换完成后,会生成一个 JEOC 中断(如果已使能)。
当组中的所有注入 ADC2 通道都转换完成后,会生成一个 JEOC 中断(如果已使能)。
如果注入组中的所有通道都完成转换后出现另一个外部触发,则会重新启动交替触发过程。
交替触发:不联系徐采样模式下的4个注入通道(各个ADC)
三重 ADC 模式
● 发生第一次触发时,将转换 ADC1 中注入组的所有通道。
● 发生第二次触发时,将转换 ADC2 中注入组的所有通道。
● 发生第三次触发时,将转换 ADC3 中注入组的所有通道。
● 以此类推
当组中的所有注入 ADC1 通道都转换完成后,会生成一个 JEOC 中断(如果已使能)。
当组中的所有注入 ADC2 通道都转换完成后,会生成一个 JEOC 中断(如果已使能)。
当组中的所有注入 ADC3 通道都转换完成后,会生成一个 JEOC 中断(如果已使能)。
如果在组中的所有注入通道都完成转换后出现另一个外部触发,则可通过转换组中的注入ADC1 通道来重新启动交替触发过程。
交替触发:各个AdC的注入组

混合型规则/注入同时模式
可以中断规则组的同时转换,然后开始注入组的同时转换。
注意:在混合型规则/注入同时模式下,必须使用同一长度来转换序列,或必须确保触发之间的间隔长于 2 个序列(双重 ADC 模式)/3 个序列(三重 ADC 模式)中的较长转换时间。否则,当 序列较长的 ADC 完成上一次转换时,序列较短的 ADC 可能重新开始转换。

规则同时 + 交替触发组合模式
可以中断规则组的同时转换,然后开始注入组的交替触发转换。图 51 说明了交替触发模式 中断同时规则转换的行为。
注入事件后立即开始注入交替转换。当规则转换处于运行状态时,为确保在注入转换后实现同步,所有的(主/从)ADC 规则转换均将停止,并会在注入转换结束时得以恢复运行。
注意:在规则同时 + 交替触发组合模式下,必须使用同一长度来转换序列,或必须确保触发之间的 间隔长于 2 个序列(双重 ADC 模式)/3 个序列(三重 ADC 模式)的长转换时间。否则,当 序列较长的 ADC 完成上一次转换时,序列较短的 ADC 可能重新开始转换。
如果转换序列中断(例如 DMA 传输结束时),则必须首先通过在独立模式下进行配置来将 多重 ADC 定序器复位(位 DUAL[4:0] = 00000),然后才可以对交替模式进行编程。
交替加规则同时
在已导致规则转换中断的注入转换期间出现的触发将被忽略。图 52 说明了这种情况下的行 为(第 2 次触发被忽略)。
在注入转换期间出现的触发事件

温度传感器
温度传感器可用于测量器件的环境温度 (TA)。
● 对于 STM32F40x 和 STM32F41x 器件,温度传感器内部连接到 ADC1_IN16 通道,而
ADC1 用于将传感器输出电压转换为数字值。
● 对于 STM32F42x 和 STM32F43x 器件,温度传感器内部连接到与 VBAT 共用的输入通
道 ADC1_IN18:ADC1_IN18 用于将传感器输出电压或 VBAT 转换为数字值。一次只
能选择一个转换(温度传感器或 VBAT)。同时设置了温度传感器和 VBAT 转换时,将
只进行 VBAT 转换。
图 53 显示了温度传感器框图。
不使用时可将传感器置于掉电模式。
注意:必须将 TSVREFE 位置 1 才能同时对两个通道进行转换。ADC1_IN16 或 ADC1_IN18(温度 传感器)和 ADC1_IN17 (VREFINT)。
主要特性
● 支持的温度范围:—40 °C 到 125 °C
● 精度:±1.5 °C
温度传感器和Vrefint通道框图
1. VSENSE 是至 ADC1_IN16 的输入(对于 STM32F40x 和 STM32F41x 器件),也是 ADC1_IN18 的输入
(对于 STM32F42x 和 STM32F43x 器件)。
读取温度
要使用传感器,请执行以下操作:
3. 选择 ADC1_IN16 或 ADC1_IN18 输入通道。
4. 选择一个采样时间,该采样时间要大于数据手册中所指定的最低采样时间。
5. 在 ADC_CCR 寄存器中将 TSVREFE 位置 1,以便将温度传感器从掉电模式中唤醒。
6. 通过将 SWSTART 位置 1(或通过外部触发)开始 ADC 转换
7. 读取 ADC 数据寄存器中生成的 VSENSE 数据
8. 使用以下公式计算温度:
温度(单位为 °C)= {(VSENSE — V25) / Avg_Slope} + 25
其中:
— V25 = 25 °C 时的 VSENSE 值
— Avg_Slope = 温度与 VSENSE 曲线的平均斜率(以 mV/°C 或 μV/°C 表示)
有关 V25 和 Avg_Slope 实际值的相关信息,请参见数据手册中的电气特性一节。
注意:传感器从掉电模式中唤醒需要一个启动时间,启动时间过后其才能正确输出 VSENSE。ADC 在 上电后同样需要一个启动时间,因此,为尽可能减少延迟间,应同时将 ADON 和 TSVREFE 位置 1。
温度传感器的输出电压随温度线性变化。由于工艺不同,该线性函数的偏移量取决于各个芯片(芯片之间的温度变化可达 45 °C)。
内部温度传感器更适用于对温度变量而非绝对温度进行测量的应用情况。如果需要读取精确温度,则应使用外部温度传感器。

电池充电监视
ADC_CCR 寄存器中的 VBATE 位用于切换到电池电压。由于 VBAT 电压可能高于 VDDA,因 此 VBAT 引脚需要内部连接到桥接分配器,以确保 ADC 正确运行。
设置 VBATE 后,桥接器会自动使能以进行以下连接:
● 在 STM32F40xx 和 STM32F41xx 器件上将 VBAT/2 连接到 ADC1_IN18 输入通道
● 在 STM32F42xx 和 STM32F43xx 器件上将 VBAT/4 连接到 ADC1_IN18 输入通道
注意:VBAT 和温度传感器连接到同一 ADC 内部通道 (ADC1_IN18)。一次只能选择一个转换(温度 传感器或 VBAT)。同时使能两个转换时,将只进行 VBAT 转换。

ADC 中断
当模拟看门狗状态位和溢出状态位分别置 1 时,规则组和注入组在转换结束时可能会产生中 断。可以使用单独的中断使能位以实现灵活性。
ADC_SR 寄存器中存在另外两个标志,但这两个标志不存在中断相关性:
● JSTRT(开始转换注入组的通道)
● STRT(开始转换规则组的通道)
ADC中断

ADC寄存器映射
ADC全局寄存器映射
每个ADC和ADC的寄存器映射与复位值
每个ADC个ADC的寄存器映射与复位值 续
ADC寄存器映射和复位值(通用DAC寄存器)

1 0
原创粉丝点击