0

Edited DONE NOW ..コードを再構築しますが、これで完了してテストされました

x秒ごとに条件をチェックするタイマーを実装する必要があります..無限ループに入ったときにプログラムがリセットされないという問題に直面しています(システムが停止したかどうかなどのチェックのために離れています)...
これらのリンクは私を助けました.. マニュアル 74 ページから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(;;) {}

      }
}
4

1 に答える 1