找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 953|回复: 0
收起左侧

基于stm32的按键中断

[复制链接]
ID:984108 发表于 2021-11-24 09:15 | 显示全部楼层 |阅读模式
  1. /*********************************************************************************
  2. ************************* STM32F103RC开发板******************************
  3. **********************************************************************************
  4. * 文件名称: 例程1 LED跑马灯主函数main()                                          *
  5. * 文件简述:LED跑马灯                                                            *
  6. * 创建日期:2018.03.03                                                           *
  7. * 版    本:V1.0                                                                 *
  8. * 作    者:Clever                                                               *
  9. * 说    明:有三种方式控制LED亮灭                                                *
  10. * 声    明:本例程代码仅用于学习参考                                             *
  11. **********************************************************************************
  12. *********************************************************************************/
  13. #include "stm32f10x_gpio.h"
  14. #include "led.h"
  15. #include "keyint.h"
  16. #include "common.h"
  17. //LED对应IO初始化

  18. //void mydelay(int c)
  19. //{
  20. //        int i,j;
  21. //        for(;c>=0;c--)
  22. //        {
  23. //                  for(i=0;i<10000;i++)
  24. //                     for(j=0;j<10000;j++)
  25. //                          ;
  26. //        }
  27. //}

  28. int main( )
  29. {
  30.         int i;
  31.   LedInit();
  32.         KEYInt();
  33.   while(1)
  34.         {
  35. ;               
  36.         }
  37. }



  38. #include "stm32f10x_rcc.h"
  39. #include "stm32f10x_exti.h"
  40. #include "Led.h"
  41. void KeyGPIOConfig()
  42. {
  43.         GPIO_InitTypeDef   GPIOKeyInit;
  44.         
  45.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);
  46.         GPIOKeyInit.GPIO_Pin=GPIO_Pin_5;
  47.         GPIOKeyInit.GPIO_Mode=GPIO_Mode_IPU;
  48.         GPIO_Init (GPIOC,&GPIOKeyInit);
  49.         GPIOC->ODR|=(0x01<<5);
  50.         
  51.         GPIOKeyInit.GPIO_Pin=GPIO_Pin_6;
  52.         GPIOKeyInit.GPIO_Mode=GPIO_Mode_IPU;
  53.         GPIO_Init (GPIOC,&GPIOKeyInit);
  54.         GPIOC->ODR|=(0x01<<6);
  55.         
  56.         GPIOKeyInit.GPIO_Pin=GPIO_Pin_7;
  57.         GPIOKeyInit.GPIO_Mode=GPIO_Mode_IPU;
  58.         GPIO_Init (GPIOC,&GPIOKeyInit);
  59.         GPIOC->ODR|=(0x01<<7);
  60.         
  61.         GPIOKeyInit.GPIO_Pin=GPIO_Pin_8;
  62.         GPIOKeyInit.GPIO_Mode=GPIO_Mode_IPU;
  63.         GPIO_Init (GPIOC,&GPIOKeyInit);
  64.         GPIOC->ODR|=(0x01<<8);
  65.         
  66.         GPIOKeyInit.GPIO_Pin=GPIO_Pin_9;
  67.         GPIOKeyInit.GPIO_Mode=GPIO_Mode_IPU;
  68.         GPIO_Init (GPIOC,&GPIOKeyInit);
  69.         GPIOC->ODR|=(0x01<<9);
  70. }


  71. void KeyEXTIConfig()
  72. {
  73.         EXTI_InitTypeDef EXTIKeyInit;
  74.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);
  75.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource6);
  76.                 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource7);
  77.                 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource8);
  78.                 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource9);
  79.         
  80.         EXTIKeyInit.EXTI_Line=EXTI_Line5;
  81.         EXTIKeyInit.EXTI_Mode=EXTI_Mode_Interrupt;
  82.         EXTIKeyInit.EXTI_Trigger=EXTI_Trigger_Falling;
  83.         EXTIKeyInit.EXTI_LineCmd=ENABLE;
  84.         EXTI_Init(&EXTIKeyInit);
  85.         
  86.         EXTIKeyInit.EXTI_Line=EXTI_Line6;
  87.         EXTIKeyInit.EXTI_Mode=EXTI_Mode_Interrupt;
  88.         EXTIKeyInit.EXTI_Trigger=EXTI_Trigger_Falling;
  89.         EXTIKeyInit.EXTI_LineCmd=ENABLE;
  90.         EXTI_Init(&EXTIKeyInit);
  91.         
  92.         EXTIKeyInit.EXTI_Line=EXTI_Line7;
  93.         EXTIKeyInit.EXTI_Mode=EXTI_Mode_Interrupt;
  94.         EXTIKeyInit.EXTI_Trigger=EXTI_Trigger_Falling;
  95.         EXTIKeyInit.EXTI_LineCmd=ENABLE;
  96.         EXTI_Init(&EXTIKeyInit);
  97.         
  98.         EXTIKeyInit.EXTI_Line=EXTI_Line8;
  99.         EXTIKeyInit.EXTI_Mode=EXTI_Mode_Interrupt;
  100.         EXTIKeyInit.EXTI_Trigger=EXTI_Trigger_Falling;
  101.         EXTIKeyInit.EXTI_LineCmd=ENABLE;
  102.         EXTI_Init(&EXTIKeyInit);
  103.         
  104.         EXTIKeyInit.EXTI_Line=EXTI_Line9;
  105.         EXTIKeyInit.EXTI_Mode=EXTI_Mode_Interrupt;
  106.         EXTIKeyInit.EXTI_Trigger=EXTI_Trigger_Falling;
  107.         EXTIKeyInit.EXTI_LineCmd=ENABLE;
  108.         EXTI_Init(&EXTIKeyInit);
  109. }


  110. void KeyNVICConfig()
  111. {
  112.          NVIC_InitTypeDef  NVICKeyInit;
  113.          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  114.         
  115.         NVICKeyInit.NVIC_IRQChannel|=EXTI9_5_IRQn;
  116.         NVICKeyInit.NVIC_IRQChannelPreemptionPriority=0;
  117.         NVICKeyInit.NVIC_IRQChannelSubPriority=0;
  118.         NVICKeyInit.NVIC_IRQChannelCmd=ENABLE;
  119.           NVIC_Init (&NVICKeyInit);
  120.         
  121. //        NVICKeyInit.NVIC_IRQChannel|=EXTI2_IRQn;
  122. //        NVICKeyInit.NVIC_IRQChannelPreemptionPriority=0;
  123. //        NVICKeyInit.NVIC_IRQChannelSubPriority=0;
  124. //        NVICKeyInit.NVIC_IRQChannelCmd=ENABLE;
  125. //          NVIC_Init (&NVICKeyInit);
  126. }
  127. void KEYInt(void)
  128. {
  129.         KeyGPIOConfig();
  130.         KeyEXTIConfig();
  131.         KeyNVICConfig();
  132. }



  133. //中断子程序1
  134. void EXTI9_5_IRQHandler()
  135. {
  136.         static int a = 0;
  137.         if(EXTI_GetITStatus(EXTI_Line5)!=RESET)
  138.         {        
  139.                 if(a==0)
  140.                 {
  141.                         LedOn(GPIOB,GPIO_Pin_0);
  142.                         a=1;
  143.                 }
  144.                 else if (a==1)
  145.                 {
  146.                         LedOff(GPIOB,GPIO_Pin_0);
  147.                         a=0;
  148.                 }
  149.                 EXTI_ClearITPendingBit(EXTI_Line5);
  150.   }
  151.         else if(EXTI_GetITStatus(EXTI_Line6)!=RESET)
  152.         {        
  153.                 if(a==0)
  154.                 {
  155.                         LedOn(GPIOB,GPIO_Pin_1);
  156.                         a=1;
  157.                 }
  158.                 else if (a==1)
  159.                 {
  160.                         LedOff(GPIOB,GPIO_Pin_1);
  161.                         a=0;
  162.                 }
  163.                 EXTI_ClearITPendingBit(EXTI_Line6);
  164.   }
  165.         else if(EXTI_GetITStatus(EXTI_Line7)!=RESET)
  166.         {        
  167.                 if(a==0)
  168.                 {
  169.                         LedOn(GPIOB,GPIO_Pin_2);
  170.                         a=1;
  171.                 }
  172.                 else if (a==1)
  173.                 {
  174.                         LedOff(GPIOB,GPIO_Pin_2);
  175.                         a=0;
  176.                 }
  177.                 EXTI_ClearITPendingBit(EXTI_Line7);
  178.   }
  179.         else if(EXTI_GetITStatus(EXTI_Line8)!=RESET)
  180.         {        
  181.                 if(a==0)
  182.                 {
  183.                         LedOn(GPIOB,GPIO_Pin_3);
  184.                         a=1;
  185.                 }
  186.                 else if (a==1)
  187.                 {
  188.                         LedOff(GPIOB,GPIO_Pin_3);
  189.                         a=0;
  190.                 }
  191.                 EXTI_ClearITPendingBit(EXTI_Line8);
  192.   }
  193.         else if(EXTI_GetITStatus(EXTI_Line9)!=RESET)
  194.         {        
  195.                 LedOff(GPIOB,GPIO_Pin_1|GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3);        
  196.                 EXTI_ClearITPendingBit(EXTI_Line9);
  197.   }
  198. }

复制代码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表