目录
概述
1 开始转换
1.1 使能ADSTART
1.2 使能JADSTART
1.3 ADSTART 通过硬件清零
2 转换时序
3 停止正在进行的转换( ADSTP、 JADSTP)
3.1 停止转换功能实现
3.2 停止转换流程图
概述
本文主要讲述了STM32H750外设ADC之开始和结束数据转换功能,包括ADC开始数据转换的流程和结束数据转换的流程。
1 开始转换
1.1 使能ADSTART
通过将 ADSTART 置 1 的方式开始进行 ADC 常规转换。
ADSTART 置 1 后, 会开始进行转换:
1) 立即开始转换: EXTEN = 0x0 时(软件触发)
2) 在所选常规硬件触发的下一有效边沿开始转换: EXTEN /= 0x0 时,软件通过将 JADSTART 置 1 的方式开始进行 ADC 注入转换。
ADC x 控制寄存器 (ADCx_CR)( x=1 到 3)
ADC x control register
偏移地址: 0x08
复位值: 0x2000 0000
ADC x 配置寄存器 (ADCx_CFGR)( x=1 到 3)
ADC x configuration register
偏移地址: 0x0C
复位值: 0x8000 0000
1.2 使能JADSTART
JADSTART 置 1 后,会开始进行转换:
1) 立即开始转换: JEXTEN = 0x0 时(软件触发)
ADC x 注入序列寄存器 (ADCx_JSQR)( x=1 到 3)
ADC x injected sequence register
偏移地址: 0x4C
复位值: 0x0000 0000
2) 在所选注入硬件触发的下一有效边沿开始转换
JEXTEN /= 0x0 时ADSTART 位和 JADSTART 位还提供当前是否正在进行 ADC 操作的信息。可以在 ADSTART=0且 JADSTART=0(指示 ADC 处于空闲状态)时重新配置 ADC。
ADC x 控制寄存器 (ADCx_CR)( x=1 到 3)
ADC x control register
偏移地址: 0x08
复位值: 0x2000 0000
位 3 JADSTART: ADC 开始注入转换 (ADC start of injected conversion)
此位由软件置 1,用于开始 ADC 的注入通道转换。根据配置位 JEXTEN 的值,可以立即开始转换(软件触发配置),也可以在发生注入硬件触发事件后开始转换(硬件触发配置)。
该位通过硬件清零:
– 在单次转换模式下,如果选择了软件触发 (JEXTSEL=0x0):出现注入转换序列结束(JEOS) 标志时清零。
– 在所有情况下:执行完 JADSTP 命令后,由硬件将 JADSTP 位清零的同时清零。
0:当前未进行 ADC 注入转换。
1:写入 1 可开始注入转换。读取值为 1 表示 ADC 正在运行,最终会转换注入通道。
注意:仅当 ADEN=1 且 ADDIS=0 时(ADC 已使能,并且没有任何待处理的禁止 ADC 的请求),才允许通过软件将 JADSTART 置 1。在自动注入模式下 (JAUTO=1),通过将 ADSTART 位置 1 开始常规转换和自动注入转换( JADSTART 必须保持清零)
位 2 ADSTART: ADC 开始常规转换 (ADC start of regular conversion)
此位由软件置 1,用于开始 ADC 的常规通道转换。根据配置位 EXTEN 的值,可以立即开始转换(软件触发配置),也可以在发生常规硬件触发事件后开始转换(硬件触发配置)。该位通过硬件清零:
– 在单次转换模式下(CONT=0、 DISCEN=0),如果选择了软件触发 (EXTEN=0x0):出现常规转换序列结束 (EOS) 标志时清零。
– 在不连续转换模式下(CONT=0、 DISCEN=1),如果选择了软件触发 (EXTEN=0x0):出现转换结束(EOC) 标志时清零。
– 在所有其他情况下:执行完 ADSTP 命令后,由硬件将 ADSTP 位清零的同时清零。
0:当前未进行 ADC 常规转换。
1:写入 1 可开始常规转换。读取值为 1 表示 ADC 正在运行,最终会转换常规通道。
注意:仅当 ADEN=1 且 ADDIS=0 时(ADC 已使能,并且没有任何待处理的禁止 ADC 的请求),才允许通过软件将 ADSTART 置 1。在自动注入模式下 (JAUTO=1),通过将 ADSTART 位置 1 开始常规转换和自动注入转换( JADSTART 必须保持清零)
注意: 在自动注入模式下 (JAUTO=1),使用 ADSTART 位开始常规转换,然后再进行自动注入转换( JADSTART 必须保持清零)。
1.3 ADSTART 通过硬件清零
1)在使用软件触发的单次模式下( CONT=0, EXTEN=0x0)
在该模式下,只要转换序列结束 (EOS=1) 就清零
2)在使用软件触发的不连续模式下( CONT=0、 DISCEN=1、 EXTEN=0x0)
在该模式下,转换结束时 (EOC=1) 清零
3)在所有其他情况下( CONT=x、 EXTEN=x)
执行由软件调用的 ADSTP 程序之后清零
注意: 在连续模式下 (CONT=1),由于序列会自动重新启动,因此,当 EOS 置 1 时, ADSTART 位不会通过硬件清零。
4)单次模式下选择了硬件触发( CONT=0 且 EXTEN /=0x00)
当 EOS 置 1 时,ADSTART 位不会通过硬件清零,借此软件无需再次为下一个硬件触发事件复位 ADSTART。这样可确保不会错过任何后续的硬件触发。
JADSTART 通过硬件清零:
a) 在使用注入触发的单次模式下 (JEXTEN=0x0)
如果 JDISCEN=1,只要注入转换序列结束( JEOS 置 1)或子组处理结束就清零。
b) 在所有情况下 (JEXTEN=x)
执行由软件调用的 JADSTP 程序之后清零。
注意: 选择软件触发时,如果 EOC 标志仍为高电平,则不应将 ADSTAR
2 转换时序
从转换开始到转换结束所经过的时间是配置的采样时间与逐次逼近时间(具体取决于数据分辨率)的总和:
模数转换时间
模数时序图
3 停止正在进行的转换( ADSTP、 JADSTP)
3.1 停止转换功能实现
软件决定是否停止转换,要停止正在进行的常规转换,应将 ADSTP 置 1;要停止正在进行的注入转换,应将 JADSTP 置 1 。
位 5 JADSTP: ADC 停止注入转换命令 (ADC stop of injected conversion command)
该位由软件置 1,用于停止和丢弃正在进行的注入转换( JADSTP 命令)。当转换已有效丢弃、并且可重新配置 ADC 注入序列和触发时,会通过硬件将该位清零。随后, ADC会准备好接收新的开始注入转换命令( JADSTART 命令)。
0:当前未执行 ADC 停止注入转换命令
1:写入 1 可停止正在进行的注入转换。读取值为 1 表示正在执行 ADSTP 命令。注意:
仅当 JADSTART=1 且 ADDIS=0 时( ADC 已使能、最终会进行注入转换、并且没有任何待处理的禁止 ADC 的请求),才允许通过软件将 JADSTP 置 1。
在自动注入模式下 (JAUTO=1),将 ADSTP 位置 1 会中止常规转换和注入转换(不要使用
JADSTP)
位 4 ADSTP: ADC 停止常规转换命令 (ADC stop of regular conversion command)
该位由软件置 1,用于停止和丢弃正在进行的常规转换( ADSTP 命令)。当转换已有效丢弃、并且可重新配置 ADC 常规序列和触发时,会通过硬件将该位清零。随后, ADC会准备好接收新的开始常规转换命令( ADSTART 命令)。
0:当前未执行 ADC 停止常规转换命令
1:写入 1 可停止正在进行的常规转换。读取值为 1 表示正在执行 ADSTP 命令。
停止转换将复位正在进行的 ADC 操作。随后可重新配置 ADC(例如:更改通道选择或触发),为新操作做好准备。
请注意,不能在常规转换仍在执行时停止注入转换,反之亦然。这样便可在常规转换仍在进行时重新配置注入转换序列和触发(反之亦然)。
如果 ADSTP 位由软件置 1,则会中止任何正在进行的常规转换,并会丢弃部分转换结果( ADCx_DR 寄存器不会更新为当前转换结果)。
如果 JADSTP 位由软件置 1,则会中止任何正在进行的注入转换,并会丢弃部分转换结果( ADCx_JDRy 寄存器不会更新为当前转换结果)。扫描序列也会中止并会复位(这意味着重启 ADC 将重新开始新的序列)。
该程序执行完毕后, ADSTP/ADSTART 位(常规转换时)或 ADSTP/JADSTART 位(注入转换时)会由硬件清零,软件必须轮询 ADSTART(或 JADSTART)直至其复位,然后才能判定 ADC 已完全停止运行。
3.2 停止转换流程图
1)停止正在进行的常规转换
2) 停止正在进行的常规转换和注入转换