判斷STM32 GPIO輸入口的輸入狀態(tài)
以PE2和PE4為例:
① 判斷單個端口是否為高電平:
if(GPIOE->IDR& GPIO_IDR_IDR2)
{
函數(shù)體;
}
當(dāng)PE2端口為高電平時,if條件為真;當(dāng)PE2口為低電平時,if條件為假;
② 判斷單個端口是否為低電平:
if((~GPIOE->IDR)& GPIO_IDR_IDR2)
{
函數(shù)體;
}
分析:首先通過 &GPIO_IDR_IDR屏蔽掉PE2之外的其他PE口。當(dāng)PE2為高電平時,GPIO-〉IDR的bit2為‘1’,取反后為‘0’,因此條件為假;當(dāng)PE2為低電平時,GPIO-〉IDR的bit2為‘0’,取反后為‘1’,因此條件為真;通過此方法可以同時判斷PE2或PE4(甚至更多PE口)是否為低電平(如按鍵被按下)
③ 判斷多個端口中是否有低電平:
if((~GPIOE->IDR)& (GPIO_IDR_IDR2 | GPIO_IDR_IDR4))
{
函數(shù)體;
}
分析:首先通過 & (GPIO_IDR_IDR2| GPIO_IDR_IDR4)屏蔽掉PE2和PE4之外的其他PE口。當(dāng)PE2或(和)PE4中為低電平時,GPIO-〉IDR的bit2或(和)bit4為‘0’,取反后為‘1’,因此條件為真;
注:此方法并不是用來判斷stm32 IO口狀態(tài)的最好和最直接的方法,但對于理解位操作會有幫助。