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


    一、前因后果

    工程中,设备为了稳定可靠,会增加外部看门狗,但是外部看门狗一旦启动,就停不下来,必须在固定的时间范围内进行喂狗,不然看门狗芯片就会产生一个复位信号复位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 }
  • 相关阅读:
    递归的狂想(菜鸟的胡思乱想)
    关于fiddler的使用总结
    关于mac下 sublime 安装配置java及运行java个人建议
    关于VMwareFusion占用内存过多的问题提几点自己的解决方案
    (ubuntu)ubuntu的root密码设置
    Refactoring to Patterns 学习笔记2 为什么要重构?
    Refactoring to Patterns 学习笔记1 什么是重构?
    [转载]数据结构树之红黑树
    【转载】数据结构之图(存储结构、遍历)
    STL库之单链表:forward_list
  • 原文地址:https://www.cnblogs.com/icefree/p/9942844.html
Copyright © 2020-2023  润新知