请教GPIO_ReadInputDataBit()问题

2019-07-14 18:54发布

我是STM32初学者。在学习使用GPIO_ReadInputDataBit()时,不论按键是否按下结果不变,也就是检测脚始终为0,百思不得其解;希望得到高手指点。

以下是程序
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdarg.h>
#include <stm32f10x.h>
#include <stm32f10x_it.h>
#include <stm32f10x_conf.h>
#define led1 GPIO_Pin_0
#define led2 GPIO_Pin_1
#define led3 GPIO_Pin_2
#define led4 GPIO_Pin_3
#define led5 GPIO_Pin_4
#define led6 GPIO_Pin_5
#define led7 GPIO_Pin_6
#define led8 GPIO_Pin_7
#define led_turn1 GPIO_WriteBit(GPIOB,led1,(BitAction)!GPIO_ReadOutputDataBit(GPIOB,led1))
#define led_turn2 GPIO_WriteBit(GPIOB,led2,(BitAction)!GPIO_ReadOutputDataBit(GPIOB,led2))
#define led_turn3 GPIO_WriteBit(GPIOB,led3,(BitAction)!GPIO_ReadOutputDataBit(GPIOB,led3))
#define led_turn4 GPIO_WriteBit(GPIOB,led4,(BitAction)!GPIO_ReadOutputDataBit(GPIOB,led4))

void Clock_init()
{
        RCC_APB2PeriphClockCmd( RCC_APB1Periph_PWR| RCC_APB1Periph_BKP |
        RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
}

void B_init()
{ GPIO_InitTypeDef GPIO_InitStructure;
               
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
}

void A_init()
{ GPIO_InitTypeDef GPIO_InitStructure;                       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
}


void delay_ms(unsigned int Counter)
{ unsigned int i;
        for(;Counter!=0;Counter--)
        { i=1000;    //1ms 10301
                while(i--);
        }
}

int main (void)
{ u8 read5,read6,read7;
        Clock_init();
        A_init();
        B_init();
//  GPIO_SetBits(GPIOA,GPIO_Pin_All);
        while(1)
        { //read5=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5);
                read5=GPIOA->IDR&GPIO_Pin_5;
                read6=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6);
                read7=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7);
                if(read5==0){GPIO_SetBits(GPIOB,GPIO_Pin_14);}
                if(read6==0){GPIO_SetBits(GPIOB,GPIO_Pin_15);}
                if(read7==0){GPIO_ResetBits(GPIOB,GPIO_Pin_15);}
                led_turn1;
                led_turn2;
                led_turn3;
                led_turn4;
                delay_ms(500);
        }       
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
laoduwu
1楼-- · 2019-07-14 22:48
找到原因了。不过用proteus仿真还是这样,烧录进电路没问题。
hyf_wz
2楼-- · 2019-07-15 00:07
烧录进电路没问题,建议多测试下。还有就是仿真时不行,看看仿真的设置。

一周热门 更多>