不定时喂狗,程序复位,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);
} |