STM32 独立看门狗使用 40Khz 低速时钟驱动,通过设置 IWDG_PR 和 IWDG_RLR 寄存器可以修 改看门狗溢出时间。请写一个初始化函数 IWDG_Init 将看门狗溢出
时间: 2024-02-01 07:13:24 浏览: 24
时间设置为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)或者使用硬件定时器。
相关问题
独立看门狗使用 40Khz 低速时钟驱动,通过设置 IWDG_PR 和 IWDG_RLR 寄存器可以修 改看门狗溢出时间。请写一个初始化函数 IWDG_Init 将看门狗溢出时间为2秒
下面是一个简单的 IWDG 初始化函数,将看门狗溢出时间设置为2秒:
```c
void IWDG_Init(void)
{
// 使能 IWDG 时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_IWDG, ENABLE);
// 配置 IWDG 计数器的预分频值,这里设置为 IWDG_PRESCALER_4
IWDG_SetPrescaler(IWDG_Prescaler_4);
// 配置 IWDG 计数器的重载值,这里设置为 2000,即 2 秒
IWDG_SetReload(2000);
// 使能 IWDG
IWDG_Enable();
}
```
需要注意的是,IWDG 的溢出时间不是精确的,可能会存在一定的误差。在实际使用中,需要根据具体的需求和实际情况来选择合适的溢出时间。此外,IWDG 的溢出时间不能太长,否则可能会导致系统无法及时响应故障。
stm32独立看门狗时间
STM32的独立看门狗(Independent Watchdog,IWDG)的时间是由IWDG的预分频器(IWDG_PR)和重装载寄存器(IWDG_RLR)来决定的。
IWDG的时钟源是内部LSI时钟(一般为40kHz),通过IWDG的预分频器(IWDG_PR)可以将时钟频率分频,以满足不同的需求。IWDG的预分频器是通过IWDG_PR寄存器来设置的,其取值范围为4~256,对应的分频系数为2~128。
IWDG的重装载寄存器(IWDG_RLR)用于设置IWDG的计数器最大值。当IWDG计数器的值达到IWDG_RLR的值时,IWDG会产生复位信号。因此,IWDG的计数时间可以通过IWDG_RLR寄存器的设置来决定。
IWDG计数器的值会在每个LSI时钟周期减1,当计数器的值减少到0时,IWDG会产生复位信号。因此,IWDG的计数时间可以通过如下公式来计算:
IWDG计数时间 = (IWDG_PR × IWDG_RLR) / LSI时钟频率
例如,如果IWDG_PR的值为64,IWDG_RLR的值为625,LSI时钟频率为40kHz,则IWDG的计数时间为:
(64 × 625) / 40000 = 1s
因此,IWDG的计数时间为1秒。