OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 200|回复: 0

STM8中断向量和中断函数编写指南

[复制链接]

  离线 

4

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2015-11-12
在线时间
73 小时
发表于 2017-9-29 09:50:05 | 显示全部楼层 |阅读模式
正点原子公众号
本帖最后由 小景 于 2017-9-29 09:52 编辑

在网上搜索了很多关于STM8的中断向量表的初始化和中断函数编写的资料,写的都不是很清楚,到头来看的云里来雾里去的。对学习STM8的的初学者来讲困扰挺大。
今天我在此分享一下STM8中断向量和中断函数编写的总结;由于本人也是学习者,如文中有不对的地方,还希望能得到各位攻城狮和程序猿的指点。废话不多说,上硬货:【我们采用PC端口的外部中断为例】
1、STM8开发上使用最多的编译器大概就是ST自己公司的STVD和IAR两个;根据编译器的不同,中断向量的初始化和中断函数的编写稍有一些区别,分别介绍如下:
①:STVD的环境搭建好之后:在项目创建完毕,我们会得到如下的中断向量表stm8_interrupt_vector.c参加图1:
file:///C:/Users/PRAGUE~1.JIN/AppData/Local/Temp/enhtmlclip/Image.png
打开此源文件,在文件中进行中断向量表的初始化和中断函数的声明。
中断函数声明采用的格式为@far @interrupt void NonHandledInterrupt_xxxx (void);其中NonHandledInterrupt_xxxx是你自己命名的,不同的中断要采用不同的中断名字。此中断服务函数的名字和向量表中的名字要一致,具体看如下图红色表框
参见图2:
肯定会有人问:在中断向量表中为什么中断要写在irq5处(即33行处),这个并不是随便写在任何地方都可以,大家就需要查看另外一份手册《STM8S参考手册》,在中断映射章节我们可以看出PC端口的外部中断向量号为5.这就说明了我们为什么在程序中需要写到irq5.
参见图3:
在项目源文件中程序就可以像下面这样编写、
@far @interrupt void NonHandledInterrupt_xxxx (void)
{

    //在此添加你需要执行的中断代码

}
至此,在STVD中的中断向量表的初始化和中断函数声明、中断服务函数的编写讲解就到此为止了。
最后在主函数中,main函数之后,while循环之前打开总中断,我们就可以使用中断了。
参见图4:
②:在IAR中我们需要这样编写
参见图5:
中断号变为7是因为增加了复位中断(RESET)和软件中断的标号(TRAP),
在main函数之后while循环之前打开中断,就可以在IAR中使用STM8的中断服务函数了。
参见图6:
2、这个就是我在STM8关于中断向量初始化和中断服务函数编写的一点小小总结。如果有不对的地方欢迎大家讨论:我的联系方式:792028616@qq.com



1.png
2.png
3.png
4.png
5.png
6.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2017-11-20 21:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */