STM32/STM8技术william hill官网
直播中

一鸣真

8年用户 12经验值
私信 关注
[问答]

求助!STM32F103VET6管脚设置为输入模式,只能读取管脚的“1”状态,无法读取管脚的“0”状态?

自己画了个最小系统板,调试的时候发现问题:        通过按键控制LED的亮灭,当设置为输入模式时,比如上拉输入(IPU)模式,却只能读取管脚的“1”状态来做判断,即可以通过这条语句if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_0==1))来控制LED的亮灭;但是当读取管教的“0”状态来做判断时,即通过语句
if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_0==0))来控制LED的亮灭,这个时候LED一直处于熄灭状态,也就是单片机一直默认管脚PE0处于“1”状态
        尝试了很多方法一直找不到原因,本人接触STM32不久,对管脚设置不熟悉,不知道是不是那一块漏掉了没设置?有知道原因的朋友可以指导一下吗?谢谢啦!
下面是相关代码:
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"

void RCC_Configuraton(void);
void GPIO_Configuration(void);

int main(void)
{
    RCC_Configuraton();
    GPIO_Configuration();
          while(1)
                {  
                          if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_0==1))//问题出现在这条语句,当设置为if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_0==0))时就会出现错误
                                {
                                    GPIO_ResetBits(GPIOA,GPIO_Pin_3);//点亮LED
                                }
                                else
                                {
                                    GPIO_SetBits(GPIOA,GPIO_Pin_3);//熄灭LED
                                }  
                }
}

//时钟初始化函数
void RCC_Configuraton(void)
{
    SystemInit();//系统时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//打开A路时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//打开E路时钟
}

void GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_Structure;//¶¨Òå¹Ü½Å½á¹¹Ìå
               
            //LED管脚
        GPIO_Structure.GPIO_Pin=GPIO_Pin_3;//pin init
        GPIO_Structure.GPIO_Speed=GPIO_Speed_50MHz;//PIN SPEED
        GPIO_Structure.GPIO_Mode=GPIO_Mode_Out_OD;//ÍÆÍìÊä³ö
        GPIO_Init(GPIOA,&GPIO_Structure);
                        
        //按键设置
        GPIO_Structure.GPIO_Pin=GPIO_Pin_0;//pin init
        GPIO_Structure.GPIO_Speed=GPIO_Speed_50MHz;//PIN SPEED
        GPIO_Structure.GPIO_Mode=GPIO_Mode_IPU;
        GPIO_Init(GPIOE,&GPIO_Structure);
}

回帖(3)

阿信509

2019-10-8 21:33:05

最佳答案

你写的if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_0==1))有问题吗
我认为if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_0)==1)你试试看
举报

chenwei6991627

2019-10-9 09:17:24
缺少时钟使能呢
举报

人中狼

2019-10-9 11:19:59
这里有两个问题,一个是输入引脚是否能正确读取引脚的状态,第二个是控制LED的引脚是否能正确控制LED。
可以分开调试,先测试LED控制,加一个循环延时,做出LED循环亮,灭的效果。LED控制正确了,再加入读取按键状态部分。
另外LED控制引脚是否应该用OD方式
举报

更多回帖

发帖
×
20
完善资料,
赚取积分