转载:https://www.cnblogs.com/heny-hui/p/7130620.html

stm32的中断号根据不同内核和型号,st公司给的官方库中对相应的中断号进行了设置,我们用到哪一个外设的且要用到相应的中断功能时,在stm32fXXX.h中定义对应的型号的中断号。若要调用相关的中断功能,在NVIC中配置相关的中断优先级和中断号。STM32会内部会根据配置的中断号在启动文件中寻找相应的中断函数的相应的入口函数例如在配置串口的中断接收打赢函数时,在NVIC的配置中配置串口1的中断函数中设置的中断号为如下:

USART1_IRQn                 = 37,     /*!< USART1 global Interrupt

#define DEBUG_USART_IRQ                 USART1_IRQn

/* 配置中断源 */
NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;

以上是配置的串口1对应的中断号,那么他对应的中断处理函数是怎样的,是否可以随便的写?答案是不可以随便的写。ST公司在提供的启动文件startup_stm32fXXX.s中都对相应的中断号对应的中断处理函数的入口都已经规定好了,即必须按照他提供的启动文件的名字来在相关文件(可以不是stm32fxxx_it.c中写驱动)写中断函数,但可以通过宏定义的方式来实现按照自己定义的方式来写中断函数。如下是中断函数标识:

1、在startup_stm32fXXX.s定义的中断函数名在中断向量表中定义的__vectors             __vectors end:

    

DCD SPI1_IRQHandler ; SPI1 
DCD SPI2_IRQHandler ; SPI2 
DCD USART1_IRQHandler ; USART1    //注释:DCD是 个伪代码,USART1_IRQHandler这个是对应上边37号中断的串口中断函数
DCD USART2_IRQHandler ; USART2 
DCD USART3_IRQHandler ; USART3 
DCD EXTI15_10_IRQHandler ; External Line[15:10]s

在代码中我们通过宏定义来给这个中断处理函数起个别名来操作。

#define DEBUG_USART_IRQHandler                   USART1_IRQHandler  //起的别名

void   DEBUG_USART_IRQHandler(void)
{
uint8_t ch;

if(USART_GetITStatus(DEBUG_USART, USART_IT_RXNE) != RESET)

//ch = USART1->DR;
ch = USART_ReceiveData(DEBUG_USART);
printf( "%c", ch ); //
}

}

stm32 中断号和中断处理函数建立关系的更多相关文章

  1. linux设备驱动归纳总结(六):2.分享中断号【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-90837.html xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  2. 【Linux开发】linux设备驱动归纳总结(六):2.分享中断号

    linux设备驱动归纳总结(六):2.分享中断号 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  3. STM32中断管理函数

    CM3 内核支持256 个中断,其中包含了16 个内核中断和240 个外部中断,并且具有256 级的可编程中断设置.但STM32 并没有使用CM3 内核的全部东西,而是只用了它的一部分. STM32 ...

  4. 裸板中中断异常处理,linux中断异常处理 ,linux系统中断处理的API,中断处理函数的要求,内核中登记底半部的方式

    1.linux系统中的中断处理  1.0裸板中中断异常是如何处理的?     以s5p6818+按键为例          1)按键中断的触发        中断源级配置            管脚功 ...

  5. stm32中断服务函数

    你打开stm32的启动文件,例如startup_stm32f10x_hd.s 里面有很多中断跳转的入口.用白话说就是固件库帮你写好了发生什么中断时跳转到哪里,这些名字是一个函数名,你要把这些函数写出来 ...

  6. STM32学习笔记(六) SysTick系统时钟滴答实验(stm32中断入门)

    系统时钟滴答实验很不难,我就在面简单说下,但其中涉及到了STM32最复杂也是以后用途最广的外设-NVIC,如果说RCC是实时性所必须考虑的部分,那么NVIC就是stm32功能性实现的基础,NVIC的难 ...

  7. IOAPIC重定位中断处理函数思路整理

    因为小可并非硬件编程出身,汇编基础又比较差...所以刚开始理解利用IOAPIC重定位技术的时候相当困难. 何为IOAPIC? 首先,必须认识到它是一个硬件,可编程的硬件.我理解的它在整个流程中的作用如 ...

  8. STM32中断应用总结

    STM32中断很强大,STM32中断可以嵌套,任何外设都可以产生中断,其中中断和异常是等价的. 中断执行流程: 主程序执行过程可以产生中断去执行中断的内容(保护现场),然后在返回继续执行中断. 中断分 ...

  9. [fW]中断处理函数数组interrupt[]初始化

    中断处理函数数组interrupt[]初始化 2011-05-13 15:51:40 分类: LINUX 在系统初始化期间,trap_init()函数将对中断描述符表IDT进行第二次初始化(第一次只是 ...

随机推荐

  1. php导出excel再IE下乱码问题

    $userBrowser = $_SERVER['HTTP_USER_AGENT']; //判断是否是ie内核 $fileName = '会员列表-'.date('Y-m-d', time()).'. ...

  2. Vue遇到的一些小坑

    1.在使用v-html指令时,发现添加的元素不能设置样式 解决方案:在添加样式时使用>>>就可以添加成功 例如:<div v-html="<img src=&q ...

  3. 【代码笔记】Web-HTML-表单

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  4. Android--获取高清的app图标

    只有一个方法. public synchronized static Drawable getIconFromPackageName(String packageName, Context conte ...

  5. centos7下安装rabbitmq

    RabbitMQ: RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发.Rab ...

  6. 常用的docker命令

    在这里记一下,以免以后忘记了. ------------------------------------------------------------------------------------ ...

  7. Source Insight里头文件注释和函数头的注释

    1.将下述代码拷贝入一个文件,扩展名为em 2.打开BASE工程,添加本文件,并重新同步 3.添加hh_InsertFuncHeader的快捷键,即为函数头注释,光标需要放在函数名那一行,否则无效 4 ...

  8. [Kali_Debian] 清除无用的库文件(清理系统,洁癖专用)-布布扣-bubuko.com - Google Chrome

    [Kali_Debian] 清除无用的库文件(清理系统,洁癖专用) 时间:2014-11-07 16:25:36      阅读:1486      评论:0      收藏:0      [点我收藏 ...

  9. C# Aspose.Cells方式导入Excel文件

    读取Excel 类 我返回的是DataTable 类型 也可以返回DataSet类型 public class XlsFileHelper { public DataTable ImportExcel ...

  10. sql最简单的查询语句

    -- 2 **************************************************** -- 最简单的查询语句 -- 2.1 ----------------------- ...