独立看门狗的小程序出错,大家帮忙看下啊

2019-08-20 18:27发布

本帖最后由 十七年 于 2017-4-20 14:47 编辑

今天学了独立看门狗,写个小程序,想要实现的功能如下:
程序开始,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);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
join
1楼-- · 2019-08-20 20:00
[mw_shl_code=c,true]        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);[/mw_shl_code]
上面一段代码中有一句应该这样写:(推挽输出改为浮空输入,按键是需要检测输入电平的,你怎么能初始化成输出功能了)
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING; ;
来俩不甜的
2楼-- · 2019-08-20 23:54
按键引脚是推挽输出,你写错了
十七年
3楼-- · 2019-08-21 00:24
 精彩回答 2  元偷偷看……
十七年
4楼-- · 2019-08-21 06:03
十七年 发表于 2017-4-20 17:59
写的就是推挽输出,应该是推挽输入吗?

上啦输入?
来俩不甜的
5楼-- · 2019-08-21 07:51
十七年 发表于 2017-4-20 18:03
上啦输入?

上拉 浮空都可以,按键肯定是输入啊

一周热门 更多>