历史上的今天
返回首页

历史上的今天

今天是:2024年12月11日(星期三)

正在发生

2018年12月11日 | STM32向量表-串口1中断

2018-12-11 来源:eefocus

DCD指令:用于分配一片连续的字存储单元(32bit),并将表达式的值初始化给该字存储单元,类似于C中定义数组并初始化。比如: DCD 0 的意思是:分配一个字存储单元,并将该单元初始化为0。


EXPORT指令:伪指令,用于在程序中声明一个全局标号,该标号可以在其他文件中使用


一、STM32的启动文件分析


https://blog.csdn.net/weicao1990/article/details/46914013


1.STM32启动文件中可以看到如下代码


__Vectors       DCD     __initial_sp               ; Top of Stack

                DCD     Reset_Handler              ; Reset Handler

                DCD     NMI_Handler                ; NMI Handler

                DCD     HardFault_Handler          ; Hard Fault Handler

                DCD     MemManage_Handler          ; MPU Fault Handler

                DCD     BusFault_Handler           ; Bus Fault Handler

                DCD     UsageFault_Handler         ; Usage Fault Handler

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     SVC_Handler                ; SVCall Handler

                DCD     DebugMon_Handler           ; Debug Monitor Handler

                DCD     0                          ; Reserved

                DCD     PendSV_Handler             ; PendSV Handler

                DCD     SysTick_Handler            ; SysTick Handler

                ......


这一段是分配STM32的中断向量表。从DCD后面表达式的名称可以看出第一个字存储单元分配给了栈顶,其值为__initial_sp。第二个字分配给了复位地址,其值为Reset_Handler,后面接着分配给其他异常或中断。


这里的Reset_Handler,NMIException等,其实是一个地址值,也就是中断处理函数的入口地址。在函数实现时,由编译器分配一个地址值


为什么是这样的分配顺序?


问题的答案好找,我们参考《STM32参考手册》:



可以看到,启动文件中的向量表的分配的顺序是按照固定的规则来的。


2.自定义串口1中断服务函数



三部配置之后,若产生串口1中断,则会进入此函数void feng_usart1_handler(void);


推荐阅读

史海拾趣

CMD公司的发展小趣事

随着公司业务的不断拓展,CMD开始在全球范围内建立销售办事处。从最初的美国加利福尼亚州Irvine总部,逐渐扩展至加州、明尼苏达州、马萨诸塞州,甚至英国等地。这一布局不仅增强了公司的市场影响力,也为其提供了更多的商业合作机会。

Dalian Dlicap Corporation公司的发展小趣事

2023年12月29日,大连达利凯普科技股份公司在深圳证券交易所创业板正式挂牌上市,股票代码为301566。这一里程碑式的事件标志着公司进入了一个新的发展阶段。上市融资将为达利凯普提供更多的资金支持和发展机遇,公司将继续加大研发投入和市场拓展力度,不断推动技术创新和产业升级。同时,达利凯普也将积极履行社会责任和义务,为电子行业的发展做出更大的贡献。

请注意,这些故事概要基于现有信息整理而成,具体细节可能因时间、环境等因素而有所不同。

FILTRONETICS Inc公司的发展小趣事

FILTRONETICS Inc成立于1970年代,初期专注于滤波器技术的研发与生产。在那个时代,随着通信技术的快速发展,对高质量滤波器的需求日益增长。公司研发团队通过不懈努力,成功研发出了一种新型LC滤波器,该滤波器在频率选择性和插入损耗方面表现出色,迅速获得了市场的认可。这一技术突破不仅巩固了FILTRONETICS在滤波器领域的地位,也为公司的后续发展奠定了坚实的基础。

EXCELTA公司的发展小趣事

随着科技的不断进步和市场的不断变化,Excelta始终将技术创新作为公司发展的核心驱动力。公司投入大量资金和资源进行技术研发和产品创新,不断推出具有竞争力的新产品。其中,一款高性能的微型连接器产品凭借其出色的性能和稳定性在市场上取得了巨大成功。此外,Excelta还积极探索新的应用领域和市场机会,为公司的持续发展注入了新的活力。

CHERRY公司的发展小趣事

1953年,一位名叫Walter Lorain CHERRY的德国年轻人在美国创立了Cherry公司,地点选在了一家餐厅的地下室。当时,Cherry的主要业务是生产微动开关,这种开关被广泛应用于各种电子设备中。Cherry的微动开关因其高品质和可靠性而赢得了市场的广泛认可,逐渐成为了行业内的佼佼者。

Advanced Interconnections Corp公司的发展小趣事

为了进一步提升国际竞争力,AIC公司开始实施全球化布局战略。公司先后在多个国家设立了研发中心和生产基地,以便更好地服务全球客户。同时,AIC公司还积极参加国际展览和交流活动,与海外企业建立合作关系,推动产品的全球化销售。这些举措使AIC公司的国际影响力不断提升,市场份额也进一步扩大。

问答坊 | AI 解惑

如何在火线零线间点亮发光二级管?

火线、零线两之间,我用一只红色发光二极管串接一个100K电阻并在火线零线之间后,发光二极管正常工作; 可是我用一蓝色发光二极管串接一个100K电阻并在火线零线之间后,为什么就不能正常工作了呢? 着急啊?请教各位大侠,用蓝灯如何接才能正常、 ...…

查看全部问答>

全球最古怪的“双面”车

据金鹰网报道 现年39岁的Vasyl Lazarenko是一位来自乌克兰西部的工匠。由于女友非常喜欢坐敞篷车去兜风,而他自己又觉得硬顶车篷很实用,于是突发奇想,决定自己打造一款世界上独一无二的“双面车”。 这辆车的左边是现代轿车的造型,而右边则 ...…

查看全部问答>

vxworks下跨网段无法ping通???

老弟最近在开发过程遇到一个问题,就是开发出的vxworks程序 1、跨网段无法ping通,报文也过不去。 现象与现状:    同网段可以ping通,报文也可以过去。    目前的所跨的两个采用B类地址,从第二位开始有区别区分子网。分 ...…

查看全部问答>

单片机发声参数如何计算

我在学习单片机输出到蜂鸣器的时候有这样一段程序 bb bit p2.4     ;定义bb在下面程序中代表p2.4,连接蜂鸣器     star: clr bb          ;使v1 9015导通      &n ...…

查看全部问答>

请做过TCP/IP方面的大侠指教一下.

想用ARM7+RTL8019做一个网络方面的东西.功能是将这个产品接入一个局域网中通过一个服务器件(192.168.1.3)发送数据(没分钟一个包大概几百字节)到另一个服务器(192.168.2.8)所在的局域网中的某一个产品. 见下图: A(ARM+8019) 192.168.1.3 192.168. ...…

查看全部问答>

关于2440 WINCE5.0 BSP中EBOOT的一点疑问,谢谢解疑

我在三星官方下了个SMDK2440A WINCE5.0的BSP,弄NBOOT+EBOOT启动的时候发现个问题: 在EBOOT中的main.c文件: void main(void) {             // Clear LEDs.     //        ...…

查看全部问答>

嵌入式操作系统裁剪是什么意思?

不裁剪不行吗? 我没有用到的功能我不用,比如任务的调度什么的,也不会影响我最终生成的可执行文件的大小啊。 …

查看全部问答>

端口没有反应

小弟近日用如下程序测试我的MSP430F149做的一个板子,本来应该输出一个方波,但是没有反应。请各位高手帮看看! #include <msp430x14x.h> void main( void ) { WDTCTL = WDTPW+WDTHOLD; P4DIR |= 0x02; for(;;) { ...…

查看全部问答>

【 低功耗】利用 Xilinx 功耗估计器分七步精确分析最坏情况下的功耗使用

利用 Xilinx 功耗估计器分七步精确分析最坏情况下的功耗使用 [ 本帖最后由 hangsky 于 2011-11-8 13:26 编辑 ]…

查看全部问答>

《那年,一步一步学linux c》全系列

本系列全部文章已整理成电子文档,下载地址: https://download.eeworld.com.cn/detail/tiankai001/13375 《那年,一步一步学linux c》全系列(目录索引) 几点说明:该系列文章中所用结构数据代码均来自linux2.6.39.文章中若有不对或某些功 ...…

查看全部问答>