微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 写了个独立看门狗的小程序,帮忙看下出了什么问题。。。

写了个独立看门狗的小程序,帮忙看下出了什么问题。。。

时间:10-02 整理:3721RD 点击:
今天学了独立看门狗,写个小程序,想要实现的功能如下:
程序开始,led灯灭,1s后亮,1s后再灭,如果按键1检测到被按下,就执行喂狗,LED灯就会一直灭,独立看门狗设置的复位时间大约是1s,如果1s内没喂狗即未检测到按键1被按下,程序就会复位,重新执行,LED灯被复位就会再灭亮灭闪烁一次。
我写的下面这个程序执行后,led是不断的灭亮灭,就算很快的按下键,也是不断灭亮灭,也就是说是在不断复位,喂狗程序一直没有执行,所以我怀疑是不是判断喂狗的条件出现错误,但又不知道哪里错了。
附图是按键和led的接线图。
#include "stm32f10x.h"
#include "delay_ms.h"
#define BitBand(addr,n) *(volatile unsigned long*)((addr & 0xf0000000)+0x2000000+(addr & 0xfffff)*32+n*4)    //位绑定公式
#define GPIOC_ODR_A (GPIOC_BASE+0x0c)
#define GPIOC_IDR_A (GPIOC_BASE+0x08)
#define GPIOD_ODR_A (GPIOD_BASE+0x0c)
#define GPIOD_IDR_A (GPIOD_BASE+0x08)
#define PCout(n) BitBand(GPIOC_ODR_A,n)
#define PCin(n)  BitBand(GPIOC_IDR_A,n)
#define PDout(n) BitBand(GPIOD_ODR_A,n)
#define PDin(n)  BitBand(GPIOD_IDR_A,n)
#define Key1 PCout(4)     //位绑定
#define LED1 PDout(2)
void RCC_Configuration(void); //声明
void GPIO_Configuration(void);

int main(void)
{
        RCC_Configuration();  //打开时钟
        GPIO_Configuration();  //GPIO配置
        //设置led灯的主要目的就是为了显示出是否实现了IWDG的功能
        LED1=1;   //LED的公共端接的是3.3V,复位值是0,复位亮,置1使灭
        delay_ms(1000); //延时1s
        LED1=0;             //1s后亮
        delay_ms(1000); //延时1s
        LED1=1;              //灭
       
        IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
        IWDG_SetPrescaler(4);
        IWDG_SetReload(625);
        IWDG_ReloadCounter();
        IWDG_Enable();
        while(1)
        {
                        if(Key1==0)
                {
                        delay_ms(10);
                        if(Key1==0) IWDG_ReloadCounter();
                }
        }
}
void RCC_Configuration()
{
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE);
}
void GPIO_Configuration()
{
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
        GPIO_Init(GPIOC,&GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin =GPIO_Pin_2;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
        GPIO_Init(GPIOD,&GPIO_InitStructure);
}



是不是没有打开相应的时钟啊

应该在喂狗时加一个LED显示,判断是否有喂狗,这种情况,除非你一直按着按键,不然一松按键超过一秒就又复位了,要通过另一个标志来判断有没有喂狗,不能通过同一个LED来判断有没有喂狗

                              

按键应该设置为浮空输入

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top