【STM32F103】中断综述

2019-08-23来源: eefocus关键字:STM32F103  中断  中断内核

一、中断内核: 


STM32的中断很强大,每个外设都可以产生中断,F103在内核水平上搭载了异常响应系统,系统异常有8个(算上RESET和HardFault也就10个),外部中断有60个,但是根据NVIC(嵌套向量中断控制器,控制整个芯片中断相关的功能),IP(中断优先级寄存器)数组中预留了240个位置(NVIC结构如上图),可见眼光之远,用于扩展,这是STM32F103用不到这么多。


如果以后要找跟内核相关的函数,都存在core_cm3.c和misc.c中,包括NVIC的函数的声明,但是其具体的库函数内容并不是和固件库头文件core_cm3.h一致(不在core_cm3.c),而是放在库函数的misc.c中,这点需要注意。


二、中断优先级的定义和分组:

 

 三、中断编程的顺序:


1、使能中断请求


如何使能,需要配置哪个寄存器?


注意:这里与NVIC中的中断使能寄存器不是等同概念,中断使能可以理解成有2个大门,外设使能(小门,比如串口有发送完成中断,接收完成中断,这两个中断由串口控制寄存器的相关中断使能位来控制)和NVIC(大门,接受请求)。


2、配置中断优先级分组


如何配置,需要配置哪个寄存器?


通过NVIC_PriorityGroup函数。


3、配置NVIC寄存器,初始化NVIC_InitTypeDef;(定义在misc.h中,成员如下)


1-NVIC_IRQChannel:指定中断源(中断类型列表参考STM32F10X.H中已列举给出)             


2-NVIC_IRQChannelPreemptionPriority:抢占优先级(根据分组表和选择来给) 


3-NVIC_IRQChannelSubPriority:子优先级(根据分组表和选择来给)


4-NVIC_IRQChannelCmd:使能或者失能(内核使能,相当于上面说的大门,enable或disable)


4、编写中断服务函数


1-中断服务函数名要怎么写?写错了怎么办?


在启动文件的中断向量表中,将中断函数名称都已经初始化好了,由C语言特点可知,函数的名称对应于函数的地址,但是这些函数的内容都是空的,都是B. (启动文件是汇编程序)表示无限循环,如果自己写了函数,但是写错了,系统就在中断向量表中找不到中断服务函数的入口地址,但是电脑不是人,不会对你写错的函数报错,因为程序有无意义电脑不能识别,它只会自动去系统里执行这个循环空函数,所以自己函数的名称一定与启动文件中的名称相对应。


2-中断服务函数要写在什么地方?


为了编程方便管理,我们可以把程序直接可以写在中,内核的函数已经给了,如果外设中断函数可以自己继续补充。


四、中断小结


STM32F10X中断的方法还是比较清晰的,和单片机类似,多了一个优先级嵌套和分组的功能,另外要注意一些使用库函数编程的细节即可,后续再通过实验例子来测试各类中断的具体使用方法。

关键字:STM32F103  中断  中断内核

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic472320.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:关于由CubeMx生成stm32f4+freertos,不正常分析之堆栈大小设置
下一篇:【STM32F103】RCC-使用HSE/HSI配置时钟

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

关于STM32f103 SPI时钟速度的问题

STM32f103 中APB1的最高频率是36MHz,APB2的最高频率是72MHz,而PCLK1和PCLK2一般也默认配置为其最高工作频率36M和72M。如下图(STM32F10xx_参考手册(第7版) 第46页)时钟树所示:SPI1时钟由APB2时钟分频而来,可以选择2、4、8、16、32、64、128、256这几个分频系数。而手册规定STM32的SPI时钟最快是18MHz。对于STM32F103的SPI1接口时钟,由72M的PCLK2分频得到,所以分配系数大于等于4(72M/4 = 18M)。对于STM32F103的SPI2/SPI3接口时钟,由36M的PCLK1分频得到,所以分配系数大于等于2(36M/2 = 18M
发表于 2019-09-12
关于STM32f103 SPI时钟速度的问题

STM32F4 HAL库DMA学习

;            对DMA的个别寄存器的参数进行填充,比如调用 HAL_DMA_Start()函数就会调用DMA_SetConfig()函数配置数据个数、源地址、目的地址等。而hdmatx 和第二步的DMA句柄是一模一样的,感觉最后转了一圈又转回会来了。。。  (4)  外设初始化、DMA初始化、外设和DMA进行关联、外设使能DMA发送或者接收、DMA调用函数开始发送或者接收。 个人感觉有时候HAL库的确有些冗余了,这时候可能就需要部分进行寄存器操作了。二、使用过程总结1、传输数据数目设置 注意传输数据的个数的设置:如果源
发表于 2019-09-11

STM32F103C8T6使用普通IO口模拟串口收发

在单片机用基本定时器来完成这样的事情。。。。即完成非阻塞式通讯!(1)定时器开启如下:(2)调用发送函数:UART4_Send_Buf(...);//注意STM32F103C8t6是没有串口4的!!!这是虚拟串口!!(3)调用的发送函数里面开启了定时器,所以接下来将在定时期中断中进行发送操作发送函数模拟了串口的时序:开始-发送-结束发送完一个字节,然后从缓冲区callback(),调用下一个字节进行传输!代码段如下:static void send_remain_byte(void){ if(VirtualUart.send_cnt>=VirtualUart.send_max) { VirtualUart.send_flag
发表于 2019-09-11
STM32F103C8T6使用普通IO口模拟串口收发

STM32F103的W25Q64的DMA高效数据访问实现

** Descriptions:            none**------------------------------------------------------------------------------** HW_CMU:                  STM32F103ZET6** Libraries:               STM32F10x_St
发表于 2019-09-11

STM32F103C8T6 Standby低功耗模式

1. 开发环境:winXPMDK4.45STM32 3.5固件库2. 低功耗模式简介刚接触PWR的内容,使用手册说的不太能让我好理解。其实当你弄懂了以后再回去看使用手册还是能找到的,只是写的过于简略,对于初学者很多地方理解不到位。 这个小总结完全从初学者角度,目的只有一个:进入/唤醒 PWR的standby模式。其实更多的是如何配置进入,唤醒基本上是配置好了后自动完成或硬件出发的,我们需要做的退出后的设计。这块内容暂不作为本次讨论内容。NVIC  和 PWR 各寄存器状态决定三种低功耗模式:低功耗模式一览表 PS: STM32F的NRST是异步复位脚。当NRST输入低电平的时候,MCU处于
发表于 2019-09-11
STM32F103C8T6 Standby低功耗模式

关于STM32F107VCT6串口DMA接收数字控制LED亮灭的功能实现

主函数中代码如下:#include "stm32f10x.h"void GPIO_Config(void);void USART_Config(void);void DMA_Config(void);void NVIC_Config(void);void LED1_ON(void);void LED2_ON(void);void LED3_ON(void);void LED4_ON(void);void LED_ALL_OFF(void);void delay(void);uint8_t DMA_BUFFER[1]; int main(){       
发表于 2019-09-10
关于STM32F107VCT6串口DMA接收数字控制LED亮灭的功能实现

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved