标题: stm32按键中断程序 [打印本页]

作者: zzt    时间: 2017-8-7 21:04
标题: stm32按键中断程序
这是32基础的按键中断程序
全部资料下载地址:
实验6 按键中断.rar (287.45 KB, 下载次数: 51)

  1. /******************** 尚学科技 **************************
  2. * 实验平台:开拓者STM32开发板
  3. * 库版本  :ST3.5.0
  4. * 作者    :尚学科技团队
  5. * 本程序只供学习使用,未经作者许可,不得用于其它任何用途
  6. *版权所有,盗版必究。
  7. **********************************************************************************/

  8. #include "exti.h"
  9. #include "LED.h"
  10. #include "delay.h"


  11. /*
  12. * 函数名:NVIC_Configuration
  13. * 描述  :配置嵌套向量中断控制器NVIC
  14. * 输入  :无
  15. * 输出  :无
  16. * 调用  :内部调用
  17. */
  18. static void NVIC_Configuration(void)
  19. {
  20.                 NVIC_InitTypeDef NVIC_InitStructure;
  21.          /*设置NVIC中断分组2:2位抢占优先级,2位响应优先级*/
  22.           NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);       
  23.           /*使能按键所在的外部中断通道*/
  24.           NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
  25.     /*设置抢占优先级,抢占优先级设为2*/       
  26.           NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;       
  27.           /*设置子优先级,子优先级设为1*/
  28.           NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;               
  29.     /*使能外部中断通*/
  30.           NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;       
  31.      /*根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器*/               
  32.           NVIC_Init(&NVIC_InitStructure);
  33.        
  34.        
  35.                   /*使能按键所在的外部中断通道*/
  36.           NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
  37.     /*设置抢占优先级,抢占优先级设为2*/       
  38.           NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;       
  39.           /*设置子优先级,子优先级设为1*/
  40.           NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;               
  41.     /*使能外部中断通*/
  42.           NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;       
  43.      /*根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器*/               
  44.           NVIC_Init(&NVIC_InitStructure);
  45.        
  46.      /*使能按键所在的外部中断通道*/
  47.           NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;                       
  48.            /*设置抢占优先级,抢占优先级设为2*/       
  49.           NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;       
  50.           /*设置子优先级,子优先级设为2*/
  51.           NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;               
  52.            /*使能外部中断通*/
  53.           NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;       
  54.      /*根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器*/       
  55.           NVIC_Init(&NVIC_InitStructure);           

  56. }


  57. /*
  58. * 函数名:EXTI_Config
  59. * 描述  :配置PA0,PA13,PA15为线中断口,并设置中断优先级
  60. * 输入  :无
  61. * 输出  :无
  62. * 调用  :外部调用
  63. */
  64. void EXTI_Config(void)
  65. {
  66.     GPIO_InitTypeDef GPIO_InitStructure;
  67.           EXTI_InitTypeDef EXTI_InitStructure;
  68.   
  69.     /*开启外设时钟*/
  70.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
  71.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE);

  72.     /*初始化 GPIOE3,GPIOE4  设置为上拉输入*/
  73.           GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_4|GPIO_Pin_3;
  74.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  75.           GPIO_Init(GPIOE, &GPIO_InitStructure);
  76.     /* 初始化 GPIOA.0          设置为下拉输入*/
  77.           GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;
  78.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
  79.           GPIO_Init(GPIOA, &GPIO_InitStructure);

  80.     /*GPIOE4 中断线配置*/
  81.           GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);
  82.    
  83.      /*GPIOE4 中断初始化配置*/
  84.           EXTI_InitStructure.EXTI_Line=EXTI_Line4;
  85.           EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;       
  86.           EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  87.           EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  88.                 /*根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存*/
  89.           EXTI_Init(&EXTI_InitStructure);         
  90.                
  91.                
  92.                    /*GPIOE3 中断线配置*/
  93.           GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);
  94.    
  95.      /*GPIOE3 中断初始化配置*/
  96.           EXTI_InitStructure.EXTI_Line=EXTI_Line3;
  97.           EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;       
  98.           EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  99.           EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  100.                 /*根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存*/
  101.           EXTI_Init(&EXTI_InitStructure);         

  102.   

  103.     /*GPIOA.0 中断线配置*/
  104.           GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
  105.    
  106.           /*GPIOA.0 中断初始化配置*/
  107.           EXTI_InitStructure.EXTI_Line=EXTI_Line0;
  108.           EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;       
  109.           EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  110.           EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  111.                 /*根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器*/
  112.           EXTI_Init(&EXTI_InitStructure);               
  113.    
  114.                 /*配置中断控制器NVIC*/
  115.     NVIC_Configuration();
  116.        
  117. }


复制代码



作者: QAQQAQ    时间: 2021-3-19 10:37
楼主真给力,解决了新手对于中断理解的问题,学到了!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1