标题:
stm32按键中断程序
[打印本页]
作者:
zzt
时间:
2017-8-7 21:04
标题:
stm32按键中断程序
这是32基础的按键中断程序
全部资料下载地址:
实验6 按键中断.rar
(287.45 KB, 下载次数: 51)
2017-8-7 23:08 上传
点击文件名下载附件
下载积分: 黑币 -5
/******************** 尚学科技 **************************
* 实验平台:开拓者STM32开发板
* 库版本 :ST3.5.0
* 作者 :尚学科技团队
* 本程序只供学习使用,未经作者许可,不得用于其它任何用途
*版权所有,盗版必究。
**********************************************************************************/
#include "exti.h"
#include "LED.h"
#include "delay.h"
/*
* 函数名:NVIC_Configuration
* 描述 :配置嵌套向量中断控制器NVIC
* 输入 :无
* 输出 :无
* 调用 :内部调用
*/
static void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/*设置NVIC中断分组2:2位抢占优先级,2位响应优先级*/
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
/*使能按键所在的外部中断通道*/
NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
/*设置抢占优先级,抢占优先级设为2*/
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
/*设置子优先级,子优先级设为1*/
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
/*使能外部中断通*/
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
/*根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器*/
NVIC_Init(&NVIC_InitStructure);
/*使能按键所在的外部中断通道*/
NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
/*设置抢占优先级,抢占优先级设为2*/
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
/*设置子优先级,子优先级设为1*/
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
/*使能外部中断通*/
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
/*根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器*/
NVIC_Init(&NVIC_InitStructure);
/*使能按键所在的外部中断通道*/
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
/*设置抢占优先级,抢占优先级设为2*/
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
/*设置子优先级,子优先级设为2*/
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;
/*使能外部中断通*/
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
/*根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器*/
NVIC_Init(&NVIC_InitStructure);
}
/*
* 函数名:EXTI_Config
* 描述 :配置PA0,PA13,PA15为线中断口,并设置中断优先级
* 输入 :无
* 输出 :无
* 调用 :外部调用
*/
void EXTI_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
/*开启外设时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE);
/*初始化 GPIOE3,GPIOE4 设置为上拉输入*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOE, &GPIO_InitStructure);
/* 初始化 GPIOA.0 设置为下拉输入*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*GPIOE4 中断线配置*/
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);
/*GPIOE4 中断初始化配置*/
EXTI_InitStructure.EXTI_Line=EXTI_Line4;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
/*根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存*/
EXTI_Init(&EXTI_InitStructure);
/*GPIOE3 中断线配置*/
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);
/*GPIOE3 中断初始化配置*/
EXTI_InitStructure.EXTI_Line=EXTI_Line3;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
/*根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存*/
EXTI_Init(&EXTI_InitStructure);
/*GPIOA.0 中断线配置*/
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
/*GPIOA.0 中断初始化配置*/
EXTI_InitStructure.EXTI_Line=EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
/*根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器*/
EXTI_Init(&EXTI_InitStructure);
/*配置中断控制器NVIC*/
NVIC_Configuration();
}
复制代码
作者:
QAQQAQ
时间:
2021-3-19 10:37
楼主真给力,解决了新手对于中断理解的问题,学到了!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1