发 帖  
原厂入驻New
[问答] 求助!STM32F103VET6管脚设置为输入模式,只能读取管脚的“1”状态,无法读取管脚的“0”状态?
573 单片机 STM32 LED
分享
自己画了个最小系统板,调试的时候发现问题:        通过按键控制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);
}

0
2019-10-8 21:33:04   评论 分享淘帖 邀请回答

相关问题

3个回答
你写的if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_0==1))有问题吗
我认为if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_0)==1)你试试看
最佳答案

评分

参与人数 1积分 +5 收起 理由
一鸣真 + 5 还真的是,多谢了!

查看全部评分

2019-10-8 21:33:05 评论

举报

2019-10-9 09:17:24 评论

举报

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

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

我要提问
关闭

站长推荐 上一条 /10 下一条

快速回复 返回顶部 返回列表