STM32驱动看门狗的时钟源
时间: 2023-12-19 13:25:37 浏览: 63
STM32的看门狗模块可以使用内部或外部时钟源。内部时钟源通常是LSI(低速内部时钟)或LSI(高速内部时钟),外部时钟源可以是LSE(低速外部时钟)或HSE(高速外部时钟)。选择时钟源的具体方式取决于应用的需求和系统的设计。一般来说,内部时钟源可以提供较为稳定的时钟信号,而外部时钟源则可以提供更高的精度和稳定性。在STM32的看门狗模块中,可以通过寄存器配置来选择时钟源,并设置提前或滞后的时间来触发看门狗复位。
相关问题
stm32独立看门狗程序
以下是一个简单的STM32独立看门狗程序:
```
#include "stm32f10x.h"
void IWDG_Configuration(void);
int main(void)
{
IWDG_Configuration();
while(1)
{
// do something
// 如果程序出现死循环或者停止运行,独立看门狗会在一定时间后复位系统
}
}
void IWDG_Configuration(void)
{
// 开启看门狗时钟
RCC_LSICmd(ENABLE);
// 等待看门狗时钟就绪
while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);
// 看门狗定时器预分频值为256
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
IWDG_SetPrescaler(IWDG_Prescaler_256);
// 看门狗定时器计数器重载值为625
IWDG_SetReload(625);
// 使能看门狗
IWDG_Enable();
}
```
这个程序通过开启STM32内部的LSI(低速内部)时钟来驱动看门狗定时器,预分频值为256,重载值为625,因此看门狗的计时周期为256 * 625 / 40000 = 4秒。在主函数的while循环中,当程序出现死循环或停止运行时,独立看门狗会在4秒后复位系统。
STM32 独立看门狗使用 40Khz 低速时钟驱动,通过设置 IWDG_PR 和 IWDG_RLR 寄存器可以修 改看门狗溢出时间。请写一个初始化函数 IWDG_Init 将看门狗溢出
时间设置为1秒,并使能看门狗。
```c
void IWDG_Init(void)
{
// 使能看门狗时钟
RCC->CSR |= RCC_CSR_IWDG1RSTF;
RCC->CSR &= ~RCC_CSR_IWDG1RSTF;
RCC->APB1ENR1 |= RCC_APB1ENR1_IWDG1EN;
// 配置看门狗预分频器和重载寄存器,使溢出时间为1秒
IWDG->KR = 0x5555; // 开启对寄存器的写操作
IWDG->PR = 6; // 预分频器值,40KHz / 64 = 625Hz
IWDG->RLR = 625; // 重载寄存器值,1秒 / 625Hz = 625
// 使能看门狗
IWDG->KR = 0xCCCC; // 启动看门狗
}
```
注意,在 STM32 中,看门狗定时器 IWDG 的时钟源只能是内部低速时钟 LSI,其频率为 40KHz,相应的 IWDG 定时器最大溢出时间为 32768 / 40KHz = 819.2ms。因此,如果需要设置更长的看门狗超时时间,可以考虑使用外部看门狗(WWDG)或者使用硬件定时器。
阅读全文