stm32学习之路:第九天(中断的调用)

bsp_key_exit.h文件

#ifndef __BSP_KEY_EXTI_H
#define __BSP_KEY_EXTI_H

#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_exti.h"

#define KEY1_GPIO_CLK RCC_AHB1Periph_GPIOA
#define KEY1_GPIO_PIN GPIO_Pin_0
#define KEY1_GPIO_PORT GPIOA

#define KEY1_EXTI_INT_CLK RCC_APB2Periph_SYSCFG
#define KEY1_EXTI_INT_PORTSOURCE EXTI_PortSourceGPIOA
#define KEY1_EXTI_INT_PINSOURCE EXTI_PinSource0
#define KEY1_EXTI_INT_IRQ                 EXTI0_IRQn
#define KEY1_EXTI_PIN EXTI_Line0

/*EXTI0_IRQHandler来源于启动文件start_stm32f429_439xx.s,中断名称不能随便写*/
#define KEY1_INT_EXTI_IRQHANDLER  EXTI0_IRQHandler

void EXTI_KEY_Config(void);

#endif /* __BSP_KEY_EXTI_H */



bsp_key_exti.c文件

#include "bsp_key_exti.h"



static void  EXTI_NVIC_Config(void)
{
/*定义NVIC结构体*/
NVIC_InitTypeDef NVIC_InitStruct;
/*设置4位的中断优先级,主1bit,子3bit*/
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/*==================3-初始化中断控制器NVIC==========================*/
/*配置中断源*/
NVIC_InitStruct.NVIC_IRQChannel = KEY1_EXTI_INT_IRQ;
/*主优先级设置*/
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
/*次优先级设置*/
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
/*使能*/
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStruct);
}

/*引用中断,用key1启动中断*/
void EXTI_KEY_Config()
{
/*定义GPIO结构体*/
GPIO_InitTypeDef GPIO_InitStruct;
/*定义EXTI结构体*/
EXTI_InitTypeDef EXTI_InitStruct;

/*=================1-初始化 KEY1 的输入口=====================*/
RCC_AHB1PeriphClockCmd(KEY1_GPIO_CLK, ENABLE);

GPIO_InitStruct.GPIO_Pin    = KEY1_GPIO_PIN;
GPIO_InitStruct.GPIO_Mode   = GPIO_Mode_IN; 
GPIO_InitStruct.GPIO_PuPd   = GPIO_PuPd_NOPULL;

GPIO_Init(KEY1_GPIO_PORT,&GPIO_InitStruct);

/*==================2-初始化外部中断EXTI==========================*/
/*打开RCC_APB2Periph_SYSCFG的时钟*/
RCC_APB2PeriphClockCmd(KEY1_EXTI_INT_CLK, ENABLE);
/*建立中断与KEY1的链接*/
SYSCFG_EXTILineConfig(KEY1_EXTI_INT_PORTSOURCE,KEY1_EXTI_INT_PINSOURCE);

/*key1的PA0对应EXTI0中断线*/
EXTI_InitStruct.EXTI_Line = KEY1_EXTI_PIN;
/*选择为中断模式,即产生中断*/
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
/*选择为上升沿触发*/
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;
/*使能EXTI线*/
EXTI_InitStruct.EXTI_LineCmd = ENABLE;

/*初始化EXTI_InitStruct结构体*/
EXTI_Init(&EXTI_InitStruct);

EXTI_NVIC_Config();

}
/*==================4-编写中断服务程序,在“stm32f4xx_it.c中”==========================*/
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值