Proteus8.9 仿真STM32407ZGT6系列004_独立看门狗
什么是stm32看门狗?独立看门狗和窗口看门狗工作原理解析

什么是stm32看门狗?独立看门狗和窗口看门狗工作原理解析独立看门狗是限制喂狗时间在0-x内,x由你的相关窗口看门狗,所以称之为窗口就是因为其喂狗时间是一个有上下限的范围内,你可以通过设定相关寄存器,设定其上限时间和下限时间。
喂狗的时间不能过早也不能过晚。
窗口看门狗的上窗口就是配置寄存器WWDG->CFR里设定的W[6:0];下窗口是固定的0x40;WWDG_SetPrescaler(WWDG_Prescaler_8);void NVIC_Configuration(void)void EXTI_Configuration(void)在Stm32f10x_it.c文件中:void WWDG_IRQHandler(void)void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line9) != RESET)
{
/* Turn off led connected to PC.07 */
GPIO_WriteBit(GPIOC, GPIO_Pin_7, Bit_RESET);
/* As EXTI line9 pending bit is not cleared, the CPU will execute indefinitely
this ISR and when the WWDG counter falls to 3Fh the WWDG reset occurs */
}
}。
Proteus8.9 仿真STM32407ZGT6系列009_PWM多路可调占空比输出

图6 五,Main.c 代码: /* Main.c file generated by New Project wizard
* Author: Ziegler Yin * Created: 周四 一月 16 2020 * Processor: STM32F407ZGT6ZGT6 * Compiler: GCC for ARM */ #include "mfuncs.h"
while(1) {
wd[0]=lnslt[status]; wd[1]= 0; uprint("Arm 运行时......占空比"); uprint(wd); uprint("线路可调整状态:\r\n"); if(1==ReadKey(GPIOC, 0x0080)) {
status++; delay_ms(20); if(status> 4) status= 0; wd[0]=lnslt[status]; wd[1]= 0; uprint("线路调整状态......占空比"); uprint(wd); uprint("线路可调整状态:\r\n"); } if(1==ReadKey(GPIOC, 0x0010)) { LED0= 1; pwmval= gt_fig(status); gtln= nmtoa(wds, 10, pwmval);
timer.c 代码:
#include "mfuncs.h" #include "timer.h" #include "led.h"
void PWM_GPIO(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
如何设计STM32单片机独立看门狗程序?

如何设计STM32单片机独立看门狗程序?[导读]今天要学习的是独立看门狗,看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O 引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位。
即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
今天要学习的是独立看门狗,看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位。
即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
1.1独立看门狗简介看门狗定时器 (WDT,Watch Dog Timer)是单片机的组成部分,它实际上是一个计数器,一般给看门狗一个数值,程序开始运行后看门狗开始倒计时。
如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始计数,也就是所谓的“喂狗”。
如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。
独立看门狗由专用低速时钟(LSI)驱动,计时主时钟发生故障它也仍然有效。
看门狗主要是用于在发生系统软件故障时,将系统复位。
也可以用于将系统从休眠或空闲模式唤醒。
PROTEUS仿真教程

PROTEUS仿真教程第一步:安装PROTEUS软件第二步:创建新项目在PROTEUS软件中,您可以创建新项目来开始您的电路仿真工作。
点击菜单栏中的“File”选项,选择“New Project”来创建一个新项目。
然后输入项目的名称并选择保存路径。
第三步:添加元件在PROTEUS软件中,您可以通过“Library”选项来选择各种电子元件,包括电阻、电容、电压源等。
点击“Library”选项,选择您需要的元件并将其拖动到工作区中。
连接元件之间的引脚以搭建电路。
第四步:设置仿真参数在搭建完电路后,您需要设置仿真参数。
点击菜单栏中的“Graph”选项,选择“Set Simulator Parameters”来设置仿真参数,包括仿真时间、步长等。
您还可以设置输出波形的显示格式和范围。
第五步:运行仿真设置好仿真参数后,点击菜单栏中的“Simulate”选项,选择“Run”来运行仿真。
PROTEUS将模拟您搭建的电路,并显示仿真结果。
您可以查看电压、电流等参数,并分析电路的工作情况。
第六步:调试电路在仿真过程中,您可能会发现电路存在问题,比如输出波形不符合预期,电流过大等。
您可以通过调试电路来解决这些问题。
尝试更改元件参数、连接方式等,并重新运行仿真来检查效果。
第七步:保存和导出仿真结果在完成仿真后,您可以保存仿真结果并导出到其他格式。
点击菜单栏中的“File”选项,选择“Save As”来保存仿真文件。
您还可以导出波形图、数据表等结果,以便后续分析和报告。
总结:本教程介绍了PROTEUS的基本功能和使用方法,帮助您快速上手该软件进行电路仿真工作。
通过创建新项目、添加元件、设置仿真参数、运行仿真、调试电路和保存结果,您可以轻松完成电路仿真工作。
希望本教程对您有所帮助,祝您在PROTEUS软件中取得成功!。
独立看门狗

广州星翼电子
官方淘宝店:
技术支持论坛:
看门狗
在微型计算机系统中,由于处理器的工作常常会 受到来自外界电磁场的干扰,造成程序的跑飞,而陷 入死循环,程序的正常运行被打断,由处理器所控制 的系统无法继续工作,会造成整个系统的陷入停滞状 态,发生不可预料的后果,所以出于对处理器运行状 态进行实时监测的考虑,便产生了一种专门用于监测 处理器程序运行状态的模块或者芯片,俗称“看门 狗”(watchdog) 。
比如我们设定 prer 值为 4,rlr值为 625 ,那么就可以得到, Tout=64×625/40=1000ms
(3)重载计数值喂狗 IWDG_ReloadCounter(); (4)启动看门狗 IWDG_Enable一个倒计数计数器,启动看门狗之后,计数器从其 复位初值0xFFF递减计数,当计数到末尾0x000的时候,便产生一个 复位信号,使处理器复位。 独立看门狗是时钟源是低速内部时钟,时钟频率是40KHz。在STM32 系统时钟发生故障的时候,它仍然有效。独立看门狗的溢出时间是 由预分频寄存器(IWDG_PR)和计数值重载寄存器(IWDG_RLR)决定 的。 STM32里面有一个预分频寄存器(IWDG_PR),用来设置看门狗时钟 的分频系数。 STM32有一个计数值重载寄存器IWDG_RLR,可以用来为倒计数计数 器加载初值。 STM32有一个键值寄存器(IWDG_KR) ,无论何时,只要往键值寄存 器写入0xAAAA,重载寄存器IWDG_RLR的值就会被重新加载到计数器, 从而避免看门狗复位。 这也就是我们常说的喂狗。
编程步骤:
(1)IWDG_PR和IWDG_RLR寄存器具有写保护功能。要想对这两个寄存器执 行写操作,必须先取消写保护。 IWDG_WriteAccessCmd(WriteAccess_Enable); (2)设置独立看门狗的预分频系数和重装载值; 设置看门狗的分频系数函数是: void IWDG_SetPrescaler(uint8_t Prescaler) 设置看门狗的重装载值函数是: void IWDG_SetReload(uint16_t Reload)
stm32独立看门狗操作寄存器 库函数

stm32 独立看门狗[操作寄存器+库函数]以单片机为核心的微型计算机系统中,单片机经常会受到来自外界电磁场的干扰。
造成程序跑飞,只是程序的正常运行状态被打断而进入死循环,从而使单片机控制的系统无法正常工作。
看门狗就是一种专门用于检测单片机程序运行状态的硬件结构。
stm32也是如此。
stm32 的独立看门狗由内部专门的40Khz低速时钟驱动,即使主时钟发生故障时,它也仍然有效。
这里需要注意的是独立看门狗的时钟是一个内部时钟,所以不是准确的40Khz,而是在30~60Khz之间的一个可变化的时钟,看门狗的时钟对时间的要求不是很精确,所以时钟有偏差可以接受。
本例直接操作寄存器实现验证独立看门狗的复位功能,设定一个800ms的喂狗时间,在主函数中实现LED闪烁,如果设定一个1s的延时,则触发独立看门狗复位,LED常亮。
库函数实现当外部中断发生(按下PA0按键),长时间不喂狗,引发独立看门狗复位时,向外用串口输出复位提示。
直接操作寄存器使用独立看门狗,需要了解一下寄存器:键值寄存器:(IWDG_KR)低16位有效的寄存器,只写寄存器,读出值恒为0x0000. 软件必须以一定的间隔写入0xAAAA,否则,当计数器为0时,看门狗会产生复位。
写入0x5555表示允许访问IWDG_PR和IWDG_RLR寄存器。
写入0xCCCC,启动看门狗工作。
预分频寄存器:(IWDG_PR)第三位有效寄存器,用于设置看门狗的分频系数,最低为4,最高位256.通过设置PR[2:0]:位来选择计数器时钟的预分频因子。
要改变预分频因子,IWDG_SR寄存器的PVU位必须为0。
000: 预分频因子=4100: 预分频因子=64001: 预分频因子=8101: 预分频因子=128010: 预分频因子=16110: 预分频因子=256011: 预分频因子=32111: 预分频因子=256重装载寄存器:(IWDG_RLR)低12位有效,RL[11:0]。
stm32f407zgt6中文资料

STM32程序设计案例教程:《STM32程序设计案例教程》是2019年电子工业出版社出版的图书,作者是欧启标。
内容简介:本书系统介绍了STM32程序设计的基础知识和实战技巧。
本书案例丰富、结构清晰、实用性强。
本书可作为高职高专院校电类专业学生的教材使用,也可供相关工程技术人员作为参考用书。
目录:项目1 STM32的开发步骤及STM32的GPIO端口的输出功能(1)任务1-1 控制一颗LED发光二极管闪烁(1)1.1 初步认识STM32的GPIO端口的输出功能(10)1.2 寄存器及其地址信息(15)1.3 volatile修饰符的使用及寄存器定义(17)习题1 (18)项目2 认识模块化编程(19)任务2-1 控制一颗LED发光二极管闪烁(19)2.1 模块化编程(24)2.2 其他C语言注意事项(25)2.2.1 用#define和typedef定义类型别名(25)2.2.2 一些常见的运算符问题(25)2.2.3 文件包含(26)2.2.4 关于注释(27)习题2 (28)项目3 认识STM32的存储器结构(29)任务3-1 LED0闪烁控制(29)3.1 存储器基础知识(30)3.2 Cortex-M4内核和STM32的存储器结构(31)3.2.1 Cortex-M4内核的存储器结构(31)3.2.2 STM32的存储器结构(33)3.2.3 位带(Bit Band)及位带别名区(Bit Band Alias)的关系(37)3.3 结构体在STM32中的应用(40)3.4 通用的I/O端口功能设置函数的设计(42)任务3-2 跑马灯的实现(44)习题3 (47)项目4 精确延时的实现—SysTick 定时器的原理及其应用(48)任务4-1 蜂鸣器发声控制(48)4.1 SysTick定时器介绍(52)4.2 嘀嗒定时器的延时应用(55)习题4 (57)项目5 机械按键的识别——初步认识GPIO端口的输入功能(58)任务5-1 识别机械按键的按下与弹起(58)5.1 STM32的GPIO端口的数据输入功能(65)5.1.1 GPIO端口位的数据输入通道(65)5.1.2 GPIO端口位的输入配置及上/下拉电阻使能(66)5.2 按键状态的判断(67)习题5 (68)项目6 深入了解STM32F407的时钟系统(69)6.1 STM32F4的时钟系统简介(69)6.2 STM32F4的时钟系统(69)6.3 STM32F4的系统时钟和各模块时钟(72)6.3.1 系统时钟SYSCLK (72)6.3.2 由SYSCLK模块提供时钟源的时钟(73)6.3.3 RCC模块的相关寄存器及其作用(75)习题6 (77)项目7 认识STM32的串口结构(78)任务7-1 使用STM32的串口向PC端发送字符串(78)7.1 串口基础知识(83)7.2 STM32的串口结构(84)7.3 引脚复用(90)7.4 端口初始化函数的重新组织(93)习题7 (95)项目8 STM32F407的中断管理(96)任务8-1 使用STM32的外部中断(96)8.1 内嵌中断向量控制器NVIC对中断的控制(102)8.1.1 STM32的中断源(102)8.1.2 STM32的中断使能控制(105)8.1.3 STM32的中断优先级(106)8.1.4 中断函数接口及中断函数的实现(112)8.2 外部中断(113)8.2.1 外部中断的中断源(113)8.2.2 外部中断的设置(114)习题8 (116)项目9 认识STM32的定时器(118)任务9-1 使用定时器中断控制LED0的闪烁(118)9.1 STM32的定时器概述(122)9.2 TIM3内部结构及其计数原理(122)9.2.1 TIM3的内部结构(122)9.2.2 STM32定时器的定时原理(124)9.3 定时器中断的实现(127)9.4 应用定时器产生PWM调制信号(128)9.4.1 TIM14的PWM调制原理(130)9.4.2 TIM14产生PWM信号涉及的寄存器(132)9.4.3 TIM14产生PWM信号的实现流程(133)任务9-2 使用TIM14产生周期为500s、占空比为80%的脉冲信号(134)习题9 (136)项目10 认识STM32的独立看门狗(137)任务10-1 认识STM32的独立看门狗的工作原理(137)10.1 看门狗电路概述(140)10.2 STM32F407的看门狗电路(140)10.3 独立看门狗相关的寄存器(141)10.4 独立看门狗的设置、启动及工作流程(142)习题10 (143)项目11 认识STM32F407的实时时钟(144)任务11-1 认识STM32的RTC (144)11.1 RTC实时时钟介绍(149)11.2 STM32的RTC的工作原理(149)11.3 STM32的RTC的操作步骤(153)习题11 (155)项目12 STM32迷你开发板电路设计(156)项目13 认识ARM处理器(161)13.1 架构简介(161)13.2 Cortex-M4的操作状态、工作模式和访问等级(161)13.3 数据长度(162)13.4 存储器大小端(162)13.5 Cortex-M4的寄存器(163)13.6 堆和栈的概念(166)13.7 内存分配(167)习题13 (170)项目14 汇编语言基础和Cortex-M4指令集(172)14.1 汇编语言基础(172)14.2 Cortex-M4的指令集(174)14.3 Cortex-M4的伪操作和伪指令(180)14.3.1 伪操作(180)14.3.2 伪指令(186)习题14 (187)项目15 认识启动文件startup_stm32f40_41xxx.s (188)习题15 (191)附录A STM32F407ZGT6的引脚结构与功能(192)附录B STM32F407ZGT6核心电路设计(203)附录C STM32F407ZGT6外围电路设计(204)附录D 关于编译信息的解释(205)参考文献(207)。
Proteus8.9 仿真STM32407ZGT6系列006_中断

#endif
key.c 代码:
include "key.h"
#include "delay.h"
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);//使能 GPIOB 时钟
GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_DOWN ;//下拉
GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化
}
key.h 代码:
#ifndef __KEY_H
#define __KEY_H
#include "sys.h"
#define KEY0
图 10
九, 系列的 001-003 虚拟仿真与开发板对应已证明:虚拟仿真程序对于开发板有效,之后不再➕上 下载到开发板的介绍。
附件 Proteus8.9 仿真 STM32407ZGT6 系列 006_中断在已安装 Proteus8.9 的计算机文件夹中打开即可
PBin(3)
//PB3
void KEY_Init(void);
//IO 初始化
#endif
六,点击构建工程按钮,编译工程。(如下图 6 所示)
图6
七,点击窗口左下方仿真按钮,可见黄灯点亮仿真,按下按钮,中断仿真。 (如下图 7,8,9 所示)
ቤተ መጻሕፍቲ ባይዱ图7
图8
图9
八,选择 release,点击构建工程按钮,编译工程生成 Hex 文件。(如下图 10 所示)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
led.h 代码:
#ifndef __LED_H #define __LED_H #include "sys.h" //LED 端口定义 #define LED0 PBout(6) // LED0 #define LED1 PBout(8) // LED1 void LED_Init(void);//初始化
//GPIOF9,F10 初始化设置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6| GPIO_Pin_8;//LED 对应引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
GPIO_InitStructure.GPIO_OType= GPIO_OType_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
led.c 代码:
#include "led.h" void LED_Init(void) {
GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能 GPIOB 时钟
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_3; //KEY0 对应引脚
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IN;//普通输入模式
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_100MHz;//100M
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
IWDG_SetPrescaler(prer); IWDG_SetReload(rlr); IWDG_ReloadCounter();//reload
IWDG_Enable(); } void IWDG_Feed(void) {
GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_DOWN ;//下拉
GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化 GPIOE4
}
key.h 代码:
#ifndef __KEY_H
#define __KEY_H
#include "sys.h"
图5 五,Main.c 代码: #include "stm32f4xx_conf.h" #include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "key.h" #include "iwdg.h" int main(void) {
#endif
key.c 代码:
#include "key.h"
#include "delay.h"
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);//使能 GPIOB 时钟
八,选择 release,点击构建工程按钮,编译工程生成 Hex 文件。(如下图 10 所示)
图 10
九, 系列的 001-003 虚拟仿真与开发板对应已证明:虚拟仿真程序对于开发板有效,之后不再➕上 下载到开发板的介绍。
一,打开文件(可以随文下载放置在文档中打开)。(如下图 1 所示)
图1
二,调整虚拟器件,另存工程文件。(如下图 2,3 所示)
图2
图3
三,点击 Source Code 标签。(如下图 4 所示)
图4
四,编辑 main.c,iwdg.c,iwdg.h,key.c,key.h,led.c,led.h 代码如 Proteus8.9 仿真 STM32407ZGT6 系列 001(如下图 5 所示)
LED0=~PBin(6); LED1=0;
IWDG_ReloadCounter();//reload }
iwdg.h 代码:
#ifndef _IWDG_H #define _IWDG_H #include "sys.h" ////////////////////////////////////////////////////////////////////////////////// void IWDG_Init(u8 prer,u16 rlr); void IWDG_Feed(void); #endif
IWDG_Feed(); } delay_ms(10); }; }
iwdg.c 代码:
#include "iwdg.h" #include "led.h" ////////////////////////////////////////////////////////////////////////////////// void IWDG_Init(u8 prer,u16 rlr) {
#define KEY0
PBin(3)
//PB3
void KEY_Init(void); //IO 初始化
#endif
六,点击构建工程按钮,编译工程。(如下图 6 所示) Nhomakorabea图6
七,点击窗口左下方仿真按钮,可见黄灯点亮仿真,按下按钮,进行喂狗,开始跳闪仿真。(如下图 7,
8,9 所示)
图7 图8
图9
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); delay_init(168); LED_Init(); KEY_Init(); delay_ms(500); IWDG_Init(4,1000); LED0=0; LED1=1; while(1) {
if(KEY0 ==1) {