目录
概述
1 ADC开关控制介绍
2 开关控制功能流程
2.1 软件使能ADC 的流程
2.2 软件禁止 ADC 的流程
3 相关寄存器
3.1 ADCx_ISR
3.2 ADCx_CR
4 使能/禁止ADC流程图
5 写入 ADC 控制位时的限制
概述
本文介绍STM32H750外设之ADC开关控制功能,该功能是应用STM32H750外设之ADC功能的基础,其他寄存器的配置参数行为和开关使能息息相关。
1 ADC开关控制介绍
要正确的使用STM32H750外设之ADC,必须了解其两个重要的寄存器的参数配置,ADC x 中断和状态寄存器 (ADCx_ISR)( x=1 到 3)和ADC x 控制寄存器 (ADCx_CR)( x=1 到 3)。其用于使能或者停止ADC转换数据功能,而其他寄存器配置参数也和这两个寄存器的配置位相关。
2 开关控制功能流程
2.1 软件使能ADC 的流程
step -1: 向 ADCx_ISR 寄存器中的 ADRDY 位写入“1”,将其清零。
step -2: 将 ADEN 置 1。
step -3: 等待,直至 ADRDY=1( ADRDY 会在 ADC 启动时间后置 1)。这可以使用关联中断实现(将 ADRDYIE 置 1)。
step -4: 向 ADCx_ISR 寄存器中的 ADRDY 位写入“1”,将其清零(可选)。
2.2 软件禁止 ADC 的流程
step -1: 检查 ADSTART 和 JADSTART 是否均为 0,以确保当前未执行任何转换。如有需要,可将 ADSTP 置 1,并将 JADSTP 置 1,随后等待至 ADSTP=0 且 JADSTP=0,以停止任何正在进行的常规转换和注入转换。
step -2: 将 ADDIS 置 1。
step -3: 如果应用要求,可等待 ADEN=0,直至模拟 ADC 已有效禁止( ADEN=0 后, ADDIS 将
自动复位)。
3 相关寄存器
3.1 ADCx_ISR
ADC x 中断和状态寄存器 (ADCx_ISR)( x=1 到 3)
位 0 ADRDY: ADC READY
ADC 使能后(位 ADEN=1)以及 ADC 达到准备好接收转换请求的状态时,会通过硬件将该位置1。
通过软件写入 1 可将该位清零。
0: ADC 未准备好开始转换(或标志事件已通过软件确认并清零)
1: ADC 已准备好开始转换
3.2 ADCx_CR
ADC x 控制寄存器 (ADCx_CR)( x=1 到 3)
位 0 ADEN: ADC 使能控制 (ADC enable control)
该位由软件置 1,用于使能 ADC。 ADRDY 标志置 1 后, ADC 将立即准备好运行。如果 ADC 已禁止,则执行 ADDIS 命令后,将通过硬件对该位清零。
0:禁止 ADC(OFF 状态)。
1:写入 1 来使能 ADC。
位 1 ADDIS: ADC 禁止命令 (ADC disable command)
该位由软件置 1,用于禁止 ADC( ADDIS 命令)并使其进入掉电状态( OFF 状态)。ADC 已有效禁止后,会立即通过硬件将该位清零(此时也会通过硬件将 ADEN 清零)。
0:当前未执行 ADDIS 命令。
1:写入 1 可禁止 ADC。读取值为 1 表示正在执行 ADDIS 命令。
位 2 ADSTART: ADC 开始常规转换 (ADC start of regular conversion)
此位由软件置 1,用于开始 ADC 的常规通道转换。根据配置位 EXTEN 的值,可以立即开始转换
(软件触发配置),也可以在发生常规硬件触发事件后开始转换(硬件触发配置)。
该位通过硬件清零:
1)在单次转换模式下(CONT=0、 DISCEN=0),如果选择了软件触发 (EXTEN=0x0):出现常规转换序列结束 (EOS) 标志时清零。
2)在不连续转换模式下(CONT=0、 DISCEN=1),如果选择了软件触发 (EXTEN=0x0):出现转换结束(EOC) 标志时清零。
3)在所有其他情况下:执行完 ADSTP 命令后,由硬件将 ADSTP 位清零的同时清零。
0:当前未进行 ADC 常规转换。
1:写入 1 可开始常规转换。读取值为 1 表示 ADC 正在运行,最终会转换常规通道。
位 3 JADSTART: ADC 开始注入转换 (ADC start of injected conversion)
此位由软件置 1,用于开始 ADC 的注入通道转换。根据配置位 JEXTEN 的值,可以立即开始转换(软件触发配置),也可以在发生注入硬件触发事件后开始转换(硬件触发配置)。
该位通过硬件清零:
1)在单次转换模式下,如果选择了软件触发 (JEXTSEL=0x0):出现注入转换序列结束 (JEOS) 标志时清零。
2) 在所有情况下:执行完 JADSTP 命令后,由硬件将 JADSTP 位清零的同时清零。
0:当前未进行 ADC 注入转换。
1:写入 1 可开始注入转换。读取值为 1 表示 ADC 正在运行,最终会转换注入通道
位 4 ADSTP: ADC 停止常规转换命令 (ADC stop of regular conversion command)
该位由软件置 1,用于停止和丢弃正在进行的常规转换( ADSTP 命令)。当转换已有效丢弃、并且可重新配置 ADC 常规序列和触发时,会通过硬件将该位清零。随后, ADC会准备好接收新的开始常规转换命令( ADSTART 命令)。
0:当前未执行 ADC 停止常规转换命令
1:写入 1 可停止正在进行的常规转换。读取值为 1 表示正在执行 ADSTP 命令。
位 5 JADSTP: ADC 停止注入转换命令 (ADC stop of injected conversion command)
该位由软件置 1,用于停止和丢弃正在进行的注入转换( JADSTP 命令)。当转换已有效丢弃、并且可重新配置 ADC 注入序列和触发时,会通过硬件将该位清零。随后, ADC会准备好接收新的开始注入转换命令( JADSTART 命令)。
0:当前未执行 ADC 停止注入转换命令
1:写入 1 可停止正在进行的注入转换。读取值为 1 表示正在执行 ADSTP 命令。
4 使能/禁止ADC流程图
5 写入 ADC 控制位时的限制
仅当 ADC 已禁止(ADEN 必须等于 0)时,软件才可通过写入 RCC 控制位的方式配置和使能ADC 时钟(请参见 RCC 部分)、 ADCx_DIFSEL 寄存器中的控制位 DIFSEL、 ADCx_CCR 寄
存器、以及 ADCx_CR 寄存器中的控制位 ADCAL 和 ADEN。
只有在 ADC 已使能、 并且没有待处理的禁止 ADC 的请求( ADEN 必须等于 1 且 ADDIS 必
须等于 0)时,才允许软件向 ADCx_CR 寄存器的控制位 ADSTART、 JADSTART 和 ADDIS
执行写操作。
对于 ADCx_CFGR、 ADCx_SMPRy、 ADCx_TRy、 ADCx_SQRy、 ADCx_JDRy、 ADCx_OFRy和 ADCx_IER 寄存器的所有其他控制位:
1)对于与常规转换配置相关的控制位,仅当 ADC 已使能 (ADEN=1) 且未进行常规转换
( ADSTART 必须等于 0)时,才允许软件对这些位执行写操作。
2)对于与注入转换配置相关的控制位,仅当 ADC 已使能 (ADEN=1) 且未进行注入转换
( JADSTART 必须等于 0)时,才允许软件对这些位执行写操作。
仅当 ADC 已使能(最终会进行转换)且没有待处理的禁止 ADC 的请求( ADSTART 或
JADSTART 必须等于 1 且 ADDIS 必须等于 0)时,软件才可以对 ADCx_CR 寄存器中的
ADSTP 或 JADSTP 控制位执行写操作。
如果 ADC 已使能 (ADEN=1),软件可随时对 ADCx_JSQR 寄存器执行写操作。