看门狗是防止程序跑飞的一种兜底方案,STM32有自己片内的独立看门狗和串口看门狗,但是很意外的发现我测试片内的看门狗不好用,关闭了一扇门的同时,我又发现了一扇窗,板子上有SP706S外部看门狗芯片,那么STM32 SP706S的测试就应运而生。

STM32和SP706S的电路部分说明示意图

关于SP706S的文档描述

对于SP706S来说,WDI是输入,那么对于STM32来说,对应连接的STM32引脚PA0就是输出(推挽输出)。

图中红框描述的意思是如果WDI这个引脚持续高电平或持续低电平到1.6秒的时间,内部看门狗定时器就会WDO(上划线)持续低电平。从上面的示意图可以看出WDO(上划线)和MR(上划线)连接在一起;RESET(上划线)又和STM32的NRST连接在一起,也就是说 RESET(上划线)决定了STM32的复位效果。

总结一下,从STM32这个角度出发,如果初始化了PA0为推挽输出,即使能了外部看门狗,PA0需要再1.6s内变化一次高低电平实现喂狗,否则STM32程序就会被复位。

按照上述思路,编写测试工程代码来进行验证。

根据板子现有的资源2个LED灯,一个拨码开关。要实现测试效果的描述:

程序开始,初始化LED和拨码开关的GPIO,延时2秒钟,这时候LED灯有2秒是灭的状态。再使能看门狗,即设置PA0的GPIO为推挽输出。程序进入循环,循环中判断拨码开关的状态,如果是1就喂狗,否则就不喂狗。紧接着LED1和LED2亮灭,延时了400毫秒。

测试过程,程序编译下载,最初拨码开关是0的状态,即不喂狗,程序执行的现象是LED有2秒灭,然后亮灭闪烁4次左右,就又灭了2秒,再次执行这个过程。即SP706S外部看门狗起作用了,STM32程序重启了。再将拨码开关调为1的状态,程序不断亮灭,没有2秒左右的灭的现象,说明程序喂狗成功。

测试的主函数代码

#ifndef __STM32F10X_H
#define __STM32F10X_H
#include "stm32f10x.h"
#endif#ifndef __Z_UTIL_TIME_H
#define __Z_UTIL_TIME_H
#include "z_util_time.h"
#endif#ifndef __Z_HARDWARE_LED_H
#define __Z_HARDWARE_LED_H
#include "z_hardware_led.h"
#endif#ifndef __Z_HARDWARE_SWITCHKEYS_H
#define __Z_HARDWARE_SWITCHKEYS_H
#include "z_hardware_switchkeys.h"
#endif#ifndef __Z_HARDWARE_SP706S_H
#define __Z_HARDWARE_SP706S_H
#include "z_hardware_sp706s.h"
#endifvoid func_led_onoff_cross(void);int main()
{   init_led();init_switchkeys();delay_ms(2000);func_init_sp706s();for(;;){if(func_get_switchkey1() == 1){func_feed_dog();}func_led_onoff_cross();}}void func_led_onoff_cross()
{func_led1_on();func_led2_off();delay_ms(200);func_led2_on();func_led1_off();delay_ms(200);
}

z_hardware_sp706s.c

#ifndef __Z_HARDWARE_SP706S_H
#define __Z_HARDWARE_SP706S_H
#include "z_hardware_sp706s.h"
#endifvoid func_init_sp706s(void)
{GPIO_InitTypeDef GPIO_InitStructure_A;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);GPIO_InitStructure_A.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure_A.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure_A.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure_A);
}void func_feed_dog(void)
{if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0) == 0){GPIO_SetBits(GPIOA, GPIO_Pin_0);}else{GPIO_ResetBits(GPIOA, GPIO_Pin_0);}
}

z_hardware_sp706s.h

#ifndef __STM32F10X_H
#define __STM32F10X_H
#include "stm32f10x.h"
#endifvoid func_init_sp706s(void);
void func_feed_dog(void);

以上。

STM32 SP706S 外部看门狗的应用示例相关推荐

  1. STM32之独立看门狗与窗口看门狗总结

    一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...

  2. STM32之独立看门狗原理

    STM32的独立看门狗由内部专门的40Khz低速时钟驱动,即主时钟发生故障,它也仍然有效,这里我们需要注意独立看门狗的时钟不是准确的40Khz,二是在30~60Khz之间变化的一个时钟,只是我们估算以 ...

  3. [STM32 ]内部独立看门狗IWDG

    看门狗大家应该都不陌生,STM32内部带有独立看门狗和窗口看门狗两种:其中独立看门狗依赖于内部的晶振LSI进行工作,窗口看门狗依赖于系统时钟工作: 看门狗的作用,防止程序跑飞无法实现自复位而存在:如果 ...

  4. linux 内核定时器(低精度) — 外部看门狗程序

    文章目录 1 内核定时器介绍 2 定时器数据结构及函数 3 外部看门狗驱动使用定时器函数 1 内核定时器 Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序.延时程序等.硬件定时器 提供 ...

  5. stm32学习笔记---看门狗

    一.独立看门狗IWDG剖析 1.看门狗概述 看门狗定时器 看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个数字,程序开始运行后看门狗 ...

  6. STM32 HAL库 看门狗

    STM32之CubeL4独立看门狗 文章目录 STM32之CubeL4独立看门狗 一 看门狗简介 二 STM32内部看门狗 两个狗的区别 1. 独立看门狗(IWDG) 2.窗口看门狗(WWDG) 三. ...

  7. 辉为科技 ARM主板如何设计外部看门狗电路

    Atmel ARM9 系列 CPU 包括at91sam9260. at91sam9261. at91sam9263 等芯片都设计了内部看门狗,但由于该看门狗配置寄存器在上电后只能配置一次,而且系统启动 ...

  8. STM32学习(9)-看门狗,独立看门狗(相关的寄存器和函数),窗口看门狗(相关的寄存器和函数)

    1. 看门狗(watchdog)的作用: 实时检测单片机的程序运行状态,防止程序跑飞造成无法预料的结果. 2. STM32包含哪几个看门狗(独立看门狗和窗口看门狗) 3.独立看门狗 3.1 独立看门狗 ...

  9. 【STM32】独立看门狗程序

    00. 目录 文章目录 00. 目录 01. 独立看门狗简介 02. 程序功能示例 03. 硬件设计 04. 编程步骤 05. 程序示例 06. 附录 07. 声明 01. 独立看门狗简介 STM32 ...

最新文章

  1. (转)@ContextConfiguration注解说明
  2. RMAN简明教程之五——RMAN还原和恢复
  3. 【Android】不使用WebView来执行Javascript脚本(Rhino)
  4. C++学生信息管理系统V1(课后作业)
  5. Redis的List操作
  6. Java在开发中应注意的问题_Java设计编程应该注意的几个问题
  7. 【渝粤题库】国家开放大学2021春3700汽车电工电子基础题目
  8. osm数据下载 python_用Python解锁处理OSM数据的全部姿势
  9. compareTo的实现策略
  10. tushare数据分析(1)
  11. springboot GeoLite2-City.mmdb实现通过IP地址获取经纬度以及该IP的所属地区
  12. 计算机主机的税收,税控电脑
  13. 解决mysqld: [ERROR] Found option without preceding group
  14. 关于ONION/Wncry勒索病毒
  15. 通过nodejs 服务器读取HTML文件渲染到页面
  16. python画成绩正态分布图_正态分布为何如此重要?
  17. android国际化语言编码对照表
  18. 用于软件测试的最佳免费自动化工具
  19. 10053 事件详解
  20. DataWhale 组队学习爬虫 Task2

热门文章

  1. 【转】看完这篇,请不要再说不懂MOSFET
  2. 生成EXCEL(不使用模板)
  3. PE文件结构图解,比较牵强,仅为学习笔记,高手见笑
  4. 威眼局域网监控软件3.7.2发布
  5. 对英雄联盟比赛预测(二)- 数据获取api分析
  6. x86汇编_JE、JNE、JCXZ 和 JECXZ 指令_笔记_34
  7. 史上最强人工智能ChatGPT 到底有多强?
  8. 20172303 20172322 2017-2018-2 暑假作业 结对编程项目-舒尔特方格(增补:计时器的加入与页面优化)...
  9. 设计数据库中常见的规范
  10. 两轮电动车新物种来了,哈啰电动车智能新品ME70正式发布