一、硬件选型和原理图

BL1551模拟开关,封装SC70-6_bl1551中文资料-CSDN博客

看门狗定时器实测-CSDN博客

image-20250302141027190

1.1 BL1551B

NRES引脚输入低电平使单片机复位

  • 当ENB为电平时,B连接到A1
  • 当ENB为电平时,B连接到A2

1.2 TPS3823

带看门狗计时器的 TPS382x 电压监视器 datasheet (Rev. N)

  • 引脚1(RESET#):低电平复位输出

  • 引脚4(WDI):看门狗计时器输入。如果 WDI 保持高电平或低电平的时间超过超时周期, 则会触发复位。当复位生效或 WDI 出现上升沿或下降沿时,计时器将清 零。如果未使用,WDI 连接必须为高阻抗,以防其引起复位事件

    image-20250304200017544

二、软件设计

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};

/* GPIO Ports Clock Enable */
__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)
{
//owdg
WDOG_Port_Init(); //YDW 看门狗相关引脚初始化
while(1)
{
WDOG_Feed(); // 喂看门狗 翻转引脚电平
WDOG_Enable();// 启用看门狗 拉低引脚电平
osDelay(100);// 100ms喂一次
}
}