当前位置: 首页 > news >正文

STM32基本定时器的启动和停止

文章目录

    • 需求背景
    • 实现目标
    • 核心代码实现
    • 实现效果

需求背景

在报警提示中,经常需要通过LED灯闪烁来提示报警,但是又需要人工解除报警,即取消LED灯闪烁。

在这个需求背景下,实现路径有两种:

  1. 轮询方式实现(简单但占用CPU)
  2. 中断方式实现(推荐,高效)

我们选择高效的中断方式实现,也便于和业务解耦。

实现目标

我们最终使用STM32F407ZGT6,选择基本定时器TIM6,用定时器的更新中断实现LED灯的闪烁,关闭定时器结束LED灯的闪烁。启动时,默认处于报警状态,即LED灯闪烁,可以通过按键Key0,解除报警,即关闭LED灯闪烁,通过按键Key1可以再次触发报警,即再次LED灯闪烁。

核心代码实现

//btim.h
#ifndef __BTIM_H
#define __BTIM_H#include "./SYSTEM/sys/sys.h"void btim_timx_int_init(uint16_t arr, uint16_t psc);
void clear_timx(TIM_HandleTypeDef *htim);#endif
//btim.c
#include "./BSP/TIMER/btim.h"
#include "./BSP/LED/led.h"TIM_HandleTypeDef g_timx_handle;/* 定时器中断初始化函数 */
void btim_timx_int_init(uint16_t arr, uint16_t psc)
{g_timx_handle.Instance = TIM6;                          /* 定时器6寄存器基地址 */g_timx_handle.Init.Prescaler = psc;                     /* 分频系数 */g_timx_handle.Init.Period = arr;                        /* 自动重装载值 */HAL_TIM_Base_Init(&g_timx_handle);HAL_TIM_Base_Start_IT(&g_timx_handle);                  /* 使能定时器和定时器更新中断并启动计数器 */
}/* 定时器基础MSP初始化函数,在HAL_TIM_Base_Start_IT中会被调用 */void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM6){__HAL_RCC_TIM6_CLK_ENABLE();                /* 开启定时器6时钟 */HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 1, 3);  /* 设置中断优先级,抢占优先级1,响应优先级3 */HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);          /* 开启中断使能,中断号IRQn */}
}/* 定时器6中断服务函数 */
void TIM6_DAC_IRQHandler(void)
{HAL_TIM_IRQHandler(&g_timx_handle);
}/* 定时器溢出中断中断回调函数 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM6){LED0_TOGGLE();}
}/* 关闭定时器 */
void clear_timx(TIM_HandleTypeDef *htim)
{HAL_TIM_Base_Stop_IT(htim);
}/* 在HAL_TIM_Base_Stop_IT中被调用 */
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM6){__HAL_RCC_TIM6_CLK_DISABLE();HAL_NVIC_DisableIRQ(TIM6_DAC_IRQn);}
}

实现效果

STM32按键实现启动和关闭定时器

相关文章:

  • Android中PID与UID的区别和联系
  • vue2 全局指令(输入框自定义限制)
  • 【C++】20. AVL树的实现
  • BU9792驱动段式LCD
  • 解决:dpkg: error: dpkg frontend lock is locked by another process
  • 光伏电站及时巡检:守护清洁能源的“生命线”
  • linux移植lvgl
  • 带您了解工业级网络变压器的浪涌等级测试有哪些条件?
  • Mistral AI 开源最新 Small 模型——Devstral-Small-2505
  • CATIA高效工作指南——常规配置篇(三)
  • 【Nature子刊聚焦:超构表面多维调控与AI驱动的设计革命 ——2024-2025年超构表面领域突破性进展速览 】
  • Day 29 训练
  • 免费在线AI聊天工具
  • 数据同步自动化——如何用Python打造高效工具?
  • 数学建模MathAI智能体-2025电工杯A题实战
  • Linux性能监控:工具与最佳实践
  • 双重攻击锁定饮料巨头,黑客组织宣称窃取可口可乐海量数据
  • JavaWeb面试题 (一)
  • Java 8 Lambda 表达式使用说明与案例
  • Java 集合框架核心知识点全解析:从入门到高频面试题(含 JDK 源码剖析)
  • 第一次做网站做后感/百度搜索引擎技巧
  • 仪征市建设发展有限公司网站/怎么建立网站平台
  • 网站加入悬浮客服/seo优化有哪些
  • 做网站时的尺寸/建立网站的流程
  • 中国十大电商公司/怎么关闭seo综合查询
  • 网站关键词标签/seo优化服务公司