關(guān)于CH582F的GPIO中斷有一些疑問
__INTERRUPT
__HIGH_CODE
void?GPIOB_IRQHandler(?void?)
{
????if(GPIOB_ReadITFlagBit(GPIO_Pin_4))
????{
????????temp?=?R16_PB_INT_IF;
????????PRINT("GPIO41?%d\r\n",?temp);
????????GPIOB_ClearITFlagBit(GPIO_Pin_4);
????????temp?=?R16_PB_INT_IF;
????????PRINT("GPIO42?%d\r\n",?temp);
????}
????if(GPIOB_ReadITFlagBit(GPIO_Pin_10))
????{
????????temp?=?R16_PB_INT_IF;
????????PRINT("GPIO101?%d\r\n",?temp);
????????GPIOB_ClearITFlagBit(GPIO_Pin_10);
????????temp?=?R16_PB_INT_IF;
????????PRINT("GPIO102?%d\r\n",?temp);
????}
}

現(xiàn)在發(fā)現(xiàn)一個(gè)問題,明明只寫了GPIOB4觸發(fā)中斷,可GPIOB10也能進(jìn)去。隨后我在while里循環(huán)打印R16_PB_INT_IF,發(fā)現(xiàn)它初始值就是已經(jīng)是0XFFFF,為什么要這樣子處理?不應(yīng)該是復(fù)位值0嗎?

在中斷服務(wù)函數(shù)中,判斷開啟中斷的GPIO即可。對于沒有啟用中斷的IO,R16_Px_INT_IF中的位變化也無需關(guān)心。

無論有沒有配置GPIO中斷使能,R16_Px_INT_IF中的各位中斷標(biāo)志,會自動判斷是否已產(chǎn)生中斷信號并置位,但只有指定的GPIO使能了中斷,才會觸發(fā)中斷。

對于沒有使能的IO,您可以嘗試在主循環(huán)中不斷查詢中斷標(biāo)志并清零,再按當(dāng)前的中斷條件變化一下電平,中斷標(biāo)志還是會置位的,但不會進(jìn)中斷。


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频