求大侠帮看看这个程序,GPIO灯一闪一闪的

2019-10-11 14:13发布

求大侠帮我看看这个程序,本以为不按键的情况下LED灯会固定亮或者灭,但下到板子里在不按键的情况下为啥LED一闪一闪的?
[mw_shl_code=c,true]#define KEY GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include <stdio.h>
void delay(u32 num){
        u32 i=0;
                for(;i<num;i++);
}
int main(){
        GPIO_InitTypeDef GPIO_Structure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB,ENABLE);
        GPIO_Structure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Structure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Structure.GPIO_Pin=GPIO_Pin_13;
        GPIO_Init(GPIOC,&GPIO_Structure);
        GPIO_ResetBits(GPIOC,GPIO_Pin_13);
        //初始化LED端口
        GPIO_Structure.GPIO_Mode=GPIO_Mode_IPU;
        GPIO_Structure.GPIO_Pin=GPIO_Pin_8;
        GPIO_Init(GPIOB,&GPIO_Structure);
        //初始化按键端口
        
        while(1){
                //GPIO_ResetBits(GPIOB,GPIO_Pin_11);
                if(KEY==1){
                        GPIOC->ODR^=GPIO_Pin_13;
                        delay(5000000);
                        break;
                //翻转端口方式
                }
               
                //GPIO_SetBits(GPIOB,GPIO_Pin_11);
                //delay(5000000);
               
        }
}[/mw_shl_code]

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
hystcy
1楼-- · 2019-10-12 22:08
本帖最后由 hystcy 于 2017-3-15 15:36 编辑
luyq 发表于 2017-3-15 12:12
去掉延时就好了,奇怪

去掉延时?没有试过只去掉break吗?
luyq
2楼-- · 2019-10-12 22:19
hystcy 发表于 2017-3-15 12:45
去掉延时?我觉得治标不治本。没有试过只去掉break吗?

去掉延时加上break就正常, 去掉break就不正常了
linzhijiang_sz
3楼-- · 2019-10-13 03:15
应该是你的按键判断那里没有去抖吧?判断key换成这样试试:
if(KEY==1)
{
               delay(1000);
                if(KEY==1)
                        GPIOC->ODR^=GPIO_Pin_13;
                        
}
爱娟娟
4楼-- · 2019-10-13 07:30
按键要去抖,而且要根据电路图设置成下拉输入或者上拉输入,

一周热门 更多>