本帖最后由 小景 于 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是你自己命名的,不同的中断要采用不同的中断名字。此中断服务函数的名字和向量表中的名字要一致,具体看如下图红 {MOD}表框
参见图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
一周热门 更多>