a)意图:
了解两种看门狗(我叫它:体系运转毛病勘探器和独立体系毛病勘探器,新手往往被这个并不形象的象形称号搞糊涂)之间的差异和根本用法。
b)相同:
都是用来勘探体系毛病,经过编写代码守时发送毛病清零信号(高手们都管这个代码叫做“喂狗”),告知它体系运转正常。一旦体系毛病,程序清零代码(“喂狗”)无法履行,其计数器就会计数不止,直到记到零并产生毛病中止(狗饿了开端叫唤),操控CPU重启整个体系(不行啦,开端咬人了,快跑……)。
c)差异:
独立看门狗Iwdg——我的了解是独立于体系之外,由于有独立时钟,所以不受体系影响的体系毛病勘探器。(这条狗是借来的,见谁偷闲它都咬!)首要用于监督硬件过错。
窗口看门狗wwdg——我的了解是体系内部的毛病勘探器,时钟与体系相同。假如体系时钟不走了,这个狗也就失掉效果了。(这条狗是老板娘养的,老板不干活儿他不论!)首要用于监督软件过错。
d)初始化函数界说:鉴于两只狗效果差不多,运用进程也差不多初始化函数栓一起了,用的时分依据状况删减。
void WDG_Configuration(void);
e)初始化函数调用:
WDG_Configuration();
f)初始化函数
void WDG_Configuration()//看门狗初始化
{
//软件看门狗初始化
WWDG_SetPrescaler(WWDG_Prescaler_8); //时钟8分频4ms
// (PCLK1/4096)/8= 244 Hz (~4 ms)
WWDG_SetWindowValue(65);//计数器数值
WWDG_Enable(127);//发动计数器,设置喂狗时刻
// WWDG timeout = ~4 ms * 64 = 262 ms
WWDG_ClearFlag();//铲除标志位
WWDG_EnableIT();//发动中止
//独立看门狗初始化
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//发动寄存器读写
IWDG_SetPrescaler(IWDG_Prescaler_32);//40K时钟32分频
IWDG_SetReload(349);//计数器数值
IWDG_ReloadCounter();//重启计数器
IWDG_Enable();//发动看门狗
}
g)RCC初始化:只要软件看门狗需求时钟初始化,独立看门狗有自己的时钟不需求可是需求systic作业相关设置。
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
h)独立看门狗运用systic的中止来喂狗,所以增加systic的中止翻开代码就行了。软件看门狗需求在NVIC翻开中止增加如下代码:
NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQChannel; //通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //占先中止等级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//呼应中止优先级
NVIC_Init(&NVIC_InitStructure);//翻开中止
i)中止程序,软件看门狗在自己的中止中喂狗,独立看门狗需求运用systic的守时中止来喂狗。以下两个程序都在stm32f10x_it.c文件中。
void WWDG_IRQHandler(void)
{
WWDG_SetCounter(0x7F);//更新计数值
WWDG_ClearFlag();//铲除标志位
}
void SysTickHandler(void)
{IWDG_ReloadCounter();//重启计数器(喂狗)
}
j)注意事项:
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;//变量清零
}
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/258770.html