非F1系列就别找了,找不到。。。
独立看门狗编程实战各就备。Boom。开始。。。*V*
借用HAL库中的内容编写自己的函数。。。
接着编写主函数。。。
运行成功就是时间有一定的误差。。。
main.c
#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/IWDG/iwdg.h"
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
sys_stm32_clock_init(336, 8, 2, 7); /* 设置时钟,168Mhz */
delay_init(168); /* 延时初始化 */
usart_init(115200); /* 串口初始化为115200 */
printf("您还没有喂狗,请及时喂狗!!!\r\n");
iwdg_init(IWDG_PRESCALER_64, 500); /* 预分频数为64,重载值为500,溢出时间约为1s */
while(1)
{
delay_ms(1500);
//iwdg_init(IWDG_PRESCALER_64, 500); /* 预分频数为64,重载值为500,溢出时间约为1s */
iwdg_feed();
printf("已经喂狗!!!\r\n");
}
}
iwdg.h
#ifndef __IWDG_H
#define __IWDG_H
#include "./SYSTEM/sys/sys.h"
void iwdg_init(uint8_t prer,uint16_t rlr);
void iwdg_feed(void);
#endif
iwdg.c
#include "./BSP/IWDG/iwdg.h"
IWDG_HandleTypeDef g_iwdg_handle;
//IWDG初始化函数
void iwdg_init(uint8_t prer,uint16_t rlr){
g_iwdg_handle.Instance = IWDG;
g_iwdg_handle.Init.Prescaler = prer;
g_iwdg_handle.Init.Reload = rlr;
HAL_IWDG_Init(&g_iwdg_handle);
}
//喂狗函数
void iwdg_feed(void)
{
__HAL_IWDG_RELOAD_COUNTER(&g_iwdg_handle);
}