STM32 HAL库学习系列第11篇---定时器TIM---看门狗基本配置及使用

本文介绍了STM32的HAL库中定时器TIM的看门狗配置,包括独立看门狗和窗口看门狗的基本设置。独立看门狗无中断,有硬件软件两种控制方式,而窗口看门狗具备中断功能,只能软件控制,且具有上下限。两者在计数位数和时钟源上也有所不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本配置

使用cube配置溢出时间

记住准时喂狗

独立看门狗:

 /* IWDG 1s 超时溢出 */  
MX_IWDG_Init(IWDG_PRESCALER_64,625);  
/* 启动独立看门狗 */  
HAL_IWDG_Start(&hiwdg);   
LED1_ON;   
/* while部分是我们在项目中具体需要写的代码,这部分的程序可以用独立看门狗来监控   * 如果我们知道这部        
   分代码的执行时间,比如是50ms,那么我们可以设置独立看门狗的     * 溢出时间是60ms,比50ms多一点,
   如果要被监控的程序没有跑飞正常执行的话,那么     * 执行完毕之后就会执行喂狗的程序,如果程序跑飞
   了那程序就会超时,到达不了喂狗的程序     * 此时就会产生系统复位。但是也不排除程序跑飞了又跑回来
   了,刚好喂狗了,歪打正着。     * 所以要想更精确的监控程序,可以使用窗口看门狗,窗口看门狗规定必
   须在规定的窗口时间内喂狗。   */    
   
   while(1)                           
{   
/*  这里添加需要被监控的代码,如果有就去掉按键模拟喂狗,把按键扫描程序去掉 */
/*------------------------------------------------------------------------*/                
   if( KEY1_StateRead() == KEY_DO
### 实现STM32 HAL和FreeRTOS环境中的定时器中断 在STM32 HAL和FreeRTOS环境下实现定时器中断涉及几个关键步骤。通过合理配置硬件抽象层(HAL)以及操作系统(FreeRTOS),可以确保定时器能够可靠触发并处理中断。 #### 配置定时器资源 为了使能特定定时器的全局中断,在NVIC设置页面中需勾选对应选项,例如对于TIM6定时器而言,则应开启`TIM6 global interrupt`[^2]。这一步骤通常由CubeMX工具自动生成相应初始化代码来完成,无需手动干预底层寄存器操作。 #### 初始化定时器 利用HAL提供的API接口对目标定时器进行参数设定,比如周期、预分频值等,并启动计数模式。这部分同样可以在CubeMX图形界面下轻松搞定,只需按照向导提示填写必要字段即可自动生成功能函数调用语句: ```c // 假设使用的是 TIM6 定时器 __HAL_RCC_TIM6_CLK_ENABLE(); // 使能定时器时钟 htim6.Instance = TIM6; htim6.Init.Prescaler = ...; // 设置预分频系数 htim6.Init.CounterMode = ... ; // 计数方向 htim6.Init.Period = ... ; // 自动重装载值 if (HAL_TIM_Base_Init(&htim6) != HAL_OK){ Error_Handler(); } ``` #### 创建定时器回调函数 当采用HAL开发时,实际并不需要直接定义传统的ISR(Interrupt Service Routine),而是应该关注于编写相应的回调(callback)函数。每当发生指定事件(如更新事件),该回调就会被执行。对于基于FreeRTOS的应用程序来说,这种方式特别有用,因为它允许开发者在一个安全上下文中执行任务调度逻辑而不会破坏内核稳定性: ```c void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { /* 用户在此处添加自己的业务逻辑 */ if(htim->Instance==TIM6){ osDelay(1); // 或者其他 FreeRTOS API 调用 } } ``` 上述方法不仅简化了编程模型还提高了系统的可移植性和维护性[^1]。 #### 整合FreeRTOS与定时器 如果项目中集成了FreeRTOS,那么建议尽可能选用除SysTick之外的时间基源作为系统滴答时钟(Tick Timer)[^3]。这是因为默认情况下SysTick被用来驱动RTOS本身的tick机制,将其用于其它目的可能会引起意想不到的问题。因此可以选择另一个独立看门狗(WWDG/Independent Watchdog IWDG)或者通用定时器(GPTIM)代替之。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeAllen嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值