一、硬件选型和原理图
BL1551模拟开关,封装SC70-6_bl1551中文资料-CSDN博客
看门狗定时器实测-CSDN博客

1.1 BL1551B
为NRES引脚输入低电平使单片机复位
- 当ENB为高电平时,B连接到A1
- 当ENB为低电平时,B连接到A2
1.2 TPS3823
带看门狗计时器的 TPS382x 电压监视器 datasheet (Rev. N)
二、软件设计
2.1 初始化
通过控制单片机与BL1551B连接的引脚的高低电平来控制看门狗的启停
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| void WDOG_Port_Init(void) { GPIO_InitTypeDef GPIO_InitStructure = {0};
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitStructure.Pin = WDOG_EN_PIN; GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStructure.Pull = GPIO_PULLUP; GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(WDOG_EN_PORT, &GPIO_InitStructure); GPIO_InitStructure.Pin = WDI_PIN; GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(WDI_PORT, &GPIO_InitStructure); }
void WDOG_Enable(void) { HAL_GPIO_WritePin(WDOG_EN_PORT,WDOG_EN_PIN,GPIO_PIN_RESET); }
void WDOG_Disnable(void) { HAL_GPIO_WritePin(WDOG_EN_PORT,WDOG_EN_PIN,GPIO_PIN_SET); }
void WDOG_Feed(void) { HAL_GPIO_TogglePin(WDI_PORT,WDI_PIN); }
|
2.1 喂狗任务
1 2 3 4 5 6 7 8 9 10 11
| void WDOGFeedTask(void *argument) { WDOG_Port_Init(); while(1) { WDOG_Feed(); WDOG_Enable(); osDelay(100); } }
|