打印
[STM32]

STM32自学笔记——初识STM32

[复制链接]
2929|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小小电路板|  楼主 | 2018-4-24 17:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 小小电路板 于 2018-4-25 08:59 编辑

      序言:接触嵌入式一段时间了,但是因条件有限个人技能没得到太大的提升。自己制定计划用半年的时间来自学STM32,希望半年有所收获。
      本文主要介绍STM32与单片机、嵌入式、ARM的关系,引入介绍STM32的特点、选型以及简单介绍一下Cortex-M3内核。
STM32和单片机
      单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种IO口和中断系统、定时器\计数器等功能(如:电机驱动、PWM调制、AD信息采集转换等电路)集成在一块硅片上构成小而完善的微型计算机系统。常见的有以前8位的51单片机。STM32是一种32位的单片机,运行速度、功耗、IO接口等都高度优于8位单片机,不但可以进行寄存器编程,还可以调用STM32的固件库进行编程,简化了软件的开发和后期的移植。
STM32和嵌入式
      嵌入式是以应用为中心,计算机技术为基础,软硬件可裁减,适用应用系统对功能、性能、体积等有针对要求的的专用计算机系统。嵌入式主要分为DSP、微控制器MCU、微处理器、Soc四种。一个完整的嵌入式研发包括硬件层、驱动层、操作系统层、应用层开发。STM是一种微控制器MCU,也就是说属于嵌入式的一种。
STM32和ARM
ARM可以理解为一个公司名,也可以理解为一种微处理的全程,也可以理解为一种技术。ARM是一家从事制作芯片标准的公司,并不生产芯片。它负责芯片内核结构的设计,而把具体实现授权与其他芯片厂家,如TI、ST等。ARM公司为了能让不同芯片公司生产的芯片在软件上基本兼容提出了ARM Cortex内核。而本次自学的STM32F103ZET6的内核就是Cortex-M3。

Cortex-M3
Cortex-M3是一个 32位处理器内核。内部的数据路径是 32位的,寄存器是 32位的,存储器接口也是 32 位的。CM3 采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,从而提升了性能。为实现这个特性, CM3内部含有好几条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一方面,指令总线和数据总线共享同一个存储器空间(一个统一的存储器系统)。
寄存器组
处理器拥有R0-R15的寄存器组,其中R13最为堆栈指针SP,SP有两个,但是同一时刻只能有一个可以看到,这就是所谓的“banked”寄存器。
a、R0-R12都是 32位通用寄存器,用于数据操作。但是注意:绝大多数 16位Thumb指令只能访问R0-R7,而 32位 Thumb-2指令可以访问所有寄存器。
b、Cortex-M3拥有两个堆栈指针,然而它们是 banked,因此任一时刻只能使用其中的一个。
主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)
进程堆栈指针(PSP):由用户的应用程序代码使用。
堆栈指针的最低两位永远是0,这意味着堆栈总是4字节对齐的。
c、R14:连接寄存器--当呼叫一个子程序时,由R14存储返回地址
d、R15:程序计数寄存器--指向当前的程序地址,如果修改它的值,就能改变程序的执行流(这里有很多高级技巧)
e、Cortex-M3还在内核水平上搭载了若干特殊功能寄存器,包括:
程序状态字寄存器组(PSRs)
中断屏蔽寄存器组(PRIMASK, FAULTMASK, BASEPRI)
控制寄存器(CONTROL)
Cortex-M3处理器支持两种处理器的操作模式,还支持两级特权操作。
两种操作模式分别为:处理者模式(hander mode)和线程模式(thread mode)。引入两个模式的本意,是用于区别普通应用程序的代码和异常服务例程的代码——包括中断服务例程的代码。
Cortex-M3 的另一个侧面则是特权的分级——特权级和用户级。这可以提供一种存储器访问的保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及到要害的操作。处理器支持两种特权级,这也是一个基本的安全模型。
Cortex-M3的简评
1、高性能
许多指令都是单周期的——包括乘法相关指令。并且从整体性能上,Cortex-M3比得过绝大多数其它的架构。
指令总线和数据总线被分开,取值和访内可并行不悖。
Thumb-2的到来告别了状态切换的旧世代,再也不需要花时间来切换于 32位 ARM状态和16位Thumb状态之间了。这简化了软件开发和代码维护,使产品面市更快。
Thumb-2指令集为编程带来了更多的灵活性。许多数据操作现在能用更短的代码搞定,这意味着 Cortex-M3的代码密度更高,也就对存储器的需求更少。
取指都按 32位处理。同一周期最多可以取出两条指令,留下了更多的带宽给数据传输。
Cortex-M3的设计允许单片机高频运行( 现代半导体制造技术能保证 100MHz以上的速度)即使在相同的速度下运行,CM3的每指令周期数(CPI)也更低,于是同样的 MHz下可以做更多的工作;另一方面,也使同一个应用在 CM3上需要更低的主频。
2、先进的中断处理功能
内建的嵌套向量中断控制器支持240条外部中断输入。向量化的中断功能大大减少了中断延迟,因为不在需要软件去判断中断源。中断的嵌套也是在硬件水平上实现的,不需要软件代码来实现。
Cortex-M3在进入异常服务例程时,自动压栈了 R0-R3, R12, LR, PSR 和PC,并且在返回时自动弹出它们,这多清爽!既加速了中断的响应,也再不需要汇编语言代码了
NVIC支持对每一路中断设置不同的优先级,使得中断管理极富弹性。最粗线条的实现也至少要支持 8级优先级,而且还能动态地被修改。
优化中断响应还有两招,它们分别是“咬尾中断机制”和“晚到中断机制”。
有些需要较多周期才能执行完的指令,是可以被中断-继续的——就好比它们是一串指令一样。这些指令包括加载多个寄存器(LDM),存储多个寄存器(STM),多个寄存器参与的PUSH,以及多个寄存器参与的 POP。
除非系统被彻底地锁定,NMI(不可屏蔽中断)会在收到请求的第一时间予以响应。对很多安全-关键(safety-critical)的应用,NMI都是必不可少的(如化学反应即将失控时的紧急停机)。
STM32F103ZET6
STM32F103ZET6是一款大容量的MCU,512K Flash 64K SRAM有丰富的外设接口。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

1

粉丝