|
貼下代碼
void main()
{
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
led_init();
iwdg_init();
led2(on);
while(1)
{
led1(on);
delayms(600);
led1(off);
delayms(600);
}
}
下面是子代碼
void led_init()
{
GPIO_Init(GPIOD, GPIO_PIN_LNIB, GPIO_MODE_OUT_PP_HIGH_FAST);
}
#define led1(on_off) (on_off==on) ? GPIO_WriteLow(GPIOD, GPIO_PIN_0):GPIO_WriteHigh(GPIOD, GPIO_PIN_0)
#define led2(on_off) (on_off==on) ? GPIO_WriteLow(GPIOD, GPIO_PIN_1):GPIO_WriteHigh(GPIOD, GPIO_PIN_1)
#define led3(on_off) (on_off==on) ? GPIO_WriteLow(GPIOD, GPIO_PIN_2):GPIO_WriteHigh(GPIOD, GPIO_PIN_2)
#define led4(on_off) (on_off==on) ? GPIO_WriteLow(GPIOD, GPIO_PIN_3):GPIO_WriteHigh(GPIOD, GPIO_PIN_3)
void iwdg_init()
{
//使能,啟動(dòng)看門(mén)狗
IWDG->KR=0xcc;
//解除 PR 及 RLR 的寫(xiě)保護(hù)
IWDG->KR=0x55;
//預(yù)分頻寄存器
//【7-3】必須保持,【2-0】從000到110對(duì)應(yīng)4,8,16,32,64,128,256
IWDG->PR=0x05;//128分頻
//重裝載寄存器,設(shè)置復(fù)位時(shí)間,
//復(fù)位時(shí)間為(value*2)/(128K/128)
//例如這個(gè)為(200*2)/1000,即400MS不喂狗就復(fù)位
IWDG->RLR=200;
IWDG->KR = IWDG_KEY_REFRESH;//0xaa,喂狗
}
程序里面delayms函數(shù)不過(guò)400MS就可以led1閃爍,大于400MS就是復(fù)位的現(xiàn)象,可是在小于400MS的時(shí)候不管喂不喂狗都一樣,求大神指導(dǎo)下,感激不盡
|
|