读书参考手册
1 STM32不完全手册
2 基于MDK的STM32处理器开发应用
3 STM32中文参考手册
4 Cortex-M3权威指南
5 STM32固件库使用手册
6 STM32_在KEIL_MDK环境下使用V3.4库
经过这段时间,基本知道了内容。例如系统初始化配置,看门狗,定时器,AD,SPI等等内容。这段时间,需要结合example例子,熟悉编程风格以及加深内容理解。
这次看书最重要,属于收获的阶段。大概看一个星期吧,仔细研究。然后就是开发板回来,通过动手,实践出真知。
2011-11-17 《基于MDK的STM32处理器开发应用》笔记
第一章:Cortex-M3处理器简介
2006年就推出了ARMv7(不是ARM7)内核,和DSP一样,有多个系列。A/R/M三个系列,很巧合,和ARM(advanced risc machines,英国公司,不生产芯片,提供MATCH_
word
word文档格式规范word作业纸小票打印word模板word简历模板免费word简历
_1713853611301_2芯片
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
挣钱并提供软件开发工具、编译器)同名。
A:application,高端应用型号;
R:RealTime,实时系统;
M:MCU,低端微控制器。
产业链构成
内核设计 <-> 芯片设计<-> 芯片制造 <-> 产品设计<-> 产品制造
ARM公司 | ST意法半导体公司| |自动化公司
标号含义
STM32 F 103 R C T 6 xxx
Device family
STM32 = ARM-based 32-bit microcontroller
Product type
F = general-purpose
Device subfamily
103 = performance line
101
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
型
103增强型
Pin count
R = 64 pins
V = 100 pins
Z = 144 pins
Flash memory size
C = 256 Kbytes of Flash memory
D = 384 Kbytes of Flash memory
E = 512 Kbytes of Flash memory
Package
H = BGA
T = LQFP(薄四方扁平封装)
Y = WLCSP64
Temperature range
6 = Industrial temperature range, –40 to 85 °C.
7 = Industrial temperature range, –40 to 105 °C.
第二章:Cortex-M3编程模型
1. 模式、状态
1.1. 两种模式
处理模式:handle,异常时进入,特权状态;
线程模式:thread,正常处理模式,可以运行于特权和用户(非特权)状态;
1.2 两种状态
特权状态:可以访问所有资源;
非特权状态:某些资源是不能访问的。
两种模式/状态可以构成一个2*2矩阵。处理器启动后进入线程模式特权状态,可以手工切换到用户状态,可是无法切换回特权状态了!除非异常,进入处理模式,然后回到特权状态。
2. 堆栈介绍
包括主堆栈、进程栈。系统启动后,使用主堆栈。进入线程模式后,可以使用进程栈。异常使用主堆栈。
3. 寄存器,20个32位
R0~R12, 13个通用寄存器;
分组寄存器Banked,R13, 用于指示堆栈顶部,堆栈是向下生长的;
连接寄存器R14(LR),用于存储返回地址;
程序寄存器PC,指示下一条指令地址;
XPSR,程序状态寄存器,A应用/I中断/E执行。
中断发生三步走:
1. 现场自动保护。当异常发生时候,R0~R3,R12,LR,PC(如果当前是PSP就如PSP,否则如MSP,进入异常后,将使用MSP),xPSR入栈。
为什么仅仅保存了R0~R3,R12这几个通用寄存器,其它的通用寄存器就是下等公民?原因在于编译器优化ISR,一般会使用这几个寄存器,其它不用,所以不保存。如果用到了R4,编译器也会生产相应代码保存R4。
2. 取中断向量。保护现场堆栈操作时,ICODE总线会根据中断向量表(DCODE完成查表操作),预取指。这儿可以体会到了专用总线的优点,多个事情可以同时进行。
3. 更新寄存器。入栈会更新PSP/MSP到最新的位置,然后让SP=MSP。PSR存储当前的异常编号。PC指向入口地址。LR被更新位EXC_RETURN(仅有三个合法的值,异常的时候,栈保存的PC值为返回地址,LR作为PC返回地址仅用于子函数调用,异常LR指示返回状态)。
4. 123完成后,开始执行服务例程。
中断返回。如果将EXC_RETURN写入到PC,就会开始中断返回操作。首先恢复现场,然后把NVIC的中断活动位置0。
疑问:既然有LR寄存器,为何需要保存PC值?
R14/LR存储子程序的返回地址。当程序调用时候,PC值为当前指令地址+4(应该在子程序里面吧),并不是返回地址,所以必须由LR保留返回地址!!
当异常发生时候,LR却不变化,此时PC存的返回地址是返回地址!!
所以,LR,PC这两个地址不是等价的,分别在子函数和异常中保留返回地址。
中断尾链异常:当中断运行过程中,碰到一个低优先级的ISR过来,该功能可以有用,加快了中断响应速度。
中断迟到异常:中断响应过程中,如果碰到高优先级的ISR过来,会现场保护完毕后,执行高优先级的ISR,然后运行完毕后,会尾链异常,切换到低优先级的ISR运行。如果,迟到太狠,就是中断嵌套了,且没有中断尾链异常!
4. 指令集
Cortex-M3支持16位的thumb指令和32位的thumb2指令。不支持ARM指令。
5. 系统控制寄存器
在内存空间固定分配,实现系统控制功能。
第三章 STM32处理器总线结构和存储器
1 总线结构
Cortex-M3内核的Icode总线,Dcode总线,System总线,私有外设总线。
Icode总线:负责Flash取指(0x00000000~0x1FFFFFFF);
Dcode总线:负责Flash取数,查表(0x00000000~0x1FFFFFFF);
-----------------------------均小于SRAM地址,或者讲为block0区,大小512MB。
System总线:负责访问外设和片上资源,包括SRAM,片上外设,外扩RAM,外扩外设,系统存储区的供应商定义部分;
私有外设总线:主要是访问调试专用的资源,位于系统存储区。
AHB:先进高性能总线,72MHZ。
APB:先进外设总线,APB2高速,72MHZ,APB1低速,36MHZ。
APB1:USB,UART2~3,CAN,I2C,BKP,WDG,TIM2~4,SPI2;
APB2:TIM1,UART1,SPI1,GPIOx,ADCx,EXIT;
2 存储器组织与映射
Cortex-M3采用统一编址方式,存储空间为4GB,小开端存放(引脚可配大开端)。分成8大块,每块都是512MB。这样,可以采用内存访问的方式去统一访问所有资源。
和PC一样,存储区最小单位为字节,但是总线和寄存器为32位,所以,一次就是取了4个字节。这就是为什么一个中断向量一下存4个字节,pc也是+4的原因。
片内Flash,起始地址为0x08000000;片内RAM为0x20000000(512MB)。
对于RAM和外设都有位带区和位带别名区,主要就是考虑方便位操作。
位带别名地址 = 位带别名起始地址 + 位带区字节偏移地址*32 + 位偏移地址*4
两个位带区和对应的位带别名区,位带区大小为1MB,别名区大小为32MB。
位带区1:0x20000000~0x20100000 别名区1:0x22000000~0x23FFFFFF -------RAM使用
位带区2:0x40000000~0x40100000 别名区2:0x42000000~0x43FFFFFF -------外设使用
将一位映射到一个字,所以从1MB扩带到了32MB。
外设区映射片上外设的寄存器,这样通过内存变量操作实现了外设控制。
系统启动有三处:Flash: 0x08000000 ~ 0x0807FFFF, 大小为0x80000, 512KB。
System memory: 0x1FFFF000~0x1FFFF7FF,大小为0x8000, 32KB。
(运行bootloader,用于系统程序更新,串口下载)
SRAM:0x20000000~0x2000FFFF,大小为0x10000,64KB。
通过对BOOT[0,1]引脚配置,实现Flash存储区/系统存储区/内嵌SRAM区启动选择,硬件会自动将选择的启动区映射到“系统启动区”。这样,都是从0x00000000的系统启动区开始运行,其实CODE的真实地址不是0x00000000。
注意:系统启动区0x0000000 ~ 0x0007FFFF,大小为三个区域的最大的512KB。该区域其实为上述三个区域的别名区。
STM32F103VC,Flash大小为256KB,SRAM位48KB。
3 系统启动配置
通过配置BOOT[0..1]引脚,实现启动区的映射,但是用以前的物理区地址也可以访问。也就是说某个空间可能有两个地址,和位段类似。
第四章 Cortex-M3的异常处理
1 异常响应
Cortex-M3异常响应来讲,是非常迅速的。其中涉及了一些非常重要的技术。
1 现场自动保护与恢复。异常时,会自动保存某些寄存器,退出时,会自动恢复。
2 中断向量的获取(ICODE取址/DCODE查表)和现场保护(System RAM堆栈操作)同步。
3 中断嵌套和优先级分组。
4 中断尾链技术(减少了不必要的堆栈保护),中断迟到技术(让优先级高的后到先做)。
中断尾链:当一个ISR运行时候,另外一个低优先级的ISR到来,后来的会阻塞。当ISR执行完毕后,不用恢复现场,而是让阻塞的ISR运行。减少了中断的开销。
中断迟到:特指ISR现场保护这段很短的时间,如果有个更高的优先级的中断到来,现场保护完毕后,是立马执行晚到的ISR。否则ISR运行过程中来,就是中断嵌套了。
中断响应时候,如果用的PSP,现场就保存于PSP,否则保存与MSP。不过进入ISR后,就会使用MSP。堆栈是“向下生长”的。每次中断嵌套就要加8个字的空间,嵌套过深,可能导致MSP溢出。
有个疑问:为什么尾链可以不保存,而嵌套必须保存。原因:中断嵌套发生于ISR正在运行,所以需要保护当前ISR的一些状态。而尾链发生于ISR执行完毕,故没有必要保护ISR状态。