你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F411【Nucleo】第五课--按键中断模式(基于keil5.13)

[复制链接]
颩色四葉愺 发布时间:2015-2-4 19:54
按键按下产生一个中断信号,MCU接收到信号后将led反转
(1)建立工程,新建工程的步骤就不说了!请参考我之前的帖子:
STM32F411【Nucleo】第一课--新建工程(基于keil 5.13)
(2)添加led相关文件,参考我写的led驱动
STM32F411【Nucleo】第二课--led灯(基于keil5.13)
添加延时相关函数,利用SysTick定时器精确延时,参考帖子
STM32F411【Nucleo】第三课--sysTick定时器(基于keil5.13)
(3)新建bsp_key.c  bsp_exit.c和bsp_key.h
bsp_key.c
  1. #include "bsp_key.h"

  2. void KEY_Init(void)
  3. {
  4.         GPIO_InitTypeDef GPIO_InitStructure;
  5.        
  6.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
  7.         /******使能GPIOC时钟*****/
  8.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
  9.         /******KEY对应引脚*****/
  10.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;
  11.         /******普通输入模式*****/
  12.         GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
  13.         /*****上拉******/
  14.         GPIO_Init(GPIOC,&GPIO_InitStructure);
  15.         /******初始化PC13*****/
  16. }

复制代码

bsp_exit.c
  1. #include "bsp_exit.h"
  2. #include "bsp_key.h"

  3. void EXTIX_Init(void)
  4. {
  5.         NVIC_InitTypeDef NVIC_InitStructure;
  6.         EXTI_InitTypeDef EXTI_InitStructure;
  7.        
  8.         KEY_Init();//按键对应的IO口初始化
  9.        
  10.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);//使用中断即为使用复用功能,这点M4与M3有区别
  11.        
  12.         SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC,EXTI_PinSource13);//PC13连接线13
  13.        
  14.         EXTI_InitStructure.EXTI_Line=EXTI_Line13;//LINE13
  15.         EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//中断事件
  16.         EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;//上升沿触发
  17.         EXTI_InitStructure.EXTI_LineCmd=ENABLE;//使能LINE13
  18.         EXTI_Init(&EXTI_InitStructure);
  19.        
  20.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//设置系统化中断优先级分组1
  21.         NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;//外部中断10-15
  22.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00;//抢占优先级0
  23.         NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02;//子优先级2
  24.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能外部中断通道
  25.         NVIC_Init(&NVIC_InitStructure);
  26.        
  27. }
复制代码

bsp_key.h
  1. #ifndef _BSP_KEY_H_
  2. #define _BSP_KEY_H_
  3. #include "stm32f4xx.h"

  4. #define KEY GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)

  5. void KEY_Init(void);
  6.        
  7. #endif
复制代码

(4)修改stm32f4xx_it.c
  1. #include "stm32f4xx_it.h"
  2. #include "bsp_led.h"
  3. extern void TimingDelay_Decrement(void);
  4. ……
  5. ……
  6. ……

  7. void SysTick_Handler(void)
  8. {
  9.         TimingDelay_Decrement();
  10. }

  11. void EXTI15_10_IRQHandler(void)
  12. {
  13.         if(EXTI_GetITStatus(EXTI_Line13) != RESET) //确保是否产生了EXTI Line中断
  14.         {
  15.                        
  16.                 LED_TOGGLE;
  17.                 EXTI_ClearITPendingBit(EXTI_Line13);     //清除中断标志位
  18.         }  
  19. }
复制代码

编译下载后,多次按下按键就能看见led状态不多反转 5.按键(中断方式).zip (9.17 MB, 下载次数: 307)
收藏 1 评论4 发布时间:2015-2-4 19:54

举报

4个回答
沐紫 回答时间:2015-2-5 09:55:55
谢谢!!!!
112207301219 回答时间:2015-7-28 13:40:39
感谢分享
胖虫lkdsp 回答时间:2016-3-7 20:52:14
非常感谢楼主的分享!
huaimaoatangge 回答时间:2018-8-20 09:26:37
厉害,好好看看
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版