已编辑
现在完成..我将重建代码,但现在已经完成并测试了

...
这些链接对我有帮助..手册,来自第74页http://www2.st.com/content/ccc/resource/technical/document/reference_manual/3d/6d/5a/66/b4/99/40/d4/DM00031020.pdf/files/DM00031020.pdf/jcr:content/translations/en.DM00031020.pdf ..

而此链接http://www.programmershare.com/3518407/
提前致谢

我目前有此代码:

#include "stm32f4xx.h"
#include <stm32f4xx_gpio.h>
#include <stm32f4xx_rcc.h>
#include <stm32f4xx_wwdg.h>

void setup_Periph(void);
void Delay(unsigned long ms);


void Delay(unsigned long ms)
{ unsigned long i,j;
for(i=0;i<ms;i++)
    for(j=0;j<1450;j++);
 }


 void setup_Periph(void)
 {

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

 //port initialization
 GPIO_InitTypeDef GPIO_InitStructure;

 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
 GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
 GPIO_Init(GPIOD,&GPIO_InitStructure);

 }

 void ResetWatchdog(void)
 { WWDG_SetCounter(80);}

 void WWDG_IRQHandler(void)
 {

 if (WWDG_GetFlagStatus())
  {
   WWDG_SetCounter(0x7f);
   WWDG_ClearFlag();
   }

 }

 void FeedDog(float round)
{
while(round)
   { Delay (65);
    WWDG_SetCounter(127);
    round--;}
 }


 int main(void)
 {
 //RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);

 //System Clock auf Watchdog
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);

 WWDG_SetPrescaler(WWDG_Prescaler_8);
 //WWDG clock counter = (PCLK1(30MHz)/4096)/1 = 7324 Hz (~137 us)

 WWDG_SetCounter(80);           //Werte 0x40 und 0x7F
 WWDG_SetWindowValue(80);         //0x80

                //Reset  < 120  > 64

 WWDG_Enable(127);            //WWDG timeout = ~137 us * (127-64) = 8.6ms

 WWDG_ClearFlag();
 WWDG_EnableIT();

 setup_Periph();
 //make sure the clk is stable
   RCC_HSEConfig(RCC_HSE_ON);
   while(!RCC_WaitForHSEStartUp());


 GPIO_SetBits(GPIOD, GPIO_Pin_1);
 Delay(10000); //10 ms
 GPIO_ResetBits(GPIOD, GPIO_Pin_1);
 Delay(10000); //100 ms

  while (1)
  {

          GPIO_SetBits(GPIOD, GPIO_Pin_0);
            Delay(10000); //10 ms

            GPIO_ResetBits(GPIOD, GPIO_Pin_0);
            Delay(10000); //100 ms

            void ResetWatchdog(void);
            WWDG_SetCounter(80);
        FeedDog(8);
            for(;;) {}

      }
}

最佳答案

这里有几件事很明显是错误的。其中最令人困扰的是:


您的Delayms()函数不会实现任何形式的延迟。似乎将其中一个LED配置为闪烁。
您永远不会呼叫InitWatchdog()。 (相反,出于某种原因,您正在main()中声明其原型。)


我不想听起来太刺耳,但是:你知道C吗?这段代码看起来好像是通过复制和粘贴示例中的片段而不理解它们而组合在一起的。如果您不了解C,那么尝试为嵌入式系统开发软件并不是学习它的有效方法,尤其是在没有指导的情况下。

09-28 14:23