STM32笔记.doc_第1页
STM32笔记.doc_第2页
STM32笔记.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

STM32 外部中断 易出错总结 一:触发方式STM32的外部中断是通过边沿来触发的,不支持电平触发;二:外部中断分组STM32的每一个GPIO都能配置成一个外部中断触发源,STM32通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16组,STM32规定,每一组中同时只能有一个中断触发源工作,但可以分时复用,那么,最多工作的也就是16个外部中断。STM32分组和对应中断处理函数分配:管脚中断标志中断处理函数分配PA0PG0EXTI0EXTI0_IRQHandlerPA1PG1EXTI1EXTI1_IRQHandlerPA2PG2EXTI2EXTI2_IRQHandlerPA3PG3EXTI3EXTI3_IRQHandlerPA4PG4EXTI4EXTI4_IRQHandlerPA5PG5EXTI5EXTI9_5_IRQHandlerPA6PG6EXTI6PA7PG7EXTI7PA8PG8EXTI8PA9PG9EXTI9PA10PG10EXTI10EXTI15_10_IRQHandlerPA11PG11EXTI11PA12PG12EXTI12PA13PG13EXTI13PA14PG14EXTI14PA15PG15EXTI15三:外部中断的配置过程l配置触发源-GPIO触发源为通过GPIO端口输入,所以,要配置GPIO的模式,输入方式,输入方式有以下几种:1GPIO_Mode_AIN,模拟输入(ADC模拟输入,或者低功耗下省电)2GPIO_Mode_IN_FLOATING,浮空输入3GPIO_Mode_IPD=0x28,带下拉输入4GPIO_Mode_IPU=0x48,带上拉输入l引脚与外部中断关联l外部中断AFIO时钟开启l外部中断配置这个主要是中断线路选择,中断触发方式,中断使能。l中断优先级配置NVICl中断处理函数的编写。四:外部中断函数不能进入的原因分析结合我工作中的遇到的问题可以分为:1)GPIO或者AFIO的时钟没有开启;2)GPIO和配置的中断线路不匹配;3)中断触发方式和实际不相符合;4)中断处理函数用库函数时,写错,经常可能出现数字和字母之间没有下划线;5)外部中断是沿触发,有可能不能检测到沿,比如中断线是低电平(浮空输入),触发是下降沿触发,可能会出现一直是低电平,高电平的时候是一样的情况,电平持续为高电平;6)没有用软件中断来触发外部中断,调用函数EXTI_GenerateSWInterrupt;,因为软件中断先于边沿中断处理。嵌套向量中断控制器NVIC,中文名嵌套中断向量控制器,是Cortex-M3系列控制器内部独有集成单元,与CPU结合紧密,降低中断延迟时间并且能更加高效处理后续中断。举个例子,比如火车站买票,那些火车站的规章制度就是NVIC,规定学生和军人有比一般人更高优先级,它们则给你单独安排个窗口,同学与同学之间也有区别,那就是你也得排队,也就是你的组别(抢断优先级)和你的排队序号(响应优先级)决定你何时能买到票。抢断优先级,顾名思义,能再别人中断是抢占别人中断,实现中断嵌套。响应优先级则只能排队,不能抢在前面插别人的对,即不能嵌套。STM32中指定优先级的寄存器为4位,其定义如下:第0组:所有4位用于指定响应优先级第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级第4组:所有4位用于指定抢占式优先级以上定义也称作中断优先级分组,相关内容在STM32固件库的misc.h文件中有详细定义。基础了解了就可以对中断进行操作了。第一步:使用voidNVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup)函数对优先级分组配置。NVIC_PriorityGroup可以配置为NVIC_PriorityGroup_0=选择第0组NVIC_PriorityGroup_1=选择第1组NVIC_PriorityGroup_2=选择第2组NVIC_PriorityGroup_3=选择第3组NVIC_PriorityGroup_4=选择第4组例如:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0)配置为0组。第二步:中断初始化结构体配置,结构体类型定义如下:typedefstructuint8_tNVIC_IRQChannel;uint8_tNVIC_IRQChannelPreemptionPriority;/抢断优先级uint8_tNVIC_IRQChannelSubPriority;/响应优先级FunctionalStateNVIC_IRQChannelCmd;NVIC_InitTypeDef;例如:STM32外部中断0配置如下EXTI_NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;EXTI_NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;/抢占优先级别(01)EXTI_NVIC_InitStructure.NVIC_IRQChannelSubPriority=7;/响应优先级别(07)EXTI_NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;第三步:中断初始化结构体初始化操作如下NVIC_Init(&EXTI_NVIC_InitStructure);第四步:开关总中断操作。在STM32中是通过改变CPU优先级来允许和禁止中断的。(1)下面两个函数等效关闭总中断voidNVIC_SETPRIMASK(void);voidNVIC_SETFAULTMASK(void);(2)下面两个函数等效开放总中断voidNVIC_RESETPRIMASK(voi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论