Ⅰ、寫在前面
STM8S的穩(wěn)定性不如STM32,特別是在低功耗時,使用EXTI外部中斷喚醒,很容易受到干擾信號而喚醒。因此,這種情況需在硬件電路上多加考慮抗干擾的電路。
其次,就是注意軟件的上下拉配置,如果外部加了上拉或下拉電阻,不建議再配置成上拉或下拉;如果沒有,建議加上。要使其軟件穩(wěn)定,還得深入EXTI的功能。
為方便大家閱讀,本文內(nèi)容已經(jīng)整理成PDF文件:
http://pan.baidu.com/s/1i5uWhJR
作者:strongerHuang
版權(quán)所有,未經(jīng)允許,禁止用于其它商業(yè)用途?。。?/p>
Ⅱ、EXTI基礎(chǔ)知識STM8S的EXTI外部中斷歸屬于GPIO一類,只需要將其IO配置成外部中斷、使能全局中斷、在中斷入口函數(shù)添加相關(guān)的代碼即可。
開啟中斷功能
用戶可以在I/O引腳為輸入模式時通過設(shè)置Px_CR2寄存器的相應(yīng)位來配置某個I/O作為外部輸入中斷模式。在該配置下, I/O引腳上的一個信號沿或是低電平會產(chǎn)生一個中斷請求。
在EXTI_CR[2:1]寄存器中對于每一個中斷向量都可以獨立編程為上升沿或下降沿觸發(fā)。
外部中斷只有在對應(yīng)I/O口被設(shè)置為輸入模式下才有效。
屏蔽中斷功能
可以通過對Px_CR2寄存器的相應(yīng)位進(jìn)行編程來單獨使能/關(guān)閉外部中斷功能。復(fù)位后外部中斷是關(guān)閉的。
提示:EXTI外部中斷只有在IO輸入模式下才有效,配置才輸出模式,不能正常由外部觸發(fā)中斷。
Ⅲ、軟件工程源代碼1.關(guān)于工程本文提供的工程代碼是基于前面軟件工程“STM8S-A04_UART基本收發(fā)數(shù)據(jù)”增加EXTI外部中斷修改而來。初學(xué)的朋友可以參看我前面對應(yīng)的基礎(chǔ)文章,那些文章講的比較詳細(xì)。
2.EXTI引腳配置我們尚且定義為按鍵KEY,浮動輸入,中斷模式。
#define KEY_GPIO_PORT GPIOD
#define KEY_GPIO_PIN GPIO_PIN_2
GPIO_Init(KEY_GPIO_PORT, (GPIO_Pin_TypeDef)KEY_GPIO_PIN, GPIO_MODE_IN_FL_IT);
3.EXTI中斷配置void EXTI_Configuration(void)
{ //下降沿中斷
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD, EXTI_SENSITIVITY_FALL_ONLY);
EXTI_SetTLISensitivity(EXTI_TLISENSITIVITY_FALL_ONLY);
}
這個地方配置成下降沿中斷,端口需對應(yīng)引腳的端口。
4.中斷入口函數(shù)#define KEY_READ GPIO_ReadInputPin(KEY_GPIO_PORT, KEY_GPIO_PIN)
INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler, 6)
{
if(RESET == KEY_READ)
{
IT_Delay(50); //延時消抖
if(RESET == KEY_READ) //確認(rèn)按下
{
LED_REVERSE; //改變LED狀態(tài)
}
}
}
提示:我們使用的GPIOD,入口需要對應(yīng)。
Ⅳ、下載STM8S資料:
http://pan.baidu.com/s/1o7Tb9Yq
軟件源代碼工程兩版本(STM8S-A09_EXTI外部中斷):
http://pan.baidu.com/s/1c2EcRo0