OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2840|回复: 6

中断服务函数TIM3_IRQHandler 怎么知道的 ,也没有声明啊,没有定义啊

[复制链接]

52

主题

160

帖子

0

精华

高级会员

Rank: 4

积分
725
金钱
725
注册时间
2019-6-27
在线时间
153 小时
发表于 2020-3-9 19:20:53 | 显示全部楼层 |阅读模式
1金钱
中断服务函数TIM3_IRQHandler 怎么知道的  ,也没有声明啊,没有定义啊  

最佳答案

查看完整内容[请看2#楼]

在.s文件里面都定义了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2020-3-9 19:20:54 | 显示全部楼层
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6741
金钱
6741
注册时间
2017-4-12
在线时间
1258 小时
发表于 2020-3-9 20:08:39 | 显示全部楼层
你去看看.s启动文件
回复

使用道具 举报

0

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2020-3-8
在线时间
7 小时
发表于 2020-3-9 20:56:45 | 显示全部楼层
找到你项目里的startup_stm32fxxx.s文件看看,你会找到答案
回复

使用道具 举报

8

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
439
金钱
439
注册时间
2018-12-21
在线时间
126 小时
发表于 2020-3-9 21:50:32 | 显示全部楼层
所谓中断,就是在某些事件触发后,CPU退出当前指令执行,转而到一个特定的地址去取得新的PC值,然后跳转到新PC值处开始执行,并自动保存部分寄存器。
而这个特定的地址就是在FLASH的头部一段区域,0x08000000处是初始堆栈值,接下来是复位中断服务函数地址,一直延续下去,直到所有支持的中断结束。之后才是普通的程序存储区。
TIM3_IRQHandler就包含在这个区域内,已经由启动文件定义了,但是启动文件定义的该中断服务函数的入口地址指向的是一个死循环。
所以你在C代码还要声明一次这个中断服务函数,用你自己写的函数覆盖掉原本默认的死循环,就这样。
反正我讲的不一定很详细,具体你可以自行参考一些特定资料,比如《微机原理》了解中断的工作机制,然后参考ARM官方的技术手册看看它对这个内核的描述。另外部分的STM32入门教程有关于底层的讲解,你也可以看看,还有ARM的汇编相关书籍都有关于底层原理的描述。
回复

使用道具 举报

52

主题

160

帖子

0

精华

高级会员

Rank: 4

积分
725
金钱
725
注册时间
2019-6-27
在线时间
153 小时
 楼主| 发表于 2020-3-10 07:39:12 | 显示全部楼层
正点原子 发表于 2020-3-9 19:20
在.s文件里面都定义了

哪个.s能说全点吗
回复

使用道具 举报

52

主题

160

帖子

0

精华

高级会员

Rank: 4

积分
725
金钱
725
注册时间
2019-6-27
在线时间
153 小时
 楼主| 发表于 2020-3-10 07:43:55 | 显示全部楼层
正点原子 发表于 2020-3-9 19:20
在.s文件里面都定义了

为什么在.s文件中定义  
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-22 00:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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