自己画了个最小系统板,调试的时候发现问题: 通过按键控制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_Configura
tion(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);
}