32中的外部中断

一、理解中断

关于32的中断

中断就是给cpu一个信号,cpu收到这个对应的信号再进行指挥

最常用的就是按键   key1按下是咩意思key2呢这样

中断信号线CPU要和对应的元器件连接

二、中断代码

代码编写

所有的0脚对应中断寄存器0,以此类推

引脚为n   EXTI_Line(n)  GPIO_PinSource(n)

GPIO映射如图

中断服务函数的映射关系

GPIO

IRQn

IRQHandler

GPIO_Pin0

EXTI0_IRQn

EXTI0_IRQHandler

GPIO_Pin1

EXTI1_IRQn

EXTI1_IRQHandler

GPIO_Pin2

EXTI2_IRQn

EXTI2_IRQHandler

GPIO_Pin3

EXTI3_IRQn

EXTI3_IRQHandler

GPIO_Pin4

EXTI4_IRQn

EXTI4_IRQHandler

GPIO_Pin5 — GPIO_Pin9

EXTI9_5_IRQn

EXTI9_5_IRQHandler

GPIO_Pin10 — GPIO_Pin15

EXTI15_10_IRQn

EXTI15_10_IRQHandler

EXTI输入线外部中断输入浮空输入或带上拉输入/下拉输入

三、示例代码

ps:我用的是外部中断,上拉输入(触发为低,本来是高电平),PB5

.c文件

 /**
  * @brief  配置嵌套向量中断控制器NVIC
  * @param  无
  * @retval 无
  */
static void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  
  /* 配置NVIC为优先级组1 */
	/* 提示 NVIC_PriorityGroupConfig() 在整个工程只需要调用一次来配置优先级分组*/
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  
  /* 配置中断源:按键1 */
  NVIC_InitStructure.NVIC_IRQChannel = GM10_INT_EXTI_IRQ;
  /* 配置抢占优先级 */
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  /* 配置子优先级 */
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  /* 使能中断通道 */
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

}

 /**
  * @brief  配置 IO为EXTI中断口,并设置中断优先级
  * @param  无
  * @retval 无
  */
void EXTI_GM10_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure; 
	EXTI_InitTypeDef EXTI_InitStructure;

	/*开启按键GPIO口的时钟*/
	RCC_APB2PeriphClockCmd(GM10_INT_GPIO_CLK,ENABLE);

												
	/* 配置 NVIC 中断*/
	NVIC_Configuration();
	
/*--------------------------GM10配置-----------------------------*/
	/* 选择按键用到的GPIO */	
  GPIO_InitStructure.GPIO_Pin = GM10_INT_GPIO_PIN;
  /* 配置为上拉输入 */	
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GM10_INT_GPIO_PORT, &GPIO_InitStructure);

	/* 选择EXTI的信号源 */
  GPIO_EXTILineConfig(GM10_INT_EXTI_PORTSOURCE, GM10_INT_EXTI_PINSOURCE); 
  EXTI_InitStructure.EXTI_Line = GM10_INT_EXTI_LINE;
	
	/* EXTI为中断模式 */
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	/* 上升沿中断 */
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  /* 使能中断 */	
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
}	
//中断函数	
void GM10_IRQHandler(void)
{
	int num;
  //确保是否产生了EXTI Line中断
	if(EXTI_GetITStatus(GM10_INT_EXTI_LINE) != RESET) 
	{
    /*
        功能代码//中断里代码少写点
    */
    //清除中断标志位
		EXTI_ClearITPendingBit(GM10_INT_EXTI_LINE);     
	}  
}

.h文件

#ifndef __EXTI_H
#define	__EXTI_H


#include "stm32f10x.h"
#include "uart1.h"
#include "LED.h"
//引脚定义  PB5
#define GM10_INT_GPIO_PORT         GPIOB
#define GM10_INT_GPIO_CLK          (RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO)
#define GM10_INT_GPIO_PIN          GPIO_Pin_5
#define GM10_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOB
#define GM10_INT_EXTI_PINSOURCE    GPIO_PinSource5
#define GM10_INT_EXTI_LINE         EXTI_Line5   
#define GM10_INT_EXTI_IRQ          EXTI9_5_IRQn

#define GM10_IRQHandler            EXTI9_5_IRQHandler



void EXTI_GM10_Config(void);


#endif /* __EXTI_H */

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值