STM32向量表-串口1中断

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaolongwoaini99/article/details/81836470

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参考手册》:

扫描二维码关注公众号,回复: 2912344 查看本文章

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

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

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

猜你喜欢

转载自blog.csdn.net/xiaolongwoaini99/article/details/81836470
今日推荐