有人問
我使用EXIT喚醒芯片,沒什么沒有觸發(fā)中斷,芯片卻喚醒了?
Ⅰ寫在前面
使用STM8S開發(fā)過上面類似功能的朋友應(yīng)該會(huì)知道,STM8S的穩(wěn)定性不如STM32,特別是在低功耗時(shí),使用EXTI外部中斷喚醒,很容易受到干擾信號(hào)而喚醒。因此,這種情況需在硬件電路上多加考慮抗干擾的電路。
其次,就是注意軟件的上下拉配置,如果外部加了上拉或下拉電阻,不建議再配置成上拉或下拉;如果沒有,建議加上。要使其軟件穩(wěn)定,還得深入EXTI的功能。
ⅡEXTI基礎(chǔ)知識(shí)
STM8S的EXTI外部中斷歸屬于GPIO一類,只需要將其IO配置成外部中斷、使能全局中斷、在中斷入口函數(shù)添加相關(guān)的代碼即可。
開啟中斷功能
用戶可以在I/O引腳為輸入模式時(shí)通過設(shè)置Px_CR2寄存器的相應(yīng)位來配置某個(gè)I/O作為外部輸入中斷模式。在該配置下, I/O引腳上的一個(gè)信號(hào)沿或是低電平會(huì)產(chǎn)生一個(gè)中斷請(qǐng)求。
在EXTI_CR[2:1]寄存器中對(duì)于每一個(gè)中斷向量都可以獨(dú)立編程為上升沿或下降沿觸發(fā)。
外部中斷只有在對(duì)應(yīng)I/O口被設(shè)置為輸入模式下才有效。
屏蔽中斷功能
可以通過對(duì)Px_CR2寄存器的相應(yīng)位進(jìn)行編程來單獨(dú)使能/關(guān)閉外部中斷功能。復(fù)位后外部中斷是關(guān)閉的。
提示:EXTI外部中斷只有在IO輸入模式下才有效,配置才輸出模式,不能正常由外部觸發(fā)中斷。
Ⅲ軟件工程源代碼
1.關(guān)于工程
本文提供的工程代碼是基于前面軟件工程“STM8S-A04_UART基本收發(fā)數(shù)據(jù)”增加EXTI外部中斷修改而來。初學(xué)的朋友可以參看我前面對(duì)應(yīng)的基礎(chǔ)文章,那些文章講的比較詳細(xì)。
2.EXTI引腳配置
我們尚且定義為按鍵KEY,浮動(dòng)輸入,中斷模式。
#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);
}
這個(gè)地方配置成下降沿中斷,端口需對(duì)應(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); //延時(shí)消抖
if(RESET == KEY_READ) //確認(rèn)按下
{
LED_REVERSE; //改變LED狀態(tài)
}
}
}
提示:我們使用的GPIOD,入口需要對(duì)應(yīng)。
Ⅳ下載
STM8S資料:
http://pan.baidu.com/s/1o7Tb9Yq
軟件源代碼工程兩版本(STM8S-A09_EXTI外部中斷):
http://pan.baidu.com/s/1c2EcRo0
-
EXIT圖
+關(guān)注
關(guān)注
0文章
4瀏覽量
6998 -
STM8S
+關(guān)注
關(guān)注
16文章
149瀏覽量
31407
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論