gpt4 book ai didi

c - 窗口看门狗定时器STM32F4

转载 作者:行者123 更新时间:2023-11-30 17:01:45 25 4
gpt4 key购买 nike

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

我需要实现一个计时器,每x秒检查一次条件..我面临的问题是程序在进入无限循环时不会重置(像系统是否已停止一样进行检查)...< br/>这些链接帮助了我..手册第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(;;) {}

}
}

最佳答案

这里有几处明显错误的地方。其中最令人不安的是:

  1. 您的 Delayms() 函数不会实现任何类型的延迟。它似乎将其中一个 LED 配置为闪烁。

  2. 您永远不会调用InitWatchdog()。 (相反,由于某种原因,您在 main() 中声明了它的原型(prototype)。)

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

关于c - 窗口看门狗定时器STM32F4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36841054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com