stm32学习笔记-sys程序解释(原子)

stm32学习笔记-sys程序解释(原子)

ID:21627237

大小:762.19 KB

页数:18页

时间:2018-10-23

stm32学习笔记-sys程序解释(原子)_第1页
stm32学习笔记-sys程序解释(原子)_第2页
stm32学习笔记-sys程序解释(原子)_第3页
stm32学习笔记-sys程序解释(原子)_第4页
stm32学习笔记-sys程序解释(原子)_第5页
资源描述:

《stm32学习笔记-sys程序解释(原子)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、SYS.C程序解释#include#include"sys.h"//设置向量表偏移地址//NVIC_VectTab:基址//Offset:偏移量//CHECKOK//091207voidMY_NVIC_SetVectorTable(u32NVIC_VectTab,u32Offset){//检查参数合法性assert_param(IS_NVIC_VECTTAB(NVIC_VectTab));assert_param(IS_NVIC_OFFSET(Offset));SCB->VTOR=NVIC_VectTab

2、(Offset&

3、(u32)0x1FFFFF80);//设置NVIC的向量表偏移寄存器//用于标识向量表是在CODE区还是在RAM区}解释:前面两行是用来检查参数合法性,这里不作分析。重点看第三行。#defineNVIC_VectTab_RAM            ((u32)0x20000000)#defineNVIC_VectTab_FLASH          ((u32)0x08000000)typedefstruct{vuc32CPUID;vu32ICSR;vu32VTOR;vu32AIRCR;vu32SCR;vu32CCR;vu32SHPR[3];vu32SH

4、CSR;vu32CFSR;vu32HFSR;vu32DFSR;vu32MMFAR;vu32BFAR;vu32AFSR;}SCB_TypeDef;在<<权威指南>>第一百零四页,有这么一段话:    NVIC中有一个寄存器,称为“向量表偏移量寄存器”(在地址0xE000_ED08处),通过修改它的值就能定位向量表。但必须注意的是:向量表的起始地址是有要求的:必须先求出系统中共有多少个向量,再把这个数字向上增大到是2的整次幂,而起始地址必须对齐到后者的边界上。例如,如果一共有32个中断,则共有32+16(系统异常)=48个向量,向上增大到2的整次幂后值为64,

5、因此地址地址必须能被64*4=256整除,从而合法的起始地址可以是:0x0,0x100,0x200等。Offset:是偏移量的计算也就是说STM32自己有60个中断,加上CM3的16个,总共有76个中断,扩大到2的整次幂,那就是128,然后再乘以4,得到512,也就是0X200.根据这样计算,合法的偏移地址应该是0X0,0X200,0X400,0X600,0x800......29 TBLBASE R/W 0 Table base in Code (0) or RAM (1) 28:7 TBLOFF R/W 0 Table offset value fro

6、m Code region or RAM region 屏蔽前七位0x1FFFFF80和后三位+Offset + VECTTOR就是开始地址,低7位没有用到,所以&0X80。VTOR设置只有BIT【28:7】,你把(u32)0x1FFFFF80二进制看看是不是【28:7】。//设置NVIC分组//NVIC_Group:NVIC分组0~4总共5组//CHECKOK//091209voidMY_NVIC_PriorityGroupConfig(u8NVIC_Group){u32temp,temp1;temp1=(~NVIC_Group)&0x07;//取后三位

7、temp1<<=8;temp=SCB->AIRCR;//读取先前的设置temp&=0X0000F8FF;//清空先前分组temp

8、=0X05FA0000;//写入钥匙temp

9、=temp1;SCB->AIRCR=temp;//设置分组}解释:CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有76个中断,包括16个内核中断和60个可屏蔽中断,具有16级可编程的中断优先级。而我们常用的就是这60个可屏蔽中断,所以我们就只针对这6

10、0个可屏蔽中断进行介绍。在MDK内,与NVIC相关的寄存器,MDK为其定义了如下的结构体:typedefstruct{vu32ISER[2];u32RESERVED0[30];vu32ICER[2];u32RSERVED1[30];vu32ISPR[2];u32RESERVED2[30];vu32ICPR[2];u32RESERVED3[30];vu32IABR[2];u32RESERVED4[62];vu32IPR[15];}NVIC_TypeDef;STM32的中断在这些寄存器的控制下有序的执行的。了解这些中断寄存器,你才能方便的使用STM32的中断。

11、下面重点介绍这几个寄存器:ISER[2]:ISER全称是:Inte

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。