看门狗芯片--SP706SEN--调试记录

本文详细解析了在工程实践中如何通过软件控制外部看门狗电路,避免因看门狗芯片产生的复位信号导致的MCU程序下载失败问题。文章介绍了利用WDI引脚的状态切换来启用和禁用看门狗功能的方法,并提供了具体的初始化和喂狗程序代码。
摘要由CSDN通过智能技术生成

一、前因后果

工程中,设备为了稳定可靠,会增加外部看门狗,但是外部看门狗一旦启动,就停不下来,必须在固定的时间范围内进行喂狗,不然看门狗芯片就会产生一个复位信号复位MCU。以前大家都认为看门狗一旦工作,就不能进行控制,也不便于程序调试,所以在硬件上,会使用单片机来控制看门狗芯片的电源,原理图如下:

最近在工程中由于MCU的复位信号一直是低电平,导致程序下不下去,最后查原因,发现是看门狗电路这一块造成的,然后就仔细看SP706SEN的手册,发现WDI引脚这样描述:如果WDI引脚处于浮空或高阻状态,则禁止看门狗功能;

二、程序处理

在程序中,初始化引脚时,把WDI初始化为浮空输入,当需要开启看门狗的时候,把WDI引脚设置为推挽输出,开启后,在定时器函数里翻转该引脚状态,以达到喂狗的目的,程序如下:

 1   /*Configure GPIO pin : PtPin */
 2   GPIO_InitStruct.Pin = WATCHDOG_FLAG_Pin;
 3   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;    
 4   GPIO_InitStruct.Pull = GPIO_NOPULL;
 5   HAL_GPIO_Init(WATCHDOG_FLAG_GPIO_Port, &GPIO_InitStruct);
 6 
 7 }
 8 
 9 /* USER CODE BEGIN 2 */
10 // 开启看门狗函数
11 void watchDogEN(void)
12 {
13   GPIO_InitTypeDef GPIO_InitStruct;
14   GPIO_InitStruct.Pin = WATCHDOG_FLAG_Pin;
15   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
16   GPIO_InitStruct.Pull = GPIO_NOPULL;
17   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
18   HAL_GPIO_Init(WATCHDOG_FLAG_GPIO_Port, &GPIO_InitStruct);
19 }
 1 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
 2 {
 3     if(htim == (&htim3))    // 定时1s
 4     {        
 5         HAL_GPIO_TogglePin(WATCHDOG_FLAG_GPIO_Port, WATCHDOG_FLAG_Pin);    // 喂狗
 6         HAL_GPIO_TogglePin(RUN_GPIO_Port, RUN_Pin);
 7     }
 8     else if (htim == (&htim4))
 9     {        
10         SensRxFlag = 1;
11     }
12 }

 

转载于:https://www.cnblogs.com/icefree/p/9942844.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值