请教读GPIO电平问题

2019-07-20 14:29发布

本帖最后由 凡夫 于 2017-5-17 14:14 编辑

[mw_shl_code=c,true]static void bsp_InitKeyHard(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;  
        //如果有用到PB3 B4 A15就要用这句 释放JTAG IO
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试
        
        /* 第1步:打开GPIO时钟 */
        RCC_APB2PeriphClockCmd(RCC_ALL_KEY, ENABLE);

        /* 第2步:配置所有的按键GPIO为浮动输入模式(实际上CPU复位后就是输入状态) */
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;        /* 输入浮空模式 */
        
        GPIO_InitStructure.GPIO_Pin = GPIO_PIN_K1;
        GPIO_Init(GPIO_PORT_K1, &GPIO_InitStructure);
}
//A:
static uint8_t IsKeyDown2(void) {if ((GPIO_PORT_K1->IDR & GPIO_PIN_K1) == 1) return 1;else return 0;}
//B:
static uint8_t IsKeyDown1(void) {return  GPIO_ReadInputDataBit(GPIO_PORT_K1,GPIO_PIN_K1);}
[/mw_shl_code]

现象:
A永远返回0,B可以根据IO状态正确返回。

疑问:
对比了B中GPIO_ReadInputDataBit的源码,A写的不够严谨,似乎是数据类型方面的问题,但不明白具体是什么问题。
望各位指点,谢谢。










友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。