STM32定时器与中断整理
目录
1、系统异常中断
2、外部中断(全部)
3、优先级
5、如何开关中断示例
6、抢断优先级、响应优先级说明
7、定时器说明
7.1基本定时器
7.2高级/通用定时器
7.3定时器拓展补充-主要特性
F429 在内核水平上搭载了一个异常响应系统, 支持为数众多的系统异常和外部中断。
其中系统异常有10 个,外部中断有91 个。除了个别异常的优先级被定死外,其它异常的
优先级都是可编程的。有关具体的系统异常和外部中断可在标准库文件stm32f4xx.h 这个头
文件查询到,在IRQn_Type 这个结构体里面包含了F4 系列全部的异常声明。
1、系统异常中断
2、外部中断(全部)
3、优先级
如果有多个中断同时响应,抢占优先级高的就会抢占优先级低的优先得到执行,如果抢占优先级相同,就比较子优先级。如果抢占优先级和子优先级都相同的话,就比较他们的硬件中断编号,编号越小,优先级越高。
5、如何开关中断示例
串口
USART_ITConfig(DEBUG_USART1, USART_IT_RXNE, ENABLE); /* 使能串口接收中断 */USART_ITConfig(DEBUG_USART1, USART_IT_RXNE, DISABLE); /* 关闭串口接收中断 */
定时器
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); /* 使能定时器更新中断 */TIM_ITConfig(TIM4, TIM_IT_Update, DISABLE); /* 关闭定时器更新中断 */
DMA
DMA_ITConfig(DEBUG_SPI2_RX_DMA_STREAM,DMA_IT_TC,ENABLE);/* 开启传输完成中断*/DMA_ITConfig(DEBUG_SPI2_RX_DMA_STREAM,DMA_IT_TC, DISABLE);/*关闭传输完成中断*/
EXTI中断线(得重新配置)
SYSCFG_EXTILineConfig(KEY3_INT_EXTI_PORTSOURCE, KEY3_INT_EXTI_PINSOURCE); /* 连接 EXTI 中断源 到key3引脚 */EXTI_InitStructure.EXTI_Line = KEY3_INT_EXTI_LINE; /* 选择 EXTI 中断源 */EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; /* 中断模式 */EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;/* 上升沿触发 */EXTI_InitStructure.EXTI_LineCmd = ENABLE; /* 使能中断/事件线 */EXTI_Init(&EXTI_InitStructure);SYSCFG_EXTILineConfig(KEY3_INT_EXTI_PORTSOURCE, KEY3_INT_EXTI_PINSOURCE); /* 连接 EXTI 中断源 到key3引脚 */EXTI_InitStructure.EXTI_Line = KEY3_INT_EXTI_LINE; /* 选择 EXTI 中断源 */EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; /* 中断模式 */EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;/* 上升沿触发 */EXTI_InitStructure.EXTI_LineCmd = ENABLE; /* 关闭中断/事件线 */EXTI_Init(&EXTI_InitStructure);
6、抢断优先级、响应优先级说明
l 抢断优先级高的,能打断抢断优先级低的;
l 当抢断优先级相同时,执行顺序由响应优先级决定;
l 当抢断优先级、响应优先级都相同时,则按中断向量表的顺序执行。
如果抢断优先级一样,则不会打断,而是等待完成后执行。
比如有ABCD四个中断:
一、当A正在执行,又来了中断B,由于B的抢断优先级更高,所以会打断A的运行;
二、当A正在执行,又来了中断C,由于C抢断优先级<=A,所以会等待A完成后,再执行C;
三、当A正在执行,同时来了C和D,由于ABC优先级都相同,所以不会打断,而C的响应优先级比D高,所以在A完成后,会先执行C,再执行D。
7、定时器说明
STM32F42xxx 系列控制器有2 个高级控制定时器、10 个通用定时器和2 个基本定时器,还有2 个看门狗定时器。
控制器上所有定时器都是彼此独立的,不共享任何资源。各个定时器特性参考下表:
注意:其中最大定时器时钟可通过RCC_DCKCFGR 寄存器配置为90MHz 或者180MHz。
7.1基本定时器
主要两个功能,第一就是基本定时功能,生成时基,第二就是专门用于驱动数模转换器(DAC)。
基本定时器的内部时钟(CK_INT)频率默认设置为90MHz。
7.2高级/通用定时器
高级控制定时器(TIM1 和TIM8)和通用定时器在在基本定时器的基础上引入了外部引脚,可以输入捕获和输出比较功能。高级控制定时器比通用定时器增加了可编程死区互补输出、重复计数器、带刹车(断路)功能,这些功能都是针对工业电机控制方面。
一般情况下,我们都是使用内部时钟,内部时钟CK_INT 即来自于芯片内部,等于180M。
引脚分布见下表:
7.3定时器拓展补充-主要特性
- uva----(100)The 3n + 1 problem
- 程序员你为什么这么累[续]:编码习惯之接口定义
- Python-贝叶斯实战垃圾邮件过滤(大量数据)
- hdu------(3549)Flow Problem(最大流(水体))
- go语言实现http服务端与客户端
- hdu-----(1532)Drainage Ditches(最大流问题)
- LNMP无法删除.user.ini文件的解决方法
- HDU-----(4858)项目管理(模拟)
- hdu-----(4857)逃生(拓扑排序)
- HDU-----(1083)Courses(最大匹配)
- HDU----(3294)Girls' research(manacher)
- map
- hdu----(3068)最长回文(manacher)
- hdu---(1280)前m大的数(计数排序)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 报错坑 | LDSC安装报错怎么解决?
- 看看斯坦福大学是如何教学生编程的
- 安全框架shiro入门示例
- maven导入jar包到本地仓库
- Python-matplotlib 空间栅格数据可视化
- 图解面试题:如何找到喜欢的电影?
- Java agent 与 byte buddy
- 关于TRTC云端混流的踩坑分享
- 聊聊dubbo-go的ConsistentHashLoadBalance
- R语言用WinBUGS 软件对学术能力测验(SAT)建立分层模型
- R语言使用随机技术差分进化算法优化的Nelson
- R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析
- R语言和QuantLib中Nelson-Siegel模型收益曲线建模分析
- 用R语言用Nelson Siegel和线性插值模型对债券价格和收益率建模
- R语言LME4混合效应模型研究教师的受欢迎程度