转载: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. LVOOP设计模式在路上(二)-- 策略模式

    前言 最近工作还挺忙的,连着好些周都是单休了,今天休息在家就来写写关于策略模式的理解和labivew的实现. 正文 1.什么是策略模式 定义是这样描述的:它定义了算法家族,分别封装起来,让它们之间可以 ...

  2. 使用git连接本地和远程github

    使用git连接本地和远程github 网上很多github的流程比较乱,自己尝试整理了一下,主要是步骤较为清晰,如果有不清楚的可详细进行搜索对比 1. 申请和设置github https://gith ...

  3. 消息队列&Celery&RabbitMQ&zeromq

    一.消息队列 什么是消息队列? “消息队列”是在消息的传输过程中保存消息的容器. “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象. 消息 ...

  4. typedef struct LNode命名结构指针(线性表的链式存储)

    一.typedef 关键字 1. 简介: typedef工具是一个高级数据特性,利用typedef可以为某一些类型自定义名称. 2. 工作原理: 例如我们定义链表的存储结构时,需要定义结点的存储数据元 ...

  5. uCrop图片裁剪

    uCrop使用 github地址 https://github.com/Yalantis/uCrop然后clone或下载到本地,运行之. 效果预览 app/build.gradle compile ' ...

  6. List基础操作

    /** * List基础操作 * Created by zhen on 2018/11/14. */ object ListDemo { def main(args: Array[String]) { ...

  7. Tensorflow实现稀疏自动编码(SAE)

    1.概述 人在获取图像时,并不是像计算机逐个像素去读,一般是扫一眼物体,大致能得到需要的信息,如形状,颜色,特征.怎么让机器也有这项能力呢,稀疏编码来了. 定义: 稀疏自编码器(Sparse Auto ...

  8. 洗礼灵魂,修炼python(27)--异常处理(1)—>了解异常

    python学到这,其实你应该是在入门到进阶的中间阶段了,但是还没有到进阶的阶段的,这是肯定的,因为进阶得可以从实际问题中解决问题的,比如写一个自动化的爬虫程序啊,对一件事物作大数据归纳分析,开发一个 ...

  9. python第二十四天-----作业终于完成啦

    作业 1, ATM:模拟实现一个ATM + 购物商城程序 额度 15000或自定义实现购物商城,买东西加入 购物车,调用信用卡接口结账可以提现,手续费5%支持多账户登录支持账户间转账记录每月日常消费流 ...

  10. Asp.Net WebApi Post请求整理(一)

    Asp.Net WebApi+JQuery Ajax的Post请求整理 一.总结 1.WebApi 默认支持Post提交处理,返回的结果为json对象,前台不需要手动反序列化处理.2.WebApi 接 ...