当前位置:文档之家› 嵌入式知识点整理

嵌入式知识点整理

第一章一:嵌入式系统基础知识第二章一:CM31.Cortex-M3 是一个32 位处理器内核。

内部的数据路径是32 位的,寄存器是32 位的,存储器接口也是32 位的。

CM3 采用了哈佛结构,拥有独立的指令总线和数据总线。

2.程序计数寄存器R15 :程序计数寄存器,指向当前程序地址。

3.特殊功能寄存器(1)程序状态字寄存器组(PSRs)记录ALU 标志(0 标志,进位标志,负数标志,溢出标志),执行状态,以及当前正服务的中断号;(2)中断屏蔽寄存器组:PRIMASK 失能所有的中断、FAULTMASK 失能所有的fault、BASEPRI 失能所有优先级不高于某个具体数值的中断;(3)控制寄存器(CONTROL ),定义特权状态(见后续章节对特权的叙述),并且决定使用哪一个堆栈指针;4.Cortex-M3 处理器支持两种处理器的操作模式,还支持两级特权操作。

两种操作模式:(1)处理者模式(handler mode) 异常服务例程的代码—包括中断服务(2)线程模式(thread mode)普通应用程序的代码;两级特权:特权级和用户级,提供一种存储器访问保护机制,使得普通用户程序代码不能意外地,甚至是恶意地执行涉及到要害的操作。

复位后,处理器默认进入线程模式,特权级访问;a.在 CM3 运行主应用程序时(线程模式),既可以使用特权级,也可以使用用户级;但是异常服务例程必须在特权级下执行;b.在特权级下,程序可以访问所有范围的存储器,并且可以执行所有指令,包括切换到用户级;c.从用户级到特权级的唯一途径就是异常,用户级的程序必须执行一条系统调用指令(SVC)触发 SVC 异常,然后由异常服务例程接管,如果批准了进入,则异常服务例程修改 CONTROL 寄存器,才能在用户级的线程模式下重新进入特权级;5.异常以及异常类型异常:在 ARM 编程领域中,凡是打断程序顺序执行的事件,都被称为异常(exception) 。

包括:外部中断、不可屏蔽中断、指令执行了“非法操作”或者访问被禁的内存区间产生的各种错误 fault。

6.向量表向量表其实是一个 WORD(32 位整数)数组,每个下标对应一种异常,该下标元素的值则是该 ESR 的入口地址。

向量表在地址空间中的位置是可以设置的,通过 NVIC 中的一个重定位寄存器来指出向量表的地址。

在复位后,该寄存器的值为 0。

因此,在地址 0 处必须包含一张向量表,用于初始时的异常分配。

工作原理:举个例子,如果发生了异常 11(SVC ),则 NVIC 会计算出偏移移量是11x4=0x2C,然后从那里取出服务例程的入口地址并跳入。

要注意的是这里有个另类:0 号类型并不是什么入口地址,而是给出了复位后 MSP 的初值。

7.复位序列在离开复位状态后,CM3 做的第一件事就是读取下列两个 32 位整数的值:从地址 0x0000,0000 处取出 MSP 的初始值。

从地址0x0000,0004 处取出 PC 的初始值—— 这个值是复位向量,LSB必须是 1。

然后从这个值所对应的地址处取指。

在 CM3 中,在 0 地址处提供 MSP 的初始值,然后紧跟着就是向量表。

向量表中的数值是 32 位的地址,而不是跳转指令。

向量表的第一个条目指向复位后应执行的第一条指令。

8.流水线取指令、解码和执行。

9.CM3 指令集(1)32 位的ARM 状态:所有的指令均是32 位的(哪怕只是个”NOP ”指令),此时性能相当高;(2)16 位的Thumb 状态:所有的指令均是16 位的,代码密度提高了一倍。

不过,thumb 状态下的指令功能只是ARM 下的一个子集,结果可能需要更多条的指令去完成相同的工作,导致处理性能下降。

Cortex-M3 只使用Thumb -2 指令集。

这是个了不起的突破,因为它允许32位指令和16 位指令水乳交融,代码密度与处理性能两手抓,两手都硬。

而且虽然它很强大,却依然易于使用。

二:STM321.架构2.不懂需要写什么,自己找吧3.启动配置在 STM32F10xxx 里,可以通过 BOOT[1:0] 引脚选择三种不同启动模式。

根据选定的启动模式,主闪存存储器、系统存储器或 SRAM 可以按照以下方式访问:(1)从用户 FLASH 启动:主闪存存储器被映射到启动空间(0x0000 0000) ,但仍然能够在它原有的地址(0x0800 0000) 访问它,即闪存存储器的内容可以在两个地址区域访问,0x0000 0000 或 0x0800 0000 。

(2)从系统存储器启动:系统存储器被映射到启动空间(0x0000 0000) ,但仍然能够在它原有的地址(互联型产品原有地址为0x1FFF B000,其它产品原有地址为 0x1FFF F000)访问它。

(3)从嵌入式 SRAM 启动:只能在 0x2000 0000 开始的地址区访问 SRAM 。

4.STM32 的低功耗模式有 3 种(1)睡眠模式(CM3 内核停止,外设仍然运行);(2)停止模式(所有时钟都停止);(3)待机模式(1.8V 内核电源关闭);在这三种低功耗模式中,最低功耗的是待机模式,在此模式下,最低只需要2uA 左右的电流。

停机模式是次低功耗的,其典型的电流消耗在 20uA 左右。

最后就是睡眠模式了。

用户可以根据自己的需求来决定使用哪种低功耗模式。

5.安全特性STM32 还有一系列的安全特性来捕捉 STM32 发生软硬件运行错误的时刻,以下是 STM32 的一部分安全特性:(1)为了确保有一个可靠的电源供应,STM32 拥有内部复位电路,当电压低于 VDD 下限值时会将器件置于复位状态。

STM32 内部还有一个可编程的电压检测电路,可以在电源即将崩溃前检测到异常状况。

当检测到电源异常时,该电压检测电路将产生一个中断信号将STM32 器件锁定在一个安全的状态。

(2)STM32 带有的时钟安全系统(clock Security System,简称css)会监视 HSE振荡器,一旦 HSE 无法正常提供时钟脉冲,CSS 会强制 STM32 转而使用 HSl 振荡器。

(3)STM32 的两只看门狗会即时监测当前程序的运行状况,并在程序运转异常时对 STM32 产生一次复位操作(4)STM32 的片上 Flash 可以在85℃下保持 30 年数据不丢失,显著领先于其他同类微控制器。

STM32 可以胜任一些既要求对自身有安全性保障措施,又要求硬件尽量少的应用场合,比如航天工业和汽车电子系统。

从保持硬件简洁性、低成本的角度来看,STM32 微控制器达到的绝对是一个令人侧目的高度。

第三章1.外设的初始化和设置步骤1)在主应用文件中,声明一个结构 PPP_InitTypeDef,例如:PPP_InitTypeDef PPP_InitStructure;这里 PPP_InitStructure 是一个位于内存中的工作变量,用来初始化一个或者多个外设 PPP 。

2)为变量 PPP_InitStructure 的各个结构成员填入允许的值。

可以采用以下2 种方式:I)按照如下程序设置整个结构体PPP_InitStructure.member1 = val1;PPP_InitStructure.member2 = val2;PPP_InitStructure.memberN = valN;/* where N is the number of the structure members */以上步骤可以合并在同一行里,用以优化代码大小:PPP_InitTypeDef PPP_InitStructure = { val1, val2,.., valN}II)仅设置结构体中的部分成员:这种情况下,用户应当首先调用函数PPP_SturcInit(..) 来初始化变量PPP_InitStructure,然后再修改其中需要修改的成员。

这样可以保证其他成员的值(多为缺省值)被正确填入。

PPP_StructInit(&PPP_InitStructure);PP_InitStructure.memberX = valX;PPP_InitStructure.memberY = valY;/*where X and Y are the members the user wants to configure*/3)调用函数 PPP_Init(..) 来初始化外设 PPP 。

4)调用函数 PPP_Cmd(..)来使能外设。

PPP_Cmd(PPP, ENABLE);2.在设置一个外设前,必须调用以下一个函数来使能它的时钟:RCC_AHBPeriphClockCmd(RCC_AHBPeriph_PPPx, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_PPPx, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_PPPx, ENABLE);第四章1.STM32的时钟源HSE、HSI、LSE、LSI。

系统时钟源(SYSCLK):HSI、HSE、PLL:注:在激活 PLL 的设置时,必须先完成选择 HSI 振荡器除 2 或 HSE振荡器为 PLL 的输入时钟,和选择倍频因子。

RTC 时钟源(RTCCLK):LSE、LSI、经过 128 分频的 HSE 时钟当 HSE 时钟失效时,时钟安全系统将系统(CSS)时钟切换到 HSI。

通过软件使能,将该中断连接到 Cortex-M3 内核的 NMI 中断上。

在 MCO 引脚(PA.08)可将时钟输出。

最大可达 50MHz;多个时钟源可实现全速运行/低功耗模式下的复杂应用。

(1)外部高速振荡器 HSE:4MHz 到 16MHz 主振荡器,可通过 PLL 进行倍频用以提供宽广的频率范围。

可使用外部时钟信号(最大25MHz):设置时钟控制寄存器的 HSEBYP和 HSEON 位。

(2)内部高速 RC 振荡器 HSI:频率为 8MHz,温度在 0-70°C 时误差位为± 1%。

(3)外部低速振荡器 LSE: 32.768kHz 振荡器,提供一个极低功耗(最大 1µA)的精确的时钟。

可选用为驱动 RTC 从停止/待机模式中唤醒。

(4)内部低速 RC(LSI): 40KHz 的内部 RC,可用作 IWDG 和自动唤醒的 RTC 的时钟。

2.Css在实际应用中,经常出现由于晶体振荡器在运行中失去作用,造成微处理器的时钟源丢失,从而出现死机的现象,导致系统出错。

STM32 内部的 CCS 正是为解决出现这种问题而设计的。

一旦外部晶体振荡器(HSE)失效,CCS 系统将系统时钟源切换到 HSI。

相关主题