独立看门狗使用 40Khz 低速时钟驱动,通过设置 IWDG_PR 和 IWDG_RLR 寄存器可以修 改看门狗溢出时间。请写一个初始化函数 IWDG_Init 将看门狗溢出时间为2秒
时间: 2024-02-01 09:13:26 浏览: 86
下面是一个简单的 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 独立看门狗使用 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)或者使用硬件定时器。
解释一下这个代码 void IWDG_Init(u8 prer,u16 rlr) { IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对寄存器IWDG_PR和IWDG_RLR的写操作 IWDG_SetPrescaler(prer); //设置IWDG预分频值:设置IWDG预分频值为64 IWDG_SetReload(rlr); //设置IWDG重装载值 IWDG_ReloadCounter(); //按照IWDG重装载寄存器的值重装载IWDG计数器 IWDG_Enable(); //使能IWDG }
这段代码是初始化独立看门狗(IWDG)的函数定义。下面是这段代码的详细解释:
1. `IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);` 使能对寄存器IWDG_PR和IWDG_RLR的写操作,因为这两个寄存器默认情况下是只读的。
2. `IWDG_SetPrescaler(prer);` 设置IWDG预分频值,用来控制IWDG的计数频率。这里设置IWDG预分频值为64。
3. `IWDG_SetReload(rlr);` 设置IWDG重装载值,用来控制IWDG的计数周期。当IWDG计数器计数到该值时,就会产生复位信号。
4. `IWDG_ReloadCounter();` 根据IWDG重装载寄存器的值重装载IWDG计数器,以避免产生复位信号。
5. `IWDG_Enable();` 使能IWDG,使其开始计数。
这段代码的作用是初始化IWDG,并设置计数频率和计数周期,并使其开始计数。初始化IWDG后,如果在计数周期内系统出现异常,IWDG会产生复位信号,从而保护系统不崩溃。
阅读全文