OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4804|回复: 2

关于独立看门狗的问题

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2013-9-24
在线时间
1 小时
发表于 2013-9-24 16:13:46 | 显示全部楼层 |阅读模式

     不定时喂狗,程序复位,led灯闪烁。。。现象正常。。。。 但是test(NORMAL);定时喂狗时,小灯并不会亮0.5s后变暗(实际现象时一直不亮)为什么呢????

系统板用的是的飞莱LY-STM32F103C8最小系统板,led接在pb8。我写的程序放在附件中。

#include "stm32f10x.h"
#include "delay.h"

#define NORMAL 0x00
#define RESET  0x01

void led_init(void){
 GPIO_InitTypeDef GPIO_InitStruct;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
 
 GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
 GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8;
 GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
 
 GPIO_Init(GPIOB,&GPIO_InitStruct);
 GPIO_SetBits(GPIOB,GPIO_Pin_8);
}

void iwdg_init(uint8_t preler,uint16_t reload){
 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);    
 
 while(IWDG_GetFlagStatus(IWDG_FLAG_PVU));
 IWDG_SetPrescaler(preler);
 
 while(IWDG_GetFlagStatus(IWDG_FLAG_RVU));
 IWDG_SetReload(reload);                //Tout=((4*2^prescaler)*reload)/40(ms)=1000ms
 
 IWDG_ReloadCounter();
 IWDG_Enable();
}

void TIM3_IRQHandler(void){
 if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET){
  TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
  IWDG_ReloadCounter();               //feed dog
 }
}

void tim3_init(void){
 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
 NVIC_InitTypeDef NVIC_InitStruct;
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
 
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);   //DO NOT FORGET
 NVIC_InitStruct.NVIC_IRQChannel=TIM3_IRQn;
 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0;
 NVIC_InitStruct.NVIC_IRQChannelSubPriority=3;
 NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
 NVIC_Init(&NVIC_InitStruct);
 
 TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
 TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
 TIM_TimeBaseInitStruct.TIM_Period=7199;
 TIM_TimeBaseInitStruct.TIM_Prescaler=4999;
 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);   //T(s)=(TIM_Prescaler+1)/Ftosc*(TIM_Period+1)=500ms;
 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
 
 TIM_Cmd(TIM3,ENABLE);
}
void test(uint8_t status){
 if(!status) tim3_init();
}

int main(){
 led_init();
 delay_init(72);
 iwdg_init(4,625);
 test(NORMAL);
 GPIO_ResetBits(GPIOB,GPIO_Pin_8);
 delay_ms(500);
 GPIO_SetBits(GPIOB,GPIO_Pin_8);
 while(1);
}

TEST.rar

212.06 KB, 下载次数: 56

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-24 22:34:17 | 显示全部楼层
回复【楼主位】a33287651:
---------------------------------
可以仿真看看么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-24 22:42:58 | 显示全部楼层
tim3中断服务函数改为:
void TIM3_IRQHandler(void)
{
u8 t=TIM_GetITStatus(TIM3,TIM_IT_Update);
if(t!=0)
{
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
IWDG_ReloadCounter(); //feed dog
}
}
才会喂狗,比较奇特!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-12 12:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表