找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3276|回复: 1
打印 上一主题 下一主题
收起左侧

stm32按键中断程序

[复制链接]
跳转到指定楼层
楼主
ID:225587 发表于 2017-8-7 21:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是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. }


复制代码


评分

参与人数 1黑币 +100 收起 理由
admin + 100

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:588361 发表于 2021-3-19 10:37 | 只看该作者
楼主真给力,解决了新手对于中断理解的问题,学到了!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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