打印
[STM32F0]

【STM32F030探索套件】序列之五 外部中断

[复制链接]
2401|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一、硬件和软件平台
硬件平台:STM32F030探索套件
编译环境:MDK
硬件工具:Mini USB   
主要文件:key.h、key.c、exti.c和exti.h

     二、按键控制有两种基本的方式
1.按键扫描控制
2.按键中断控制
按键扫描效率相对要低,因为他一直需要MCU不停的扫描,这就会导致资源的浪费。而按键中断就很巧妙的弥补了这个缺点,只要系统IO口出现上升沿或下降沿电平就会触发执行中断内的程序。这样就不会限制MCU的工作。

三、外部中断简单讲解
在F030英文手册88页的3.9节就讲述了中断和事件,具体可以参考STM32F10x系列的,原理基本一样。
下面主要是对按键中断控制进行讲解:
1.配置GPIO与中断线的映射关系的函数SYSCFG_EXTILineConfig(),该函数将 GPIO端口与中断线映射起来;
2.IO口的中断触发方式:设置该中断线上中断的初始化参数,中断线上中断的初始化是通过函数EXTI_Init()实现的;
3. 在编写中断服务函数的时候会经常使用到两个函数,第一个函数是判断某个中断线上的中断是否发生(标志位是否置位) :ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)这个函数一般使用在中断服务函数的开头判断中断是否发生。
4.另一个函数是清除某个中断线上的中断标志位:这个函数一般应用在中断服务函数结束之前,清除中断标志位。void EXTI_ClearITPendingBit(uint32_t EXTI_Line)
这两个函数均在stm32f0xx_exti.c里面,大家可以查看。
5.中断服务函数,一般有固定的格式:
void EXTIx_x_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Linex)!=RESET)//判断某个线上的中断是否发生
{
中断逻辑…
EXTI_ClearITPendingBit(EXTI_Linex);   //清除 LINEx 上的中断标志位
}     
}

四、用IO口外部中断的一般步骤:
1.初始化IO口为输入;
2.开启IO口时钟,设置 IO 口与中断线的映射关系;
3.初始化线上中断,设置触发条件等;
4.配置中断分组(NVIC),并使能中断;
5.编写中断服务函数。

五、实验结果图片:lol


程序附件下载地址http://qfv8.com/forum.php?mod=viewthread&tid=324&page=1#pid652
沙发
Coobila| | 2014-1-5 21:05 | 只看该作者
good!

使用特权

评论回复
板凳
outstanding|  楼主 | 2014-1-5 22:59 | 只看该作者
Coobila 发表于 2014-1-5 21:05
good!

:lol

使用特权

评论回复
地板
胡斯哲| | 2014-1-6 13:16 | 只看该作者







向楼主学习

使用特权

评论回复
5
outstanding|  楼主 | 2014-1-6 15:57 | 只看该作者
胡斯哲 发表于 2014-1-6 13:16
向楼主学习

:handshake

使用特权

评论回复
6
chunnan| | 2014-6-17 07:35 | 只看该作者
感謝版大的分享,學習中

使用特权

评论回复
7
outstanding|  楼主 | 2014-6-17 11:21 | 只看该作者
chunnan 发表于 2014-6-17 07:35
感謝版大的分享,學習中

:handshake   共同学习  共同进步

使用特权

评论回复
8
数码小叶| | 2014-12-23 15:52 | 只看该作者
下载程序的论坛还要邀*码,下不了程序啊

使用特权

评论回复
9
monkeypony| | 2014-12-30 21:57 | 只看该作者
学习学习

使用特权

评论回复
10
周董| | 2014-12-30 23:09 | 只看该作者
这个怎么下载不了啊,求解!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:QQ:2550634286   可接项目和毕设等                   可以出售各种LED灯,控制类产品和                   控制类方案。

378

主题

4015

帖子

11

粉丝