这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » NUCLEO-U083RC学习历程24-使用中断的模式触发内部比较器

共1条 1/1 1 跳转至

NUCLEO-U083RC学习历程24-使用中断的模式触发内部比较器

助工
2025-02-03 20:35:26     打赏

今天继续对STM32系列的比较器(comp)进行深入的学习

一:学习内容:在中断模式下,如何使用比较器外设将施加在 GPIO 引脚上的电压电平与内部电压参考 (VrefInt) 进行比较;

硬件连接:使用PA1引脚作为COMP的正输入端;

可以使用外部电源产生 [0V;3.3V] 范围内的电压,并将其连接到模拟输入引脚(PA1引脚位置)。

注意:在浮空状态下,即PA1引脚没有接入电压时,会导致内部的COMP的输出不稳定。这点在我们调试代码时候要格外注意。

比较器实例 COMP1 配置为比较:

input plus 设置为模拟模式下的 GPIO 引脚(下面的 cf 引脚)。

input minus 设置为内部电压基准 VrefInt(电压电平 1.2V,有关最小值/typ/max 值,请参阅器件数据表)当触发边沿设置为边沿上升和下降时,使能比较器中断。

二:STM32 cube mx 软件配置

0203-1.png

这里的配置需要区分一下,上个章节的配置,这里仅仅使用PA1引脚,直接使用的外部输入电压与内部基准进行比较;

而内部基准电压:可以为1/4,1/2,3/4的基准电压。

三:软件代码如下所示:

static void MX_COMP1_Init(void)
{

  /* USER CODE BEGIN COMP1_Init 0 */

  /* USER CODE END COMP1_Init 0 */

  /* USER CODE BEGIN COMP1_Init 1 */

  /* USER CODE END COMP1_Init 1 */
  hcomp1.Instance = COMP1;
  hcomp1.Init.InputPlus = COMP_INPUT_PLUS_IO3;
  hcomp1.Init.InputMinus = COMP_INPUT_MINUS_VREFINT;
  hcomp1.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
  hcomp1.Init.WindowOutput = COMP_WINDOWOUTPUT_EACH_COMP;
  hcomp1.Init.Hysteresis = COMP_HYSTERESIS_MEDIUM;
  hcomp1.Init.BlankingSrce = COMP_BLANKINGSRC_NONE;
  hcomp1.Init.Mode = COMP_POWERMODE_HIGHSPEED;
  hcomp1.Init.WindowMode = COMP_WINDOWMODE_DISABLE;
  hcomp1.Init.TriggerMode = COMP_TRIGGERMODE_IT_FALLING;
  if (HAL_COMP_Init(&hcomp1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN COMP1_Init 2 */

  /* USER CODE END COMP1_Init 2 */

}

编写中断函数如下所示:

void HAL_COMP_TriggerCallback(COMP_HandleTypeDef *hcomp)
{
  /* Set LED state in function of comparator output level */
  if (HAL_COMP_GetOutputLevel(hcomp) == COMP_OUTPUT_LEVEL_HIGH)
  {
    BSP_LED_On(LED4);
  }
  else
  {
    BSP_LED_Off(LED4);
  }
}

程序执行说明:

在主程序执行中,使能 comparator 。每当施加在 GPIO 引脚(比较器输入加)上的电压电平超过 VrefInt 电压阈值(比较器输入减)时,比较器就会产生中断。

LED4 用于监控程序执行状态:

正常执行情况如下所示:

如果 input plus 上的比较器电压电平高于 input -,则 LED 亮起

如果输入正上的比较器电压电平低于输入减,则 LED 熄灭

实物测试图片如下所示:

0203-2.jpg

第二部分:

当系统进入停止模式后,依然可以通过比较器的中断依然正常工作;

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    /* Insert 5 second delay */
    HAL_Delay(5000);
    
    /* Enter STOP mode */
    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
    
    /* ... STOP mode ... */
  

    /* Re-configure the system clock */
 //   SystemClock_Config();
  }





关键词: NUCLEO-U083RC     比较器     中断模式    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]