STM32 ADC模拟看门狗及其应用 ; p) K; K; S+ W5 T0 e* c前言 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高低阈值,用户可以预先设定个模拟看门狗的上下限电压值,一旦采集到的电压超出该上下限,将会触发模拟看门狗中断。模拟看门狗一般用于检测单个的常规或注入转换通道,或同时检测所有的常规和注入通道。 9 o7 H+ O3 A1 B. n5 x% V 模块框图: X+ H. j2 R1 u D3 G- O8 i6 H 模拟看门狗可以预先设置ADC转换的高低阈值,ADC_HTR寄存器来配置ADC转换的上限阈值,ADC_LTR寄存器用来配置ADC转换的下限阈值。7 c0 ]6 ?2 `1 f ! k/ ]2 \, p+ f) q+ V+ e 应用示例: [1 e m0 d6 ]' N8 U4 E; N ADC配置代码 如上图所示,AnalogWDGConfig结构体中分别使能了模拟看门狗及中断,设置了电压的上下阈值HighThreshold和LowThreshold。模拟参考电压为3.3V,以上代码设置的下限电压阈值为3.3*1/8=0.41V,上限电压阈值为3.3*5/8=2.06V。 - j% S0 @+ l5 r. N2 A& v, C# I( }/ S 模拟看门狗中断服务程序 4 G. Z7 e; I" S9 v 当模拟看门狗检测到电压高于上限或者低于下限时将会产生看门狗中断,中断服务程序触发后,可以做出一些应对措施。这里置了ubAnalogWatchdogStatus标志,然后由主程序去根据标志的值去执行相应处理程序。 . ]& V9 b3 O! ] 启动ADC转换代码/ Y9 C9 S& B& @3 P 使用循环模式DMA启动ADC转换,DMA可以降低CPU负载。/ E; R t0 V( ]$ J; r3 H. a; Q+ N6 \ 结论$ m$ d7 b# n; ~5 W4 @0 B' V 控制系统中,需要测量严格电压、压力、温度等范围的信号,使用模拟看门狗能够快速地检测到异常状况,并做出相应的应对措施,以确保设备安全。 % a8 f* M8 H" B5 V; \$ c - A/ [+ F( a6 m- ^( @3 \ 文档下载 O9 ?# `1 p$ a, W' Y% y 更多实战经验 |
【银杏科技ARM+FPGA双核心应用】STM32H7系列10——ADC
【银杏科技ARM+FPGA双核心应用】STM32H7系列57——MDK_FLM
【STM32图书分享之九】—《STM32F 32位ARM微控制器应用设计与实践》
无刷直流电机控制应用+基于STM8S系列单片机---电子书
STM32 USB的程序,包含固件、驱动和测试用的应用程序
工业以太网总线ETHERCAT驱动程序设计及应用(扫描版)
【实战经验】STM32 DFSDM测量温度应用
【实战经验】基于STM32 I2S的音频应用开发介绍
【中文文档】AN4112_使用STM32F05xx模拟比较器的六个应用案例
[连载]STM32F103ZET6 uCGUI3.90a控件应用教程(第五节 复选框和单选按钮)
“如上图所示,AnalogWDGConfig结构体中分别使能了模拟看门狗及中断,设置了电压的上下阈值HighThreshold和LowThreshold。模拟参考电压为3.3V,以上代码设置的下限电压阈值为3.3*1/8=0.41V,上限电压阈值为3.3*5/8=2.06V。”0 c v' u2 p% N; V5 f/ c
但是我在STM32CubeMX中,HighThreshold和LowThreshold的取值范围只能是0-4095
描述如下:
* High Threshold HighThreshold must be between 0 and 4 095. * This parameter has automatically changed after your last modification.+ w0 N& U: D8 M1 T3 o) G
前辈请问一个问题,我刚上手单片机,现在想实现一个ADC检测输入电压的功能,选择了连续检测的方式,连续进行对输入管脚模拟电压的检测,检测到某一电压值就中断或者用其他方式暂停转换,串口打印信息,然后再在程序里开启下一段转换,请问这样用看门狗功能可以实现吗?
1 @$ ~; G d5 ]* `' r
还有一个问题就是您说的看门狗高低阈值的设定问题,如果是0到4095之间,是否意味着我输入模拟的阶数即可,不需要转换成二进制?(就是把模拟电压3.3V分成4096阶,输入v/3.3*4096即可?): e; D, p# {7 V2 d2 S' L" J
很抱歉,这个功能我还没有实际试用过。回答不了你。. Q U5 `+ @/ e8 f! m3 s/ v9 j" u
只是当时我看到这个功能想试用一下,用STM32CubeMX配置的时候发现有这个问题。