我们在做ADC应用时,有些场合需要精确测量出待测信号的数据,有时可能并不关心ADC结果多准确,只要满足某个范围即可,这时我们就可以考虑使用STM32ADC看门狗功能了。
STM32
ADC基本上都支持模拟看门狗功能,即ADC模块对被检测的模拟通道的转换结果基于硬件对其合法性、安全性进行监测。我们可以设置被监测通道的转换结果合法性检查的上下阈值,若结果处于阈值之外则视为异常,并可以触发中断。
尤其有些场合,我们可能使用到数个ADC通道,8个、10个甚至更多,同时程序还需要基于各通道的转换结果进行合法性或安全性监测,此时使用ADC模拟看门狗功能就很方便。我们可以先让模拟看门狗做第一步把关,只有出现异常数据时才去进一步检查确认。不然的话,每次一批数据出来后,我们得逐个去检查合法性。一般来讲,多数情况下异常可能只是偶尔、个别通道发生,这样每次转换完成后总是不分青红皂白地去逐一检查、确认,显然有点浪费时间,啰嗦无益,这也会影响系统性能。
我这里使用STM32L4开发板,简单演示下实现过程,供有需要的人士参考。
这里只开启ADC1模块的8个规则通道,使用DMA传送转换结果,并设置模拟看门狗。使用CubeMx图形化配置工具进行工程配置。
我只启用了模拟看门狗1,针对8个规则通道的转换结果进行实时监测。【当然你可以有其它更为灵活的设计。各个STM32系列这个地方不完全一样。】
开启ADC模拟看门狗的中断。
代码里设置一个记录ADC结果异常的标志Flag_ADC_Abnormal,若发生结果异常会在ADC中断对该标志变量赋非0值。
在主循环里若发现异常标志非0,然后去进一步做所有ADC结果的确认。
上面演示过程中监测到一个异常数据,触发了模拟看门狗中断,ADC结果异常标志被赋0xff值,会做进一步异常数据的确认。
我在上面采用的一个模拟看门狗对8个通道的结果进行监测,如果一轮扫描转换下来出现多个异常数据,会触发几次中断呢?
不妨基于同一开发板验证下。我加个ADC中断次数累计变量ADC_Res_CNT,并把阈值下限调整为1200,其它不动。【见下图】
然后进行测试,得到下面结果。
从结果看,除了2个数据正常外其它均异常,故一轮转换下来发生了6次中断,显然我们可以根据中断次数进一步判断一轮转换下来的异常通道数。【注:这里ADC配置为单次扫描模式,DMA配置为Normal模式。】
关键字:STM32 ADC 模拟看门狗
引用地址:
STM32 ADC模拟看门狗过程实现
推荐阅读最新更新时间:2024-11-18 14:34
气体传感器模块原理图和PCB设计分析
根据一个项目的需求,有台机器要用到气体传感器进行气体检测,需要设计一款气体传感器模块。 这个模块要实现以下这些功能: 1, 可以同时安装6种不同气体的传感器,也就是可以同时检测6种不同的气体。 2, 要有RS485接口,让气体传感器模块能和其它设备通过RS485连接,完成数据通信。 3, 供电电源是24V。 经过评估和查找资料,很快就确定了设计方案。原理图设计分析和PCB设计效果如下: 一,主控电路的设计。 这里选用STM32F101,主要考虑到这是工业级别的东西,所以尽量用性能比较强,质量过硬的芯片。同时也考虑到软件工程师熟悉的是STM32,不用重新熟悉芯片,软件开发起来简单,周期短。 二,电源电路的设计。 电路的供电是
[单片机]
STM32的硬件I2C实现及问题
虽然软件可实现I2C读取三轴传感器数据,但I2C作为一种重要的通信协议是一定要搞清楚问题所在的,SO继续研究之前的问题。(网上传言STM32硬件I2C有问题,但仍然有人实现出来) 再次启动程序,依旧是停在原来的位置 等待EV6,网上搜索相关问题好多人都停在了等待EV5上。分析EV5等待问题,主机发送起始信号,没能接受从设备发送的应答, 或者可能都没有发送。此问题应该是接线或IIC初始化代码的问题。 而我此时停在等待EV6,说明已检测到该设备。换句话说从设备已经知道了主设备的存在。却在主设备发送设备地址之后,接受不到从设备的应答信号,自己分析有两种可能,一是设备地址错误,从设备接受到不是自身的设备而地址自然不会应答。
[单片机]
stm32:位带区操作
/*位带区在片上外设的地址范围:0x4000 0000-0x400F FFFF(片上外设区中的最低1MB), 位带识别区在片上外设的地址范围:0x4200 0000~0x42FF FFFF; 对应关系:位带区的每个bit位的值 对应 位带识别区1个 32位的地址的内容; 所以位带操作是:当你通过位带别名区访问这些32位的地址的内容时,就可以达到访 问位带区对应的比特位。 */ //-----位带操作宏定义 //功能:将位带区地址addr 的 bitnum 位 转换为对应 位带识别区的地址 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((add
[单片机]
stm32 bootloader更新固件重启 IWDG独立看门狗
问题现象:直接从固件soft reset到bootloader更新中途,pcb板子会重启 问题原因:固件程序中开启了IWDG(独立看门狗),在进行固件更新的时候没有喂狗,导致 计数计到0,看门狗重进行reset。 问题解决: 1、因为独立看门狗一旦开启是不能关闭的,所以要么在bootloader中喂狗要么不启动。 2、改用窗口看门狗,在soft reset之前将看门狗关闭。
[单片机]
STM32启动模式详解
一、三种boot启动模式: 一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。 1、第一种方式(boot0 = 0):Flash memory启动方式。启动地址:0x08000000 (stm32F207系列) 是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。 基本上都是采用这种模式。 2、第二种方式(boot0 = 1;boot1 = 0:System memory启动方式。启动地址:0x1FFF0000 (
[单片机]
STM32开发笔记61: 解决Undefined symbol ethernetif_init (referred from lwip.
单片机型号:STM32F407VGT6 在STM32开发笔记60: 在STM32CubeMX中配置LwIP文章的基础上进行分层设计,将与用户设计相关的文件挑出来单独建立一个工程,此工程使用CPP11进行生成,在链接的时候提示错误。 挑出的与用户逻辑相关的文件如下图所示: 错误如下图所示: ethernetif_init函数出现在ethernetif.c文件中,代码如下。 err_t ethernetif_init(struct netif *netif) { LWIP_ASSERT( netif != NULL , (netif != NULL)); #if LWIP_NETIF_HOSTNA
[单片机]
智林STM32程序源代码的分析和整理01
一、目的 1、前些天,编写了开发板上键盘扫描、字符输入和简单shell的程序,该程序的编写是在以前工程的基础上修改而成的,源代码的组织比较乱,也没有很好的注释。这两天,先把代码整理一下,加上比较详细的注释,使得可读性、扩展性更好。 2、乘这个机会,也把程序里与STM32硬件相关的部分好好学习一下。 二、开发板配置分析 1、PA口 PA0对应按键PB3,开发板右下角。 PA1用于模拟电位器,JP1在这里。 PA2用定时器的PWM产生液晶的背光电源。PA4-PA7用于SPI模式操作SD卡。PA9,PA10用于串口0通信。PA11,PA12是USB差分线。PA13、PA14、PA15是JTAG的三个脚。 PA3、
[单片机]
英蓓特积极推动ARM Cortex-M3高校普及计划
全球领先的嵌入式软硬件供应商深圳市英蓓特信息技术有限公司日前宣布, 时至英蓓特大学计划实施5周年之庆,为积极推动国内cortex-M3 技术的普及, 特举办” ARM Cortex-M3高校普及计划” 活动,积极促进中国嵌入式教育行业发展及嵌入式人才培养! Cortex-M3是ARM公司推出的最新的针对微控制器应用的内核,提供业界领先的高性能和低成本的解决方案,将成为MCU应用的热点和主流。英蓓特此次举办的” ARM Cortex-M3高校普及计划” 旨在全国各区范围内严格甄选20所较具实力的院校作为赠送对象,每所院校赠送10套Cortex-M3教学实验平台,无偿帮助受赠高校成立嵌入式联合实验室,同时也会提供专业的师
[单片机]