STM32学习笔记---IWDG独立看门狗实验

发布者:leader5最新更新时间:2016-02-25 来源: eefocus关键字:STM32  IWDG  独立看门狗 手机看文章 扫描二维码
随时随地手机看文章
继做了WWDG窗口看门狗实验后,继续进行第9个实验-IWDG独立看门狗实验,本实验通过设置窗口看门狗IWDG间断时间来定期的检查是否出错,在SysTick_Handler中断函数中加入了流水灯用来测试是否运行了IDWG看门狗程序,用PD6-LED2通过闪烁验证程序可行性,编程工程大致和USART实验过程差不多,先是开启系统时钟,然后GPIO端口时钟,然后复用功能时钟AFIO,然后各个模块用的的时钟,,呵呵,之后进入各个模块初始化,设置,编写子程序,中断的话,要在中断函数中填写某模块的中断触发处理函数,重要的是在CONFG.H函数中开启模块的声明,差不多是这样的了。

以下为IWDG函数主要部分:

//IWDG窗口看门狗设置初始化
void IWDG_Config(void)

  //独立看门狗初始化
   IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//启动寄存器读写

   IWDG_SetPrescaler(IWDG_Prescaler_32);//40K时钟32分频

   IWDG_SetReload(349);                 //计数器数值

   IWDG_ReloadCounter();             //重启计数器

   IWDG_Enable();                       //启动看门狗
}
***********************************************************

注意事项:

i. 有狗平常没事情可以不理,但是千万别忘了喂它,否则死都不知道怎么死的!

ii. 初始化程序的调用一定要在systic的初始化之后。

iii. 独立看门狗需要systic中断来喂,但是systic做别的用处不能只做这件事,所以我写了如下几句代码,可以不影响systic的其他应用,其他systic周期代码也可参考:

第一步:在stm32f10x_it.c中定义变量

int Tic_IWDG;           //喂狗循环程序的频率判断变量

第二步:将SysTickHandler中喂狗代码改为下面:

Tic_IWDG++;          //变量递增

if(Tic_IWDG>=100)    //每100个systic周期喂狗

  IWDG_ReloadCounter();//重启计数器(喂狗)

   Tic_IWDG=0;       //变量清零

}

完整代码为

void SysTick_Handler(void)
{
  Tic_Val++;           //精确延时变量递增

  Tic_IWDG++;          //独立看门狗变量递增

  if(Tic_IWDG>=100)    //每100个systic周期喂狗

  
    IWDG_ReloadCounter();//重启计数器(喂狗)
    Tic_IWDG=0;       //变量清零

 switch(IWDGFLAG)
 {
 case 0:
  GPIO_SetBits(GPIOD, GPIO_Pin_6);
     break;
 case 1:
  GPIO_ResetBits(GPIOD, GPIO_Pin_6);
     break;
 default:
     break;
 }
 IWDGFLAG=!IWDGFLAG;

  }
}
以下为IWDG函数结果部分:






 

关键字:STM32  IWDG  独立看门狗 引用地址:STM32学习笔记---IWDG独立看门狗实验

上一篇:STM32时钟系统
下一篇:STM32的RTC配置和起振问题

推荐阅读最新更新时间:2024-03-16 14:45

浅谈关于STM32软硬件兼容性相关的知识
Ⅰ、写在前面 很多朋友初学STM32的时候,对STM32芯片很多相关知识都不是很了解,导致了在学习的路上很迷茫,甚至半途放弃。希望本文的内容对初学的朋友有一定帮助。 常见问题: 1.我开发板是STM32F103ZE芯片,但网上找到的软件工程基于STM32F103R8芯片的,我能直接将工程下载并调试吗? 2.我有STM32F205R8的原理图和封装库,但现在需要画STM32F405RC芯片的板子,能直接替换使用吗? 以上问题在你阅读本文之后就会得到比较明确的答案。 关于本文的更多详情请往下看。 Ⅱ、本文要点 从本文的标题可以看得出来,主要是站在“STM32兼容性”的角度来分析问题。 在开发STM32项目中,往往是软件工程师、硬件
[单片机]
浅谈关于<font color='red'>STM32</font>软硬件兼容性相关的知识
STM32学习——EXTI外部中断
EXTI简介 EXTI可以实现对外部输入信号的上升沿检测和下降沿的检测。EXTI可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。 可以看到EXTI一共有20条信号线,即可同时检测来自20路的中断请求。 代码实现 (1)首先配置GPIO初始化结构体 GPIO要配置为浮空输入 void Key_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE); GPIO_InitStruc
[单片机]
<font color='red'>STM32</font>学习——EXTI外部中断
关于调试STM32程序时,某些标志位被调试软件意外清除的问题
在调试的过程中,使用调试软件的寄存器或存储器显示窗口,可以很方便地查看外设寄存器的状态。 很多朋友都碰到过这样的问题:在单步调试时始终不能在显示窗口看到某些标志位的变化,应该设置这些标志位的时候,窗口中却显示为0,不少人都错误地认为这是芯片的问题。 我们知道,不少STM32外设的状态寄存器位,可以通过对某些寄存器的读操作而清除(例如I2C的I2C_SR1中的很多标志位),在调试过程中,每当程序停止在设置的断点或单步停止时,调试软件都会自动地读出所有指定的寄存器和存储器中的内容,并刷新窗口的显示,调试软件的这个读操作恰好清除了那些标志位,造成了上面描述的现象。 有几个简单的办法解决这个问题: 1)关闭寄存器或存储器显示窗口 2
[单片机]
STM32之TIM3_PWM程序
简介:STM32之TIM3_PWM程序详解:调整CCR2_Val的值来改变占空比,逐步的控制LED1的亮度, 占空比大过一定值时,亮度的变化就不明显了,所以CCR2_VAL最大设定到17000。 原理图: 程序分析: int main(void) { unsigned char a=0; TIM_OCInitTypeDef TIM3_OCInitStructure; RCC_Configuration(); time_ini(); SysTick_Config(72000); //配置SYSTICK时钟节拍为1ms一次 while(1){ Delay(1);//延时1ms TIM3
[单片机]
<font color='red'>STM32</font>之TIM3_PWM程序
STM32单片机使用SWD(Serial wire debug)模式 下载程序出错问题解决
最近在使用STM32F105单片机做产品,使用SWD接口下载程序,遇到一些问题,得益于网上的一些文章最后得以解决,所以也想把问题解决的过程整理出来,以供出现同类问题的技术人员进行参考,本人没有系统地学习SWD接口下载程序的过程(每天的时间都在赶开发进度,很难静下心来系统地学习一项技术了,惭愧),只是提供一点经验。 问题:使用SWD模式下载程序,遇到 Cannot access Memory (@ 0xe00ffff0, Read, Acc Size: 4 Byte) RDDI-DAP Error 等问题提示 问题发生以及解决的过程: 开始使用SWD模式下载程序都还比较顺利, 随着开发的程序增加,有一天突然不能正常下载
[单片机]
<font color='red'>STM32</font>单片机使用SWD(Serial wire debug)模式 下载程序出错问题解决
STM32 IO模拟串口程序
  随着单片机的使用日益频繁,用其作前置机进行采集和通信也常见于各种应用,一般是利用前置机采集各种终端数据后进行处理、存储,再主动或被动上报给管理站。这种情况下下,采集会需要一个串口,上报又需要另一个串口,这就要求单片机具有双串口的功能,但我们知道一般的单片机只提供一个串口,那么另一个串口只能靠程序模拟。   1、串口传输协议   首先,必须要知道串口通讯时数据是怎样传输的?这里以异步传输字符为例子,如下图所示:      一般字符传输都采用:1位起始位,8位数据位,1位停止位,没有校验位 的形式传输,其他形式的这里不讲。串口异步传输在空闲状态时都必须是高电平。第一位传输的是起始位,起始位会将原来空闲时的高电平拉成低电平,起
[单片机]
<font color='red'>STM32</font> IO模拟串口程序
基于STM32+ucos-II+DS18B20调试成功
前几天调试了一下DS18B20的程序,起初系统在裸奔的时候DS18B20可以很正常的读取数据。由于项目前期设计时添加了ucos实时操作系统。原以为把裸奔的程序移植过来就可以使用。结果悲剧发生了 如果做过这方面的朋友一定知道。添加后,你会发现系统不跑了,彻底的死掉了。原因在何处?经过一整天的查找,发现原来系统的时间片被占用了。导致ucos的ticks出现异常。 解决办法:一种方法是:修改OS_CPU_SysTickInit(void)函数,与delay函数进行兼容。在温度传感器延时的时候不影响操作系统的tick运行。这样就可以解决问题了。 还有一种方法就是,把18B20的延时定时器更换成TIM3或者是其他定时器。和系统的tick分开
[单片机]
stm32 串口通讯不成功的解决办法
首先要注意所用到的USART是否用到了复用功能 千万别忘了打开复用时钟!!!!!!!!! 代码如下:Hello! everyone,welcome to class! #include void delay_ms(u16 x) { u8 t; while(x--){for(t=0;t 120;t++);} } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); GPIO_InitS
[单片机]
<font color='red'>stm32</font> 串口通讯不成功的解决办法
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved