2016-04-25 8 views
0

編集 は、私はその顔問題..私は、コードを再構築しますNOW DONEが、今それが行わだと私はすべてのx秒の条件をチェックするタイマーを実装する必要がウィンドウウォッチドッグタイマSTM32F4

をテストそれは(離れて、システムが停止した場合などのチェックのための)無限ループに入ったときにプログラムがこれらのリンクがページ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(;;) {} 

     } 
} 

答えて

0

非常に明らかに間違っているものがいくつかあります。その中で最も厄介なは以下のとおりです。

  1. あなたDelayms()機能は、遅延のいずれかの種類を実装していません。 LEDの1つが点滅するように設定されているようです。

  2. あなたは決してInitWatchdog()に電話をかけません。 (代わりに、あなたには、いくつかの理由でmain()以内にそのプロトタイプを宣言している。)

私は、これはあまりにも過酷に聞こえるしたいのですが、ありません:あなたはCを知っていますか?このコードは、あたかもそれを理解せずにサンプルからコピーして貼り付けることによってまとめられているかのように読んでいます。あなたがCを知らないのであれば、組み込みシステムのためのソフトウェアを開発しようとすることは、特に指導なしに、それを学ぶ効果的な方法ではありません。

+0

はい、あなたはちょうど初心者です...あなたのメモは私を多く助けました...私は実際に誰かがコードがこれらのkatastrofiの間違いをスキップすることができるように編集...実際には私は仕事があるので//で学び、発展する。私は今は選択肢がありません...しかし、私は..Allah –