stm32stm32cubemx 外部中断实验

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
STM32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组位一个单位的,同组间的外部中断同一时间只能使用一个。比如说,PA0,PB0,PC0,PD0,PE0,PF0,PG0这些为1组,如果我们使用PA0作为外部中断源,那么别的就不能够再使用了,在此情况下,我们智能使用类似于PB1,PC2这种末端序号不同的外部中断源。每一组使用一个中断标志EXTIx。EXTI0 – EXTI4这5个外部中断有着自己的单独的中断响应函数,EXTI5-9共用一个中断响应函数,EXTI10-15共用一个中断响应函数。上面这一段话把外部中断介绍的很详细。要注意的是红字部分,今天我使用的外部中断管脚是PB.7 PB.8 PB.9 &这几个管脚正好对应在一个中断响应函数里& & & &//选择中断管脚PB.7 PB.8 PB.8& & & &GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource7);& & & &GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);& & & &GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);&& & & &EXTI_InitStructure.EXTI_Line = EXTI_Line7 | EXTI_Line8 | EXTI_Line9; //选择中断线路7 8 9在这里我出错了/*********************************************************************************** 函数名称 : void EXTI_Configuration(void))** 函数功能 : 外部中断初始化** 输 & &入 : 无** 输 & &出 : 无** 返 & &回 : 无*********************************************************************************/void EXTI_Configuration(void){& & & &EXTI_InitTypeDef EXTI_InitS
& RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
& //复用时钟& & & &//清空中断标志& & & &EXTI_ClearITPendingBit(EXTI_Line2);& & & &EXTI_ClearITPendingBit(EXTI_Line3);& & & &EXTI_ClearITPendingBit(EXTI_Line5);&& & & &//选择中断管脚PB.7 PB.8 PB.8& & & &GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource7);& & & &GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);& & & &GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);&& & & &EXTI_InitStructure.EXTI_Line = EXTI_Line7 | EXTI_Line8 | EXTI_Line9; //选择中断线路7 8 9& & & &EXTI_InitStructure.EXTI_Mode = EXTI_Mode_I //设置为中断请求,非事件请求& & & &EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_F //设置中断触发方式为下降沿触发& & & &EXTI_InitStructure.EXTI_LineCmd = ENABLE; & & & & & & & & & & & & & & & & & & & & &//外部中断使能& & & &EXTI_Init(&EXTI_InitStructure);}void EXTI9_5_IRQHandler(void){& if(EXTI_GetITStatus(EXTI_Line7) != RESET)&
{ //添加中断处理程序
& & & //点亮LED灯& & & & & &PC1_H;&
& & & PC3_H;&
& & & PC13_L;& & EXTI_ClearFlag(EXTI_Line7);& & EXTI_ClearITPendingBit(EXTI_Line7); }& if(EXTI_GetITStatus(EXTI_Line8) != RESET)&
{ //添加中断处理程序
& & & & & &//点亮LED灯& & & & & &PC1_H;&
& & & PC3_L;&
& & & PC13_H;& & EXTI_ClearFlag(EXTI_Line8);& & EXTI_ClearITPendingBit(EXTI_Line8); }& if(EXTI_GetITStatus(EXTI_Line9) != RESET)&
{ //添加中断处理程序
& & & //点亮LED灯& & & & & &PC1_L;&
& & & PC3_H;&
& & & PC13_H;& & EXTI_ClearFlag(EXTI_Line9);& & EXTI_ClearITPendingBit(EXTI_Line9); }}
阅读(2185)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'STM32学习之外部中断',
blogAbstract:'之前看了网上有关外部中断的使用介绍,觉得很简单,现在想想有那种想法真是浮躁,不要做浮躁的嵌入式工程师,要脚踏实地。今天把外部中断实验做了一下,不做不知道,一作就是没做出来,网上参考别人的程序和有关资料还是没做出来,最后到群里问了问,被一个叫STM32的网友发现了我的问题,改过来之后程序按照自己的想法执行。下面介绍一下今天的使用总结:STM32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组位一个单位的,同组间的外部中断同一时间只能使用一个。比如说,PA0,PB0,PC0,PD0,PE0,PF0,PG0这些为1组,如果我们使用PA0作为外部中断源,那么别的就不能够再使用了,在此情况下,',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:2,
publishTime:3,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:2,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}STM32外部中断详解_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
STM32外部中断详解
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩4页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢STM32外部中断
我的图书馆
STM32外部中断
STM32外部中断&&
15:31:51|&&分类:
TA的最新馆藏[转]&
喜欢该文的人也喜欢STM32外部中断程序
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
STM32外部中断程序
&头文件及完整例程下载:
程序分析:
#include &led.h&
#include &delay.h&
#include &key.h&
#include &sys.h&
#include &usart.h&
#include &exti.h&
#include &beep.h&
//STM32开发板实验5
//外部中断实验 &
&int main(void)
delay_init();
//延时函数初始化
NVIC_Configuration();
//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600);
//串口初始化为9600
& LED_Init();
//初始化与LED连接的硬件接口
// BEEP_Init(); & & & &
//初始化蜂鸣器端口
KEY_Init(); & & & &
//初始化与按键连接的硬件接口
EXTIX_Init();
//外部中断初始化
// LED0=0;
//点亮LED0
printf(&OK\r\n&);
delay_ms(1000);
//按键初始化函数设置PC2,3,5为上拉输入
void KEY_Init(void) //IO初始化
& GPIO_InitTypeDef GPIO_InitS
//初始化KEY0--&GPIOA.13,KEY1--&GPIOA.15 &上拉输入
& RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA,PORTE时钟
GPIO_InitStructure.GPIO_Pin &= GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5;//PE2~4
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
& GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOE2,3,4
初始化中断时钟初始化中断GPIO口,设定优先级
void EXTIX_Init(void)
& EXTI_InitTypeDef EXTI_InitS
& NVIC_InitTypeDef NVIC_InitS
// & &KEY_Init();
// 按键端口初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能复用功能时钟
& //GPIOE.2 中断线以及中断初始化配置 & 下降沿触发
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource2);
EXTI_InitStructure.EXTI_Line=EXTI_Line2; //KEY2
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_I
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_F
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
//根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
&//GPIOE.3
&中断线以及中断初始化配置 下降沿触发 //KEY1
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource3);
EXTI_InitStructure.EXTI_Line=EXTI_Line3;
EXTI_Init(&EXTI_InitStructure);
& //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
&//GPIOE.4
&中断线以及中断初始化配置 &下降沿触发 //KEY0
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);
EXTI_InitStructure.EXTI_Line=EXTI_Line5;
EXTI_Init(&EXTI_InitStructure);
& //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
& & NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
//使能按键KEY2所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2,&
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;
//子优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
//使能按键KEY1所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2&
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
//子优先级1&
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//使能外部中断通道
NVIC_Init(&NVIC_InitStructure); &
&//根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
//使能按键KEY0所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2&
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
//子优先级0&
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//使能外部中断通道
NVIC_Init(&NVIC_InitStructure); &
&//根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
PC2中断LED1翻转
void EXTI2_IRQHandler(void)
delay_ms(10);//消抖
if(KEY2==0)
&//按键KEY2
LED1=!LED1;
EXTI_ClearITPendingBit(EXTI_Line2); &//清除LINE2上的中断标志位 &
//外部中断3服务程序,LED2翻转
void EXTI3_IRQHandler(void)
delay_ms(10);//消抖
if(KEY1==0)
//按键KEY1
LED2=!LED2;
EXTI_ClearITPendingBit(EXTI_Line3); &//清除LINE3上的中断标志位 &
//外部中断5服务程序,LED0翻转&
void EXTI9_5_IRQHandler(void)
delay_ms(10);//消抖
if(KEY0==0)
//按键KEY0
LED0=!LED0;
LED1=!LED1;&
EXTI_ClearITPendingBit(EXTI_Line5); &//清除LINE4上的中断标志位 &
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights Reserved更多频道内容在这里查看
爱奇艺用户将能永久保存播放记录
过滤短视频
暂无长视频(电视剧、纪录片、动漫、综艺、电影)播放记录,
按住视频可进行拖动
&正在加载...
收藏成功,可进入
查看所有收藏列表
当前浏览器仅支持手动复制代码
视频地址:
flash地址:
html代码:
通用代码:
通用代码可同时支持电脑和移动设备的分享播放
用爱奇艺APP或微信扫一扫,在手机上继续观看
当前播放时间:
一键下载至手机
限爱奇艺安卓6.0以上版本
使用微信扫一扫,扫描左侧二维码,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:
设备搜寻中...
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
连接失败!
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
部安卓(Android)设备,请点击进行选择
请您在手机端下载爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:
爱奇艺云推送
请您在手机端登录爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
180秒后更新
打开爱奇艺移动APP,点击“我的-扫一扫”,扫描左侧二维码进行登录
没有安装爱奇艺视频最新客户端?
正在检测客户端...
您尚未安装客户端,正在为您下载...安装完成后点击按钮即可下载
, 可在设置中重新打开噢!
30秒后自动关闭
《原子教你玩STM32》第10讲 外部中断实验_高清教程">《原子教你玩STM32》第10讲 外部中断实验_高清教程
请选择打赏金额:
播放量数据:快去看看谁在和你一起看视频吧~
更多数据:
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制
安装爱奇艺视频客户端,
马上开始为您下载本片
5秒后自动消失
&li data-elem="tabtitle" data-seq="{{seq}}"& &a href="javascript:void(0);"& &span>{{start}}-{{end}}&/span& &/a& &/li&
&li data-downloadSelect-elem="item" data-downloadSelect-selected="false" data-downloadSelect-tvid="{{tvid}}"& &a href="javascript:void(0);"&{{pd}}&/a&
选择您要下载的《
色情低俗内容
血腥暴力内容
广告或欺诈内容
侵犯了我的权力
还可以输入
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制

我要回帖

更多关于 stm32f407 外部中断 的文章

 

随机推荐