遇到一个问题,就是读取PD9的值,然后赋值给一个变量,电路上PD9的值是0,所以理论上变量的值也应该一直是0,但是有的时候变量的值会变成1,查看寄存器的值,GPIOD->IDR9的值是0,但是从WATCH看变量的值却是1,想不明白,忘大神告知。
u16 Port_9=0;
void main(void)
{
u8 i=0;
GPIO_InitTypeDef GPIO_InitStructure;
//开启A,B,C,D端口时钟和IO口复用时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB
|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE
|RCC_APB2Periph_AFIO,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOD, &GPIO_InitStructure);
while(1)
{
Port_9=GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_9);
if(Port_9)
{
i=1;//电路上PD9的电平是0,所以理论上是不会执行此语句的,但是在调试过程中会执行,
}
else
{
i=2;
}
}
}
附上图片两张:
///// https: //share.weiyun.com/5e2e1e18ffd6008beabf136612ad73b6
///// https: //share.weiyun.com/b6ae9e81195ea83cba52b86358066685 |