stm32外部中断实验

发布者:BlissfulMoments最新更新时间:2018-06-15 来源: eefocus关键字:stm32  外部中断 手机看文章 扫描二维码
随时随地手机看文章

// 上一篇是关于串口通信的,用到GPIO的复用,将GPIO复用为usart串口;

// 此处是利用按键进行中断处理,这里配置GPIO模式为输入,因为要接收按键的状态;

//GPIO端口有很多,ABCD....但是中断只有22个,其中0~15个中断中断线与IO端口一一对应,需要配置GPIO与中断线的映射关系,(类似于端口复用)这里利用了函数:SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);

// 这里需要注意,使用的外部中断,先打开SYSCFG时钟,不然没法实现GPIO与中断线的映射。


#include "stm32f4xx.h"


void init_led(void);
void delay(void);


void key_init(void);
void exit_init(void);


void EXTI0_IRQHandler(void);                                                                       // 中断处理函数
void EXTI2_IRQHandler(void);
void EXTI3_IRQHandler(void);
void EXTI4_IRQHandler(void);


int  main(){
init_led();
key_init();
exit_init();

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);
while(1){  
delay();   
GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);
delay();
}
}


void delay(void){
int i,j;
for(i=0;i<1000;i++)
for(j=0;j<1000;j++)
{}
}


void init_led(void){ 
GPIO_InitTypeDef GPIO_InitStruct;


RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//这里是配置LED灯
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_InitStruct.GPIO_Speed=GPIO_Fast_Speed;


GPIO_Init(GPIOF, &GPIO_InitStruct);
}


void  key_init(void){
GPIO_InitTypeDef GPIO_InitStruct;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//KEY0,KEY1,KEY2
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN;              //这里的输入为按键状态
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_InitStruct.GPIO_Speed=GPIO_Fast_Speed;


GPIO_Init(GPIOE, &GPIO_InitStruct);

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//KEY0,KEY1,KEY2
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN;
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_DOWN;
GPIO_InitStruct.GPIO_Speed=GPIO_Fast_Speed;


GPIO_Init(GPIOA, &GPIO_InitStruct);


}


void exit_init(void){
EXTI_InitTypeDef EXTI_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;

key_init();

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE); 

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource2);// GPIO与中断线的映射
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource3);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource4);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);

EXTI_InitStruct.EXTI_Line=EXTI_Line2|EXTI_Line3|EXTI_Line4;
EXTI_InitStruct.EXTI_LineCmd=ENABLE;
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;

EXTI_Init(&EXTI_InitStruct);

EXTI_InitStruct.EXTI_Line=EXTI_Line0;
EXTI_InitStruct.EXTI_LineCmd=ENABLE;
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_Init(&EXTI_InitStruct);


NVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn;  // 中断分组
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0X02;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=0X02;
NVIC_Init(&NVIC_InitStruct);

NVIC_InitStruct.NVIC_IRQChannel=EXTI2_IRQn;  //
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0X02;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=0X02;
NVIC_Init(&NVIC_InitStruct);

NVIC_InitStruct.NVIC_IRQChannel=EXTI3_IRQn;  //
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0X02;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=0X02;
NVIC_Init(&NVIC_InitStruct);

NVIC_InitStruct.NVIC_IRQChannel=EXTI4_IRQn;  //
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0X02;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=0X02;
NVIC_Init(&NVIC_InitStruct);

}


void EXTI0_IRQHandler(){  //WAKE_UP
delay();
if((EXTI_GetFlagStatus(EXTI_Line0))!=RESET)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);
delay();
delay();
// GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);
}
EXTI_ClearITPendingBit(EXTI_Line0);
}




void EXTI2_IRQHandler(){  //WAKE_UP
delay();
if((EXTI_GetFlagStatus(EXTI_Line2))!=RESET)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);
delay();
delay();
GPIO_SetBits(GPIOF,GPIO_Pin_9);
}
EXTI_ClearITPendingBit(EXTI_Line2);
}
void EXTI3_IRQHandler(){  //WAKE_UP
delay();
if((EXTI_GetFlagStatus(EXTI_Line3))!=RESET)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
delay();
delay();
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
}
EXTI_ClearITPendingBit(EXTI_Line3);
}
void EXTI4_IRQHandler(){  //WAKE_UP
delay();
if((EXTI_GetFlagStatus(EXTI_Line4))!=RESET)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_10);
delay();
delay();
GPIO_ResetBits(GPIOF,GPIO_Pin_10);
}
EXTI_ClearITPendingBit(EXTI_Line4);
}


关键字:stm32  外部中断 引用地址:stm32外部中断实验

上一篇:STM32外部中断配置步骤
下一篇:STM32外部中断初始化

推荐阅读最新更新时间:2024-03-16 16:05

意法半导体推出STM32数控电源微控制器
    让云端应用设计变得更节能环保,STM32F334集成高分辨率定时器等先进功能,为数字功率转换应用带来高能效。     中国,2014年8月6日 ——横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)推出最新的数控电源微控制器(STM32F334),为推动数字经济增长的云计算技术进一步提高能效。     今天的数字基础设施耗电量巨大。在全球大约286,000千兆瓦时(GWh) 的年用电量中,仅数字中心一种产业就占据约1.3%。根据Uptime Institute机构的能源利用率(PUE, Power Usage Effective
[电源管理]
STM32学习笔记:FSMC详述
FSMC(Flexible Static Memory Controller,可变静态存储控制器)是STM32系列采用一种新型的 存储器 扩展技术。在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量 静态存储器 的扩展。 使用FSMC控制器后,可以把FSMC提供的FSMC_A 作为地址线,而把FSMC提供的FSMC_D 作为数据总线。 (1)当存储数据设为8位时,(FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b) 地址各位对应FSMC_A ,数据位对应FSMC_D (2)当存储数据设为16位时,(FSM
[单片机]
<font color='red'>STM32</font>学习笔记:FSMC详述
STM32上实现使用DMA+USART3传输数据
串口的配置的文档如下所示 出口3的头文件 #ifndef __USART3_H#define __USART3_H #include sys.h #define USART3_MAX_RECV_LEN 200 //×î´ó½ÓÊÕ»º´æ×Ö½ÚÊý#define USART3_MAX_SEND_LEN 200 //×î´ó·¢ËÍ»º´æ×Ö½ÚÊý#define USART3_RX_EN 1 //0,²»½ÓÊÕ;1,½ÓÊÕ.extern u8 USART3_RX_BUF ; //½ÓÊÕ»º³å,×î´óUSART2_MAX_RECV_LEN×Ö½
[单片机]
STM32峰会看MCU如何引领智能生活
2019年4月26至27日,一年一度的意法半导体STM32峰会如期举行,本次峰会以 “聚智慧,创未来” 为主题,聚焦人工智能与计算、工业与安全、云技术与连接三大技术趋势。 STM32峰会至今已举办了四届,该展会现今已成为单片机和嵌入式领域最具影响力的年度技术展会。有数千名开发者和合作伙伴来到会议现场,感受到了ST及其合作伙伴所展示的前沿的技术和创新,同时也可参加数项由ST和合作伙伴组织的技术论坛,以及STM32粉丝节。 与其他技术研讨会单纯的讲解技术推荐产品不同,STM32峰会展示了大量公司自行开发,或者第三方合作伙伴开发的产品,从而激发工程师更多创意灵感,也让开发者可以和ST技术人员进行更深入的面对面交流。 在开
[单片机]
从<font color='red'>STM32</font>峰会看MCU如何引领智能生活
stm32 起步 gpio操作
在工程中增加gpio lib.h和stm32头文件,如下: #include “stm32f10x.h” // Device header #include “stm32f10x_gpio.h” 调用lib配置gpio工作方式,先开启时钟,选GPIO,设置GPIO mode,gpio speed,主要看GPIO_InitTypeDef 结构体,芯片不同结构体不同,开始不清楚具体使用可以参考系统自带的example code,my setting如下: void GPIO_Initmain(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Configure all
[单片机]
STM32 PWM实现精确输出脉冲数控制电机
精确输出脉冲数控制电机,使用stm32单片机的pwm功能实现,精确控制脉冲个数 单片机源程序如下: #include stm32f10x_lib.h #include sys.h #include usart.h #include delay.h #include led.h #include exti.h #include key.h #define MOTOR_DIR PBout(11)// PB11 #define MOTOR_EN PEout(15)// PE15 u16 i; u16 fre; u16 TIM5CH1_CAPTURE_VAL; //输入捕获值 u1
[单片机]
基于STM32的传感器接口模块的设计
摘要:基于STM32实现了电流型、电压型以及数字IO型传感器接口模块;进行了接口模块的软件设计,说明了详细的固件代码设计。除传统串口外,提供以太网接口,嵌入UDP协议,提供后期开发的便利接口。 关键词:信号接口;传感器接口模块;UDP协议 0 引言 物联网将会是未来很长一段时间内IT产业的发展趋势,一个完整的物联网系统的构成或产业链的划分,目前业界比较统一的观点基本都认为应该包括三个层面:末端设备或子系统、通信连接系统、以及管理和应用系统。即Device-设备、Connect-连接和Manage-管理。由于数字整合的需求日益增长,对作为感知层核心组成元素的传感器数据融合提出了更高要求。如何将传感器连入网络成为一个尤其重要的问题
[工业控制]
基于<font color='red'>STM32</font>的传感器接口模块的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved