如何配置和使用STM32的ADC模拟看门狗功能

1.简介

在大多数STM32的ADC(模数转换器)中,都有一个称为模拟看门狗的功能。在本文中,我们将学习如何使用STM32CubeIDE工具进行配置,以及如何在应用程序中使用它。
 

2.先决条件

  • 硬件
    • Micro USB电缆用于从主机为Nucleo板供电,并将代码加载到STM32中。
    • 核苷酸-L496
  • 软件:STM32CubeIDE
 

3.理论

在本文中,我们将使用STM32L496微控制器。如果您正在使用另一台STM32,请参阅参考手册,检查与本文中介绍的内容是否有任何差异。
首先,让我们回顾一下ADC的模拟看门狗功能。模拟看门狗监测某些通道是否保持在配置的电压范围(窗口)内。

您可以定义一个低阈值和一个高阈值,如上所示,这将定义您的“窗口”或防护区域。在本文中,我们将使用AWD1(模拟看门狗1)并在特定的模拟通道上启用它。我们将使用PA4作为启用AED1的模拟通道。我们将定义一个低阈值和高阈值。12位ADC位的全范围转换为4096。
在本文中,我们将使用以下阈值:
高阈值:3000
低阈值:1000
如果ADC转换的模拟电压低于低阈值或高于高阈值,则设置AWD1模拟看门狗状态位。将在PA4上连接并使用电位计来测试模拟看门狗的检测。如果转换后的值在模拟看门狗窗口之外,我们将启用AWD1上的中断以生成中断。如果通道上的转换值在窗口之外,我们将打开Nucleo板的LED LD2和LD3。

 

4.步骤 

  1. 打开STM32CubIDE

  2. 使用NUCLEO-L496ZG板创建新项目



 
  1. 为项目命名



 
  1. 单击Yes(是),用默认模式设置初始化所有外围设备


 
  1. 配置ADC1

我们将在第9频道PA4上进行连续转换模式。
ADC1可在STM32CubeIDE的引脚输出和配置选项卡中的“模拟”下找到。

  1. 启用ADC1通道9,这是PA4的备用功能

  1. 配置ADC1参数设置

我们将启用ADC1的连续转换模式,以便对通道进行连续转换。我们还希望覆盖数据,这样就不会发生溢出情况,因为我们不想在每次转换后都读取转换后的值。默认情况下,我们将保留其余配置。

 
  1. 更改通道9的采样时间


 
  1. 启用模拟看门狗1


 
  1. 配置模拟看门狗1

对于此配置,我们将在之前启用的通道9上选择一个常规通道看门狗模式。如前所述,我们将对模拟看门狗窗口使用以下阈值:
高阈值:3000
低阈值:1000
我们还将启用中断模式,以便在转换的通道在定义的窗口之外时生成中断。
  1. 启用ADC1中断

我们将使用ADC模拟看门狗的回调功能,因此需要为ADC1启用中断。

 
  1. 生成代码

保存项目,也将生成代码。
 
  1. 添加代码

我们现在将添加代码,以便在转换后的通道位于模拟看门狗窗口之外时打开LED。
在main.c中,添加以下变量的声明:
/*用户代码开始PV*/__IO uint16_t uhADCxConvertedValue=0;/*报告ADC模拟看门狗状态的变量:*//*RESET<=>电压进入AWD窗口*//*SET<=>电压离开AWD窗口*/uint8_t ubAnalogWatchdogStatus=RESET;/*设置为模拟看门狗中断回调*//*用户代码结束PV*/

在用户代码第4节中,添加ADC模拟看门狗模式的回调功能:
 
/*用户代码开始4*/**@在非阻塞模式下进行简短的模拟看门狗回调。*@param hadc:ADC句柄*@retval None*/void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef*hadc){/*设置变量以向主程序报告模拟看门狗窗口外状态*//*。*/uhADCxConvertedValue=HAL_ADC_GetValue(&hadc1);ubAnalogWatchdogStatus=Set;}/*用户代码END 4*/我们需要添加代码来启动ADC转换。/*用户代码开始2*/if(HAL_ADC_Start_IT(&hadc1)!=HAL_OK){Error_Handler();}/*用户代码结束2*/现在我们在主功能上添加代码,根据模拟看门狗事件打开或关闭LED LD2和LD3。/*用户代码开始时*/WHILE(1){/*根据ADC转换结果打开/关闭LED2和LED3*//*-如果电压进入AWD窗口则关闭*//*–如果电压超出AWD窗口则打开*//*模拟看门狗状态变量设置为模拟看门狗*//*中断回调*/if(ubAnalogWatchdogStatus==set){HAL_GPIO_WritePin(GPIOB,LD3_Pin|LD2_Pin,GPIO_Pin_set);}else{HAL_GPIO_WritePin(GPIOB,LD3_Pin|LD2_Pin,GPIO_Pin_RESET);}ubAnalogWatchdogStatus=重置;HAL_延迟(1);/*用户代码结束时*/
 
  1. 准备硬件设置

将电位计连接到Nucleo板的PA4,以便将引脚上的电压从VSS更改为VDD。
 
  1. 构建项目,进入调试模式并运行代码


项目生成后,进入调试会话,然后单击“继续”图标运行代码。


现在,如果您更改电位计的位置,您将看到LED将打开和关闭,这取决于转换后的通道是否在模拟看门狗窗口之外。
 

5.链接

STM32CubeIDE-STM32集成开发环境-STMicroelectronics
NUCLEO-L496ZG-STM32Nucleo-144开发板,带STM32L496ZGMCU,支持Arduino、ST Zio和。。。
STM32L47xxx、STM32L48xxx、STM22L49xxx和STM32L44xxx基于Arm®的高级32位MCU-参考手册。。。
产品介绍-STM32L496xx-超低功耗Arm®Cortex®-M4 32位MCU+FPU,100 DMIPS,高达1MB Flas。。。