日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2024年10月10日(星期四)

正在發(fā)生

2018年10月10日 | STM32學習筆記---基于UCOSII的EXTI外部按鍵中斷實驗

發(fā)布者:那是一條路都 來源: eefocus關(guān)鍵字:STM32  UCOSII  EXTI  外部按鍵  中斷實驗 手機看文章 掃描二維碼
隨時隨地手機看文章

繼做了基于UCOSII的IWDG獨立看門狗實驗后,繼續(xù)進行第25個實驗-基于UCOSII的EXTI外部按鍵中斷實驗,此實驗在基于UCOSII的IWDG實驗基礎(chǔ)上添加EXTI而來,三個按鍵,分別按下串口輸出按鍵信息!在多任務(wù)下添加了IWDG獨立看門狗。

//EXTI按鍵任務(wù)----------------------------------------
static  void Task_EXTI(void* p_arg)
{
  
   (void) p_arg;
  
   while(1)
   {  //看門狗更新設(shè)置喂狗操作
   IWDGSET();

   TESTKEY();

      OSTimeDlyHMSM(0, 0, 0, 10); 
   }
       
}

unsigned char KEY=4;//外部中斷標志
unsigned char EXTIFLAG=0;//外部中斷標志

  EXTI_InitTypeDef EXTI_InitStructure; 
//EXTI口設(shè)置初始化
void EXTI_Config(void)
{
  //聲明GPIO類型,EXTI類型
  GPIO_InitTypeDef GPIO_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
 

  //啟動GPIOB,GPIOD的時鐘,
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOE , ENABLE); 
  //初始化按鍵端口引腳
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_2|GPIO_Pin_3;   //COL1,2,3
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;              //推挽輸出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;              //口線翻轉(zhuǎn)速度為50MHz
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;   //COL4
  GPIO_Init(GPIOE, &GPIO_InitStructure);

  //設(shè)置按鍵初始值為高電平
  GPIO_SetBits(GPIOC, GPIO_Pin_5|GPIO_Pin_2|GPIO_Pin_3);
  GPIO_SetBits(GPIOE, GPIO_Pin_6);     

  //初始化中斷線
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
 // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;   //下拉輸入
  GPIO_Init(GPIOE, &GPIO_InitStructure);
 
 //初始化外部中斷EXTI
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource2);   
   
  EXTI_InitStructure.EXTI_Line = EXTI_Line2;      //PE2 作為鍵盤的行線。檢測狀態(tài)
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;    //中斷
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;      //下降沿觸發(fā)
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

  GPIO_SetBits(GPIOE, GPIO_Pin_2);    //起始值為高電平


 
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
 
 
  NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

}
void EXTI_KEY(void)
{
   if(EXTIFLAG==1)
   { 
   //判斷是否是PC5按下  
      GPIO_ResetBits(GPIOC, GPIO_Pin_5);
   GPIO_SetBits(GPIOC, GPIO_Pin_2);
   GPIO_SetBits(GPIOC, GPIO_Pin_3);
   GPIO_SetBits(GPIOE, GPIO_Pin_6);
   Delay(0XBF);
   if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0)
   {  
    Delay(0XBF);
  if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0)
  {
   while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0);
   KEY=0;
      goto out_exit;
  }
   }
   //判斷是否是PC2按下
   GPIO_SetBits(GPIOC, GPIO_Pin_5);
   GPIO_ResetBits(GPIOC, GPIO_Pin_2);
   GPIO_SetBits(GPIOC, GPIO_Pin_3);
   GPIO_SetBits(GPIOE, GPIO_Pin_6); 
   Delay(0XBF);
   if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0)
   {    
     Delay(0XBF);
  if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0)
  {
   while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0);
   KEY=1;
      goto out_exit;
  }
   }
   //判斷是否是PC3按下
   GPIO_SetBits(GPIOC, GPIO_Pin_5);
   GPIO_SetBits(GPIOC, GPIO_Pin_2);
   GPIO_ResetBits(GPIOC, GPIO_Pin_3);
   GPIO_SetBits(GPIOE, GPIO_Pin_6);
   Delay(0XBF);
   if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0)
   {   
     Delay(0XBF);
  if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0)
  {
   while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0);
   KEY=2;
      goto out_exit;
  }
   }
      //判斷是否是PE6按下
   GPIO_SetBits(GPIOC, GPIO_Pin_5);
   GPIO_SetBits(GPIOC, GPIO_Pin_2);
   GPIO_SetBits(GPIOC, GPIO_Pin_3);
   GPIO_ResetBits(GPIOE, GPIO_Pin_6);
   Delay(0XBF);
   if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0)
   {   
     Delay(0XBF);
  if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0)
  {
   while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0);
   KEY=3;
      goto out_exit;
  }
   }

   out_exit:;
      EXTIFLAG=0;
      }

}

void TESTKEY(void)

    EXTI_KEY();

 GPIO_ResetBits(GPIOC, GPIO_Pin_2);
 GPIO_ResetBits(GPIOC, GPIO_Pin_3);
 GPIO_ResetBits(GPIOC, GPIO_Pin_5);
 GPIO_ResetBits(GPIOE, GPIO_Pin_6); 
 
   switch(KEY)
   {
   case 0:          
      USART_OUT(USART1,"r***你按下了K1****n");
   KEY=4;
   break;
   case 1:          
      USART_OUT(USART1,"r***你按下了K2****n");
   KEY=4;
   break;
   case 2:          
      USART_OUT(USART1,"r***你按下了K3****n");
   KEY=4;
   break;
   default:break;
   }

}
////////////////鍵盤行線2中斷
void EXTI2_IRQHandler(void)
{
    OS_CPU_SR  cpu_sr;


    OS_ENTER_CRITICAL();  //保存全局中斷標志,關(guān)總中斷
 //存放中斷嵌套的層數(shù)(0~255)
    OSIntNesting++;       //OSSemPost(NMEA_MBOX);
    OS_EXIT_CRITICAL();   //恢復全局中斷標志

  if(EXTI_GetITStatus(EXTI_Line2) != RESET)      //判別是否有鍵按下
  {
    
 EXTI_ClearITPendingBit(EXTI_Line2);
 EXTIFLAG=1;     //標志
  }

 //脫離中斷函數(shù)
    OSIntExit();  //在os_core.c文件里定義,如果有更高優(yōu)先級的任務(wù)就緒了,則執(zhí)行一次任務(wù)切換   
}

在此試驗中修正了以前實驗多任務(wù)下任務(wù)調(diào)度問題,比如ADC試驗中優(yōu)先級問題,TOUCH試驗中優(yōu)先級問題,還有在每個任務(wù)WHILE(1)中添加延時OSTimeDlyHMSM(0, 0, 0, 10); 此函數(shù)可以任務(wù)調(diào)度,還有就是在中斷函數(shù)中,每個中斷寫成了

void XXXXX_IRQHandler(void)
{
    OS_CPU_SR  cpu_sr;


    OS_ENTER_CRITICAL();  //保存全局中斷標志,關(guān)總中斷
 //存放中斷嵌套的層數(shù)(0~255)
    OSIntNesting++;       //OSSemPost(NMEA_MBOX);
    OS_EXIT_CRITICAL();   //恢復全局中斷標志

    XXXXXX中斷處理XXXXXXXXX

 //脫離中斷函數(shù)
    OSIntExit();  //在os_core.c文件里定義,如果有更高優(yōu)先級的任務(wù)就緒了,則執(zhí)行一次任務(wù)切換   
}

結(jié)果演示.....

[轉(zhuǎn)載]STM32學習筆記---基于UCOSII的EXTI外部按鍵中斷實驗


關(guān)鍵字:STM32  UCOSII  EXTI  外部按鍵  中斷實驗 引用地址:STM32學習筆記---基于UCOSII的EXTI外部按鍵中斷實驗

上一篇:STM32與通常ARM的區(qū)別
下一篇:stm32之nRF24L01無線模塊(1):SPI2到SPI1的移植

推薦閱讀

? ? ? ? 白天上班,晚上上課,這成了我最近的日常。? ? ? ? 我喜歡使用錄音軟件。一走進教室,我就會拿出 iPhone,打開語音備忘錄,準備課程錄音。我熱愛學習,老師教授的知識,我都用心記在筆記本上。一晚上 2 個小時的課程,我記了滿滿 11 頁的筆記。? ? ? ? 課后回到家,我想著要及時鞏固所學知識,順便通過錄音補充遺漏...
第一章 緒論1.1 單片機基礎(chǔ)全稱:單片微型計算機(Single Chip MicroComputer)它是把MPU、存儲器、I/O口、定時器/計數(shù)器、中斷系統(tǒng)、時鐘電路、A/D-D/A等集成在一個芯片上構(gòu)成的微型計算機系統(tǒng)。單片機又稱:單片微控制器、嵌入式微控制器1.2 MSP430F663x片內(nèi)資源MSP430F663x 系列配置有一個高性能12 位ADC、比較器、兩個USCI、USB2.0、硬件乘法器...
通過拆解分析華為AI音箱2 BOM表,我們發(fā)現(xiàn)該音箱內(nèi)部主控IC部分元器件均采用國產(chǎn)器件。此次價值觀,將揭秘其成本和元器件分布。華為AI音箱2全部443個組件中,日本提供323個組件,占總共的72.9%,組件數(shù)占比最高,成本占比10.7%,主要區(qū)域在器件;中國大陸提供114個組件,占總共的25.7%,成本占比51.6%,成本占比最高,主要區(qū)域為非電子器件,連接器、IC;...
路透社10月6日報道,消息人士稱,蘋果公司將因其NFC芯片技術(shù)而受到歐盟反壟斷指控,此舉使其可能面臨巨額罰款的風險,或迫使其向競爭對手開放移動支付系統(tǒng)。報道稱,目前初步的擔憂是蘋果的NFC芯片所支持的快捷支付,其移動支付服務(wù)Apple Pay應(yīng)該如何在商家的應(yīng)用程序和網(wǎng)站上使用的條款和條件,以及該公司拒絕讓競爭對手訪問支付系統(tǒng)。其中一位消息人士...

史海拾趣

小廣播
設(shè)計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved