冯诺依曼架构 在完整的计算机系统中,包含五个部分,储存器,运算器,控制器输入设备和输出设备。
改进的冯诺依曼架构 改进型架构的各模块的高速数据交换中心利用储存器这个大容量,极大的提高了效率。
哈佛架构
哈佛结构数据空间和地址空间是分开的。
两者的比较 两者的区别就是程序空间和 数据空间是否一体的。冯诺依曼数据结构和地址分不开,哈佛结构数据空间和地址空间是分开的。
ARM是一家公司,只做CPU设计,采用出售IP的方式运行,半导体制造商,ARM同时是一种架构,一种结构体系,最新为ARM Cortex架构。 ARM体系结构特点
体积小,低功耗、成本低、高性能支持Thumb(16位)与ARM(32位)双指令集,有良好的兼容性。大量使用寄存器,执行速度快,数据操作在寄存器中完成,共有37个寄存器,有7种不同的处理模式寻址方式灵活简单,指令长度固定,执行效率高。 2.2 ARM指令集与Thumb指令集 ARM指令集特点: 为典型的精简指令集。固定32位指令宽度,指令结构十分规整,便于存储,传输,解析和执行。自ARM7开始加入了Thumb指令集。Thumb指令集特点: Thumb指令集是精简的16位指令集。只能完成32位标准ARM大部分功能,但是它的16位设计可以有效减少二进制代码的大小,降低对存储器容量的要求,而降低成本。但使得整个CPU更加负载,尤其是开发人员必须谨慎处理两类指令集模式的切换。 2.3 Cortex-M3处理器架构Thumb2指令集特点: Thumb2在前面两者之间取了一个平衡,兼有二者的优势, 当一个操作可以使用一条 32位指令完成时就使用 32位的指令,加快运行速度,而当一次操作只需要一条16位指令完成时,就使用16位的指令,节约存储空间。
2.4 STM32F103系列微控制器 命名法则:
芯片选型:(够用即可) STM32性能与结构
通过异常进行堆栈切换 在线程模式主堆栈 产生异常–>进入处理模式主堆栈-异常退出>进入线程模式进行堆栈。
通过MSR指令修改CONTROL[1]进行堆栈切换 (一般不用)
XPSR为程序状态寄存器组。是32位的寄存器,有三个状态。
为什么需要执行状态寄存器EPSR ?
LDM、 STM和If-then指令, 为多周期指令, 如果在执行以上多周期指令时发生异常, 处 理器会暂时停止以上指令的操作, 进入异常, 这时需要保护现场。
3.5 总线接口有关DMA说明:借鉴(https://blog.csdn.net/as480133937/article/details/104927922?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165395856816780366585832%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=165395856816780366585832&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-104927922-null-null.142v11pc_search_result_control_group,157v12control&utm_term=DMA&spm=1018.2226.3001.4187)
Cortex-M3 既可使用大端格式也可使用小端格式访问存储器。 通常是以小端格式访问代码, 小端格式是ARM 处理器的默认存储器格式。
小端存储器系统: 在小端格式中, 数据的高字节存放在高地址中。
大端存储器系统: 在大端格式中, 数据的高字节存放在低地址中。
在Cortex M3 中,为了方便对位进行操作,设有位带区和位带别名区。
映射公式::
bit_word_addr = bit_band_base + (byte_offset x 32) +bit_number × 4 //位带别名区地址=位基地址+偏移地址*32+位数*4/*例如:SRAM 位段区中地址为 0x20000300 的字节中的位 2 被映射到别名区中的地址为: 0x22006008( =0x22000000 + (0x300*32) + (2*4)) 的字。*/ 3.8 异常与中断 在 ARM 编程领域中,凡是打断程序顺序执行的事件,都被称为异常(exception),中断是异常的一种程序代码也可以主动请求进入异常状态的(常用于系统调用)。也就是CPU需要立刻处理的内部/外部事件。 所有的 Cortex-M处理器都会提供一个用于中断处理的嵌套向量中断控制器(NVIC)。除了中断请求,还有其他需要服务的事件,将其称为“异常”。
在中断中,会有堆栈占用。 原因是保存返回地址和寄存器上下文。寄存器入栈又CPU硬件自动完成。
中断和轮询:
中断:(用专门的中断服务程序来处理事件) -适于处理对响应要求非常高的事件 -适于处理持续事件非常短的事件 -适于低功耗的应用 -程序设计较复杂轮询(会消耗大量的CPU处理时间,可能会丢失关键事件) -适于处理对时间响应要求低的场合 -程序设计简单中断的允许与禁止 全局中断控制 – enable/disable ALL interrupts -CPU的CCR寄存器中一个特殊位 -在复位后,全局禁止位是置起的 -中断发生后,全局禁止位也被置起 -通常在复位后所有的中断都被禁止了
中断向量表: - 中断向量表是一段连续的存储空间 - 在复位后有默认的起始位置 - 每个中断在向量表中都有相应的表项,该表项的值为该中断对应的服务程序的地址(地址指针) - 由程序代码确定中断向量表的每个表项 - 中断向量表的位置是可以通过改写中断向量基址寄存器重新定位的
中断向量表的作用: 每一种中断发生对应要处理的函数入口地址填在这里。 CPU就知道对应中断发生的时候要做什么操作 。 根据这个表去查程序的入口地址就能知道应该执行什么样的中断子程序。
中断、异常过程:
占先: 在异常处理程序中, 一个新的异常比当前的异常优先级更高, 处理器打断当前的流程, 响应优先级更高的异常, 此时产生中断嵌套。
末尾连锁: 一个中断返回后, 系统立即处理挂起的中断。能够加快中断响应。
迟来: 迟来是处理器用来加速占先的一种机制。 前一个中断尚未进入执行阶段, 迟来中断优先级比前一个 中断高, 则抢占前一个中断得到优先服务
![stm32f103最小系统](https://i-blog.csdnimg.cn/blog_migrate/951a8106bcd7d6464105fe476ca10778.png#pic_center)
具体内容,SCND搜索即可。
第六章GPIO原理及应用 6.1 寄存器存储映射存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射。
片上外设区分为三条总线,根据外设速度的不同,不同总线挂载着不同的外设, APB1挂载低速外设, APB2 和 AHB 挂载高速外设。相应总线的最低地址我们称为该总线的基地 址,总线基地址也是挂载在该总线上的首个外设的地址。其中 APB1 总线的地址最低,片上外设从这里开始,也叫
每个外设寄存器为32bit,占四个字节。
具体外设寄存器作用,见《1-STM32F10x-中文参考手册.pdf》第八章GPIO寄存器的描述。
6.3 GPIO的输入与输出: 推挽输出与开漏输出:推挽输出
推挽输出模式,是根据这两个 MOS 管的工作方式来命名的。在该结构中输入高电平时,经过反向后,上方的 P-MOS 导通,下方的 NMOS关闭,对外输出高电平;而在该结构中输入低电平时,经过反向后,N-MOS 管导通, P-MOS 关闭,对外输出低电平。 当引脚高低电平切换时,两个管子轮流导通, P 管负责灌电流, N 管负责拉电流,使其负载能力和开关速度都比普通的方式有很大的提高。 使用场合:推挽输出模式一般应用在输出电平为 0 和 3.3 伏而且需要高速切换开关状态的场合。 在STM32的应用中,除了必须用开漏模式的场合,我们都习惯使用推挽输出模式
开漏输出
在开漏输出模式时,上方的 P-MOS 管完全不工作。如果我们控制输出为 0,低电平, 则 P-MOS管关闭, N-MOS管导通,使输出接地,若控制输出为 1 (它无法直接输出高电平) 时,则 P-MOS 管和 N-MOS 管都关闭,所以引脚既不输出高电平,也不输出低电平,为高阻态。
特点:正常使用时必须外部接上拉电阻, 开漏输出具有“线与”特性, 也就是说,若有很多个开漏模式引脚连接到一起时,只有当所有引脚都输出高阻态,才由上拉电阻提供高电平,此高电平的电压为外部上拉电阻所接的电源的电压。若其中一个引脚为低电平,那线路就相当于短路接地,使得整条线路都为低电平, 0伏。
GPIO结构分析