STM32中断流程处理_第1页
STM32中断流程处理_第2页
STM32中断流程处理_第3页
STM32中断流程处理_第4页
STM32中断流程处理_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

STM32 中断流程处理中断流程处理 中断 首先要知道 stm32f10 x it c 这个文件 一般情况下是和 main 文件在同一个目录下的 打开这个文件 我们可以看到 xyz IRQHandler 函数的实现 虽然说是实现 但是几乎都 是空的 对了 这些函数就是要用户填写的中断处理函数 如果你用到了哪个中断来做相 应的处理 你就要填写相应的中断处理函数 需要根据各外设的实际情况来填写 但是一 般都会有关闭和开启中断 在这个文件中还有很多系统相关的中断处理函数 例如系统时 钟 SysTickHandler 具体的实现可以参考 stm32 fwlib FWLib examples 下的各例子 到这里 我们也只不过看了中断的处理函数 而这些处理函数是如何被硬件中断调用的呢 嗯 说到这里就不得不提一下 stm32f10 x vector c 这个文件了 内容如下 typedef void intfunc void typedef union intfunc fun void ptr intvec elem sfe 是 IAR 的 段操作符 segment operator 表示取某个段的后一个字节的地址 比如 CSTACK 定义为 0 x20001000 0 x20001fff 那 sfe CSTACK 就得到 0 x20002000 这 个值 刚好用来初始化 msp 堆栈指针 注意使用 segment operator 前 需要先定义段名如下 pragma segment CSTACK RSTACK 程序返回用的 保存的是程序调用函数的返回地址 你填写的数值 X 2 才是占用 的字节数 CSTACK 函数局部变量用的区域 所有的功能函数使用的局部变量都是从这个堆栈申请使 用的 用完了再还回去 子函数里面用到的局部变量都是在这里面取来用的 IAR 对所用语言 这里是 C 做的一些扩展 也就是说这里可以用扩展的功能 pragma language extended pragma segment CSTACK void iar program start void 把中断向量表放到中断向量表该放的地方 如果没有次句 中断向量被当作普通常变量处 理 被放置的位置由编译器连接后确定 在 icf 文件中有 place at address mem ICFEDIT intvec start readonly section intvec pragma location intvec STM32F10 x Vector Table entries const intvec elem vector table ptr sfe CSTACK 现在我们清楚了 这儿就是中断向量表 每一个 item 对应一个中断或异常处理 这里 item 的填写要和 stm32spec 中的 Interrupt and exception vectors 一节中的列表中的顺序一致 说道这里 又有一个问题 这个向量表是放在何处的呢 上面对 intvec 的解释可以看出是 被链接器放到了一个地址上 这里是 0 x08000000 NVIC VectTab FLASH 但是 stm32 是 怎么知道这个地址的呢 也许有个默认值 或者是就这一个固定值 我们在 stm32f10 x nvic c 文件中发现下面这样的一个函数 void NVIC SetVectorTable u32 NVIC VectTab u32 Offset Check the parameters assert IS NVIC VECTTAB NVIC VectTab assert IS NVIC OFFSET Offset SCB ExceptionTableOffset u32 Offset ExceptionTableOffset NVIC VectTab 同时在 example 目录下有 vectortable relocation 这样的一个例子 This example describes how to use the NVIC firmware library to set the CortexM3 vector table in a specific ad dress other than default 在这个例子里面就是直接调用了上面的那个函数 似乎意思很明显了 但是 SCB Exceptio nTableOffset 是如何起作用的呢 着重解释这个问题 先看一组定义 stm32f10 x map b System Control Space memory map define SCS BASE u32 0 xE000E000 define SysTick BASE SCS BASE 0 x0010 define NVIC BASE SCS BASE 0 x0100 define SCB BASE SCS BASE 0 x0D00 ifdef SCB define SCB SCB TypeDef SCB BASE endif typedef struct vu32 CPUID vu32 IRQControlState vu32 ExceptionTableOffset vu32 AIRC vu32 SysCtrl vu32 ConfigCtrl vu32 SystemPriority 3 vu32 SysHandlerCtrl vu32 ConfigFaultStatus vu32 HardFaultStatus vu32 DebugFaultStatus vu32 MemoryManageFaultAddr vu32 BusFaultAddr SCB TypeDef 其实这里主要就是要弄清楚这个 SCB 是什么意思 因为这个结构是映射到一个物理地址上 的 像别的控制寄存器都是这么个玩法 莫非这也是个某类控制器 google 一下 果然对 于系统控制寄存器组 上篇文章有提到 STM32 的固件库中有如下定义 typedef struct vuc32 CPUID vu32 ICSR vu32 VTOR vu32 AIRCR vu32 SCR vu32 CCR vu32 SHPR 3 vu32 SHCSR vu32 CFSR vu32 HFSR vu32 DFSR vu32 MMFAR vu32 BFAR vu32 AFSR SCB TypeDef System Control Block Structure 它们对应 ARM 手册中的名称为 CPUID CPUID Base Register ICSR Interrupt Control State Register VTOR Vector Table Offset Register AIRCR Application Interrupt Reset Control Register SCR System Control Register CCR Configuration Control Register SHPR System Handlers Priority Register SHCSR System Handler Control and State Register CFSR Configurable Fault Status Registers HFSR Hard Fault Status Register DFSR Debug Fault Status Register MMFAR Mem Manage Address Re

温馨提示

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

评论

0/150

提交评论