本人菜鸟一名,看GPIO按键程序里的Key_Scan() 时有不懂的地方:
在这一行: if (KEY0 == 0) return KEY0_PRES;
KEY0的定义为 HAL_GPIO_ReadPin(GPIOH,GPIO_PIN_3)
当我查看这个函数的时候,这段有个疑问:
[mw_shl_code=c,true]if((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET)
{
bitstatus = GPIO_PIN_SET;
}
else
{
bitstatus = GPIO_PIN_RESET;
}
return bitstatus;[/mw_shl_code]
当按键按下时,GPIOx->IDR 不为零,GPIO_Pin的值是0x0008,所以它俩AND的话结果不为零。看GPIO_PinState这个enum可以看出GPIO_PIN_RESET的值是0,GPIO_PIN_SET的值是1。
所以当按键按下时,这个函数返回的值应该是1吧?然而在Key_Scan() 里KEY0等于0的时候才会返回KEY0_PRES,不知我是哪里理解错了?
谢谢各位
应该说GPIOx->IDR对应的位(第三位吧)就是零,与 上0x0008(0x00001000)还是零
一周热门 更多>