原创 STM32中用到的Cortex-M3寄存器说明

2008-7-28 12:23 12765 12 21 分类: MCU/ 嵌入式

在STM32中用到了Cortex-M3定义的三组寄存器,有关这三组寄存器的说明不在STM32的技术手册中,需要参考ARM公司发布的Cortex-M3 Technical Reference Manual (r2p0)


在STM32的固件库中定义了三个结构体与这三个寄存器组相对应,这三个结构体与ARM手册中寄存器的对应关系如下:


 


一、NVIC寄存器组


STM32的固件库中有如下定义:


typedef struct
{
  vu32 ISER[2];
  u32 RESERVED0[30];
  vu32 ICER[2];
  u32 RSERVED1[30];
  vu32 ISPR[2];
  u32 RESERVED2[30];
  vu32 ICPR[2];
  u32 RESERVED3[30];
  vu32 IABR[2];
  u32 RESERVED4[62];
  vu32 IPR[11];
} NVIC_TypeDef;


它们对应ARM手册中的名称为
ISER = Interrupt Set-Enable Registers
ICER = Interrupt Clear-Enable Registers
ISPR = Interrupt Set-Pending Register
ICPR = Interrupt Clear-Pending Register
IABR = Active Bit Register
IPR = Interrupt Priority Registers


每个寄存器有240位,以Interrupt Set-Enable Registers说明,ISER[0]对应中断源0~31,ISER[1]对应中断源32~63,STM32只有60个中断源,所以没有ISER[2:7]。


参考STM32技术参考手册中的中断向量表,中断源的位置为:
位置0 - WWDG = Window Watchdog interrupt
位置1 - PVD = PVD through EXTI Line detection interrupt
位置2 - TAMPER = Tamper interrupt
......
位置58 - DMA2_Channel3 = DMA2 Channel3 global interrupt
位置59 - DMA2_Channel4_5 = DMA2 Channel4 and DMA2 Channel5 global interrupts


 


二、系统控制寄存器组


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 Register
BFAR = Bus Fault Address Register
AFSR = Auxiliary Fault Status Register


 


三、系统时钟寄存器组


STM32的固件库中有如下定义:


typedef struct
{
  vu32 CTRL;
  vu32 LOAD;
  vu32 VAL;
  vuc32 CALIB;
} SysTick_TypeDef;


它们对应ARM手册中的名称为


CTRL = SysTick Control and Status Register
LOAD = SysTick Reload Value Register
VAL = SysTick Current Value Register
CALIB = SysTick Calibration Value Register

PARTNER CONTENT

文章评论9条评论)

登录后参与讨论

用户377235 2012-4-25 19:33

太好了, 在ST的手册没找到, 在这里找到了, 谢谢!

用户1502779 2010-11-21 21:46

写的很好,学习了

用户1090342 2009-7-21 17:06

FLASH变U盘存放多个程序问题与本文无关,请在论坛讨论。

用户522537 2009-7-20 17:00

我想请问一个问题。怎么才可以实现把STM32的FLASH变成U盘,把多个程序放里面就可以运行?因为编绎时要在LD文件中填一个FLASH地址,这个地址又不一定跟FLASH存放的地址一样。怎么才可以解决这个问题。我用的是GCC

用户213381 2009-6-22 10:11

我也是刚刚接触STM32,我现在学这些引导码,不知道大家有什么好的建议吗?

用户187751 2009-5-26 15:05

我说的是新库3.0 。

用户187751 2009-5-26 15:03

恩 楼上STM32说的对 确实是IP 不是IPR 你文中写 IPR = Interrupt Priority Registers 应该是IP = Interrupt Priority Registers

用户1090342 2008-8-27 12:05

因为NVIC不是ST设计的,它是ARM公司的IP,正如Cortex-M3核心一样,ST的手册中也不会详细说明。

用户114415 2008-8-26 23:02

为什么不把它并到参考手册里呢??这样查起来没那么麻烦,之前查找NVIC部分的就搞了很久。。。
相关推荐阅读
用户1090342 2010-08-05 12:33
使用STM32定时器输出任意相位差的方波
记得曾经有不少人问起这个问题,方法十分简单,不用说明,看图即知(这里画了2路输出,同样道理可以产生3路甚至4路输出)。此方法不但可以在STM32上实现,因为STM8定时器的多数功能与STM32一样,所...
用户1090342 2010-05-06 16:11
STM32的功能引脚重映射和复用功能
STM32中有很多内置外设的输入输出引脚都具有重映射(remap)的功能,本文对一些在使用引脚重映射时所遇到的有关问题加以说明。我们知道每个内置外设都有若干个输入输出引脚,一般这些引脚的输出脚位都是固...
用户1090342 2010-04-23 11:04
改正了每次只能发送一个字节的USB虚拟串口例程
目前发布的STM32_USB-FS-Device_Lib中有一个USB虚拟串口的例程,这个例程演示了把STM32配置为一个USB虚拟串口设备,STM32从它的USART接口接收数据并通过USB传送到上...
用户1090342 2010-03-06 12:30
STM32定时器的预装载寄存器与影子寄存器之间的关系
本文的说明依据STM32参考手册(RM0008)第10版:英文:http://www.st.com/stonline/products/literature/rm/13902.pdf中译文:http:...
用户1090342 2010-02-26 12:18
使用BSRR和BRR寄存器直接操作STM32的I/O端口
STM32的每个GPIO端口都有两个特别的寄存器,GPIOx_BSRR和GPIOx_BRR寄存器,通过这两个寄存器可以直接对对应的GPIOx端口置'1'或置'0'。GPIOx_BSRR的高16位中每一...
用户1090342 2010-01-28 16:23
如何使用STM32的USB库支持延迟HID的GET_REPORT请求
首先,请参考我的另一篇博客:以HID的SET REPORT为例说明如何使用STM32的USB库支持控制端点0如果要支持HID的GET_REPORT请求,按照上一篇博客中的说明,只需要在STM32 US...
EE直播间
更多
我要评论
9
12
关闭 站长推荐上一条 /3 下一条