欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8745|回復: 0
收起左側

STM32F103系列外部中斷EXTI->SWIER的用途,已實驗成功

[復制鏈接]
ID:72008 發表于 2015-1-12 15:12 | 顯示全部樓層 |閱讀模式
     關于外部中斷寄存器EXTI->SWIER的用途,剛開始我也是云里霧里,感覺手冊說的不是很清楚。憑借自己對EXTI->SWIER功能的理解,自己寫了驗證程序,做了一個實驗。實驗成功了;實驗平臺是野火mini開發板。

    實驗原理是:定義兩個中斷線EXTI0(PA0)和EXTI13(PC13)用來管理兩個按鍵KEY0和KEY1,然后編寫中斷服務函數,中斷服務函數的思路是,按下KEY0時,在LCD上顯示“SWIER+KEY0:”;按下KEY1時就將LCD上顯示的
SWIER+KEY0:”清除掉以證明KEY1按鍵已按下,同時也證明了外部中斷線EXTI13已經觸發(主函數會有相關的操作)。下面是兩個中斷服務函數(至于配置和分組函數就不貼出來了):
void EXTI0_IRQHandler(void)    //KEY0按鍵
{
    if(EXTI_GetITStatus(EXTI_Line0) != RESET)
      {

        LCD_DispStr(20, 80, (uint8_t *)"SWIER+KEY0:", RED);  //顯示SWIER+KEY0:
       EXTI_ClearITPendingBit(EXTI_Line0);   
     }  
}
void EXTI15_10_IRQHandler(void)  //KEY1按鍵
{
   if(EXTI_GetITStatus(EXTI_Line13) != RESET)
   {
       // LCD_DispStr(20, 60, (uint8_t *)"SWIER+KEY1:", RED);
        LCD_DispStr(20, 80, (uint8_t *)"SWIER+KEY0:", WHITE);    //清除LCD顯示的SWIER+KEY0:
        EXTI_ClearITPendingBit(EXTI_Line13);     
        EXTI->SWIER=0;  //清除EXTI->SWIER寄存器相應的位,這種寫法有點不規范,其實是應該將EXTI->SWIER寄存器的bit13清零即復位
   }  
}
主函數:
int main(void)
{  u8 m=0;
  LCD_Init();
  LED_GPIO_Config();
  delay_init();
  uart_init(9600);

  EXTI_PC13_Config();
  EXTI_PA0_Config();

  LCD_Clear(0, 0, 240, 320, WHITE);


  EXTI->IMR|=1<<13;//  
  EXTI->EMR|=1<<13;//
  EXTI->SWIER=0;

while( 1 )
{
    m++;
   LCD_DispNumber(100, 100, m, WHITE); //顯示m的值
   delay_ms(500);
  if(m==10)
   {
     EXTI->SWIER|=1<<13;  //軟件觸發中斷線13,
      m=0;
   
   }
}

主函數其實很簡單,程序運行之后,先按下KEY0按鍵這時會在LCD上顯示“SWIER+KEY0”;同時,在LCD上每隔500ms顯示一次m的值,當m等于10的時候程序將 EXTI->SWIER寄存器的bit13位置1,這時就相當于按下KEY1按鍵只不過是由程序執行的而已,這時LCD上顯示的“SWIER+KEY0”會被清除;證明外部中斷線EXTI13已經觸發。

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表