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

  • 冰山一角
  • LV5工程师
  • |      2014-01-05 16:57:40
  • 浏览量 3924
  • 回复:40

一、硬件和软件平台
硬件平台: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.编写中断服务函数。

五、实验结果照片








  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:33
枫叶蓝 2015-06-02
楼主有闲置的STM32开发板吗?低价转让给我吧我想学正点原子的教程
0   回复
举报
发布
冰山一角 2015-01-10
可以啊
0   回复
举报
发布
zailushanghe 2015-01-10
新注册的,能下载下看吗?
0   回复
举报
发布
冰山一角 2014-07-21
0   回复
举报
发布
空中翱翔的老虎 2014-06-13
顶冰哥 
0   回复
举报
发布
冰山一角 2014-06-11
 谢谢  顶起
0   回复
举报
发布
小宝 2014-06-10
谢谢冰哥分享。。。
0   回复
举报
发布
冰山一角 2014-05-28
0   回复
举报
发布
冰山一角 2014-03-27
谢谢夸奖
0   回复
举报
发布
Eagleson 2014-03-27
楼主威武!
0   回复
举报
发布
查看更多
x
收藏成功!点击 我的收藏 查看收藏的全部帖子