STM32外部中断线编程

#include "ExtiConfig.h"

unsigned char key1Down = 0;
unsigned char key2Down = 0;

/**************************************************************
**
**
***************************************************************/
void EXTI_Config(void)
{
	EXTI_InitTypeDef extiStruct;
	NVIC_InitTypeDef nvicStruct;
    GPIO_InitTypeDef GPIOInit;

//	NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00);
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//先4 从4
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);

//GPIOA 配置
	GPIOInit.GPIO_Mode = GPIO_Mode_IPU;	//PA0 上拉输入
	GPIOInit.GPIO_Pin = GPIO_Pin_3;		//LF
	GPIOInit.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOD, &GPIOInit);

	GPIOInit.GPIO_Mode = GPIO_Mode_IPU;	//PB5 上拉输入
	GPIOInit.GPIO_Pin = GPIO_Pin_13;
	GPIOInit.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC, &GPIOInit);

	GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource3);
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);

	extiStruct.EXTI_Line = EXTI_Line3 | EXTI_Line13;
	extiStruct.EXTI_Mode = EXTI_Mode_Interrupt;
	extiStruct.EXTI_Trigger = EXTI_Trigger_Falling;
	extiStruct.EXTI_LineCmd = ENABLE;
	EXTI_Init(&extiStruct);
	EXTI_ClearITPendingBit(EXTI_Line3);
	EXTI_ClearITPendingBit(EXTI_Line13);	

    	//外部中断线0,中断复用PA0
	nvicStruct.NVIC_IRQChannel = EXTI3_IRQn;
	nvicStruct.NVIC_IRQChannelPreemptionPriority = 1;
	nvicStruct.NVIC_IRQChannelSubPriority = 1;
	nvicStruct.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&nvicStruct); 	

	nvicStruct.NVIC_IRQChannel = EXTI15_10_IRQn;
	nvicStruct.NVIC_IRQChannelPreemptionPriority = 1;
	nvicStruct.NVIC_IRQChannelSubPriority = 0;
	nvicStruct.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&nvicStruct);
}

/**************************************************************
**  外部中断函数,中断线为13
**
***************************************************************/
void EXTI_Line13IRQ(void)
{
    if(EXTI_GetITStatus(EXTI_Line13)!=RESET)
    {
        if(key1Down==0)
        {
            key1Down = 1;
        }
        EXTI_ClearITPendingBit(EXTI_Line13); //清除 LINE 上的中断标志位
    }
}

/**************************************************************
**  外部中断函数,中断线为13
**
***************************************************************/
void EXTI_Line3IRQ(void)
{
    if(EXTI_GetITStatus(EXTI_Line3)!=RESET)
    {
        if(key2Down==0)
        {
            key2Down = 1;
        }
        EXTI_ClearITPendingBit(EXTI_Line3); //清除 LINE 上的中断标志位
    }
}

一些全局的中断标志key1Down和key2Down是为了给工程的其他部分的程序提供一些逻辑。

时间: 2024-11-04 17:38:11

STM32外部中断线编程的相关文章

stm32中断优先级管理与外部中断编程

stm32中断优先级管理与外部中断编程 中断优先级管理 外部中断编程 原文地址:https://www.cnblogs.com/-wenli/p/10633445.html

STM32F103外部中断编程

STM32F103外部中断编程   中断,顾名思义就是停下手头的活,去干另外一件急活,干完急活然后回来继续干手头的活. 单片机和人一样,有时候也有更急的程序需要执行,执行完之后再回来执行之前正在执行的程序.今天就来试试如何让单片机中断当前任务,执行其他任务. 先看看我的实验板上做外部中断要用的资源:         如上图,板子的下面有三个独立按键,右下边有三个贴片的LED,其中这两部分的电路图如下图所示: 1.独立按键电路: 由上图可知,三个独立按键分别接在STM32的PB7.PB8.PB9引

STM32——外部中断EXIT实现

外部中断实现步骤: 一.初始化,包括:1.AFIO时钟中断和GPIO时钟使能:                          2.GPIO初始化                          3.设置EXTI线                          4.中断向量初始化 二.中断服务函数 采用PB9作为外部中断源,具体实现程序如下: 一.初始化 1 void EXTI_PB9_Init(void) 2 3 { 4 5 GPIO_InitTypeDef GPIO_InitStru

关于STM32的可编程电压检测器的使用方法

关于STM32的可编程电压检测器的使用方法 思维导图总览: 代码: 1 #include "sys.h" 2 #include "delay.h" 3 #include "usart.h" 4 #include "led.h" 5 #include "oled.h" 6 #include "24cxx.h" 7 #include "w25qxx.h" 8 9 #inc

STM32 外部中断

1)STM32一般有19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断.线 16:连接到 PVD 输出. 线 17:连接到 RTC 闹钟事件. 线 18:连接到 USB 唤醒事件. 2)配置 GPIO 与中断线的映射关系的函数 GPIO_EXTILineConfig()来实现的: void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource) ; 中断线上中断的初始化是通过函数 EXTI_Init(

STM32 外部中断简介

文章来源:http://blog.chinaunix.net/uid-24219701-id-4088004.html STM32  IO 口中断的一些基础概念.STM32 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32 的强大之处.STM32F103 的中断控制器支持 19 个外部中断/事件请求.每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置.STM32F103 的19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断. 线 16:连接到 PVD 输出

嵌入式02 STM32 外部中断实验

一.中断 由于某个事件的发生,CPU暂停当前正在执行的程序,转而执行处理事件的一个程序.该程序执行完成后,CPU接着执行被暂停的程序.这个过程称为中断.(我正在捉泥鳅,但是我妈喊我回家吃饭,我必须回家吃饭,回家途中,发现泥鳅没带,回去把泥鳅带回家,然后吃完饭继续捉泥鳅!!!) 中断是CPU处理外部突发事件的一个重要技术.引起中断的原因或者说发出中断请求的来源叫做中断源.根据中断源的不同,可以分为硬件中断和软件中断两大类,有了中断,系统可以更好更快的利用有限的系统资源解决系统响应速度和运行效率的一

STM32外部中断

0.STM32F103上测试 #include <stm32f10x.h> void GPIO_Config(void); void NVIC_Config(void); void EXTI_Config(void); int main(void) { GPIO_Config(); NVIC_Config(); EXTI_Config(); while(1): } void GPIO_Config(void) { /*定义一个GPIO_InitTypeDef类型的结构体,本类型在stm32f1

STM32外部中断简介

结构体里的寄存器的具体含义在STM32的技术手册上很详细. 特别注意:SYSTICK不是NVIC来控制.