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

2019-07-14 19:39发布

今天学了独立看门狗,写个小程序,想要实现的功能如下:
程序开始,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);
}

1492670191(1).png
1492670203(1).png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
人中狼
1楼-- · 2019-07-15 01:33
应该在喂狗时加一个LED显示,判断是否有喂狗,这种情况,除非你一直按着按键,不然一松按键超过一秒就又复位了,要通过另一个标志来判断有没有喂狗,不能通过同一个LED来判断有没有喂狗
zhj1163979310
2楼-- · 2019-07-15 04:20
                              
Mr_RMS
3楼-- · 2019-07-15 07:31
 精彩回答 2  元偷偷看……

一周热门 更多>