打印
[信息]

【转】STM32系列内核详解

[复制链接]
3636|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一坨代码|  楼主 | 2016-9-6 23:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。按性能分成两个不同的系列:STM32F103“增强型”系列和STM32F101“基本型”系列增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。
         Cortex-M3是一个32位的核,在传统的单片机领域中,有一些不同于通用32位CPU应用的要求。谭军举例说,在工控领域,用户要求具有更快的中断速度,Cortex-M3采用了Tail-Chaining中断技术完全基于硬件进行中断处理,最多可减少12个时钟周期数,在实际应用中可减少70%中断。
概述


  单片机的另外一个特点是调试工具非常便宜,不象ARM的仿真器动辄几千上万。针对这个特点,Cortex-M3采用了新型的单线调试(Single Wire)技术,专门拿出一个引脚来做调试,从而节约了大笔的调试工具费用。同时,Cortex-M3中还集成了大部分存储器控制器,这样工程师可以直接在MCU外连接Flash,降低了设计难度和应用障碍。
  ARM Cortex-M3处理器结合了多种突破性技术,令芯片供应商提供超低费用的芯片,仅33000门的内核性能可达1.2DMIPS/MHz。该处理器还集成了许多紧耦合系统外设,令系统能满足下一代产品的控制需求。ARM公司希望Cortex-M3核的推出,能帮助单片机厂商。
  Cortex的优势应该在于低功耗、低成本、高性能3者(或2者)的结合。
  Cortex如果能做到合理的低功耗(肯定要比Arm7 & Arm9要低,但不大可能比430、PIC、AVR低) + 合理的高性能(10~50MIPS是比较可能出现的范围) + 适当的低成本(1~5$应该不会奇怪)。
  简单的低成本不大可能比典型的8位MCU低。对于已经有8位MCU的厂商来说,比如Philips、Atmel、Freescale、Microchip还有ST和Silocon Lab,不大可能用Cortex来打自己的8位MCU。对于没有8位MCU的厂商来说,当然是另外一回事,但他们在国内进行推广的实力在短期内还不够。
  对于已经有32位ARM的厂商来说,比如Philips、Atmel、ST,又不大可能用Cortex来打自己的Arm7/9,对他们来说,比较合理的定位把Cortex与Arm7/9错开,即<40MIPS的性能+低于Arm7的价格,当然功耗也会更低些;当然这样做的结果很可能是,断了16位MCU的后路。
  对于仍然在推广16位MCU的厂商来说,比如Freescal、Microchip,处境比较尴尬,因为Cortex基本上可以完全替代16位MCU。
  所以,未来的1~2年,来自新厂商的Cortex比较值得期待-包括国内的供应商;对于已有32位ARM的厂商,情况比较有趣;对于16位MCU的厂商,反应比较有意思。
编程模式  Cortex-M3处理器采用ARMv7-M架构,它包括所有的16位Thumb指令集和基本的32位Thumb-2指令集架构,Cortex-M3处理器不能执行ARM指令集。
  Thumb-2在Thumb指令集架构(ISA)上进行了大量的改进,它与Thumb相比,具有更高的代码密度并提供16/32位指令的更高性能。
  关于工作模式
  Cortex-M3处理器支持2种工作模式:线程模式和处理模式。在复位时处理器进入“线程模式”,异常返回时也会进入该模式,特权和用户(非特权)模式代码能够在“线程模式”下运行。
  出现异常模式时处理器进入“处理模式”,在处理模式下,所有代码都是特权访问的。
  关于工作状态
  Coretx-M3处理器有2种工作状态。
  Thumb状态:这是16位和32位“半字对齐”的Thumb和Thumb-2指令的执行状态。
  调试状态:处理器停止并进行调试,进入该状态。



沙发
一坨代码|  楼主 | 2016-9-6 23:34 | 只看该作者

中断和事件

一、 嵌套向量中断控制器(NVIC:Nested Vectored Interrupt Controller嵌套向量中断控制器)

特性

��� 43 个可屏蔽中断通道(不包含16 个Cortex-M3 的中断线);

��� 16 个可编程的优先等级;

��� 低延迟的异常和中断处理;

��� 电源管理控制;

���系统控制寄存器的实现;

嵌套向量中断控制器(NVIC)和处理器核的接口紧密相连,可以实现低延迟的中断处理和有

效处理地处理晚到的中断。

嵌套向量中断控制器管理着包括核异常等中断。关于更多的异常和NVIC编程的说明请参考

ARM《Cortex-M3TM技术参考手册》的第5章的异常和第8章的嵌套向量中断控制器。

二、 系统嘀嗒(SysTick)校准值寄存器

系统嘀嗒校准值固定到9000,当系统嘀嗒时钟设定为9兆赫,产生1ms时基。

三、 中断和异常向量

四、 6.2 外部中断/事件控制器(EXTI)

外部中断/事件控制器由19个产生事件/中断要求的边沿检测器组成。每个输入线可以独立地

配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每

个输入线都可以被独立的屏蔽。挂起寄存器保持着状态线的中断要求。

五、 6.2.1 主要特性

EXTI控制器的主要特性如下:

��� 每个中断/事件都有独立的触发和屏蔽

��� 每个中断线都有专用的状态位

��� 支持多达19 个中断/事件请求

��� 检测脉冲宽度低于APB2 时种宽度的外部信号。参见数据手册中电气特性部分的相关参

数。

六、 6.2.2 框图

外部中断/事件控制器框图

七、 唤醒事件管理

Cortex-M3 可以处理外部时间或内部中断来唤醒内核。通过配置任何外部I/O端口、RTC 闹

钟和USB唤醒事件可以唤醒CPU(内核从WFE退出)。使用外部I/O端口作为唤醒事件,请参见6.2.4节的功能说明

八、 功能说明

如要产生中断,中断线必须事先配置好并被激活。这是根据需要的边沿检测通过设置2个触

发寄存器,和在中断屏蔽寄存器的相应位写“1”到来允许中断请求。当需要的边沿在外部

中断线上发生时,将产生一个中断请求,对应的挂起位也随之被置1。通过写“1”到挂起寄存器,可以清除该中断请求。为产生事件触发,事件连接线必须事先配置好并被激活。这是根据需要的边沿检测通过设置2个触发寄存器,和在事件屏蔽寄存器的相应位写“1”到来允许事件请求。当需要的边沿在事件连线上发生时,将产生一个事件请求脉冲,对应的挂起位不被置1。通过在软件中断/事件寄存器写“1”,一个中断/事件请求也可以通过软件来产生。硬件中断选择

通过下面的过程来配置19个线路做为中断源:

��� 配置19 个中断线的屏蔽位(EXTI—IMR)

��� 配置所选中断线的触发选择位(EXTI_RTSR 和EXTI_FTSR);

��� 配置那些控制映像到外部中断控制器(EXTI)的NVIC 中断通道的使能和屏蔽位,使得19

个中断线中的请求可以被正确地响应。

硬件事件选择

通过下面的过程,可以配置19个线路为事件源

��� 配置19 个事件线的屏蔽位(EXTI_EMR)

��� 配置事件线的触发选择位(EXTI_RTSR and EXTI_FTSR)

软件中断/事件的选择19个线路可以被配置成软件中断/事件线。下面是产生软件中断的过程:

配置19 个中断/事件线屏蔽位(EXTI_IMR, EXTI_EMR)(Interrupt Mask Register)

��� 设置软件中断寄存器的请求位(EXTI_SWIER)

6.2.5 外部中断/事件线路映像

80通用I/O端口以下图的方式连接到19个外部中断/事件线上:

图为外部中断通用I/O映像

另外三种其他的外部中断/事件控制器的连接如下:

��� EXTI 线16 连接到PVD 输出

��� EXTI 线17 连接到RTC 闹钟事件

��� EXTI 线18 连接到USB 唤醒事件

说明:有些图片就是传不上来,还有一些寄存器的介绍就省略。

如果要看见全文,可以到CSDN下载。


使用特权

评论回复
板凳
一坨代码|  楼主 | 2016-9-6 23:35 | 只看该作者

一、时钟

1.三种不同的时钟源可被用来驱动系统时钟(SYSCLK):

.HSI 振荡器时钟  High Speed Internal

.HSE 振荡器时钟  High Speed External

.PLL 时钟        Phase Locked Loop

2.这些设备有以下2种二级时钟源:

.32kHz 低速内部RC【1】,可以用于驱动独立看门狗和RTC。RTC 用于从停机/待机模式下自动唤醒系统。

.32.768kHz 低速外部晶体也可用来驱动RTC(RTCCLK)。RTC:Real-Time Clock  实时时钟

当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。

3.用户可通过多个预分频器配置AHB(Advanced High Performance Bus高性能总线)、高速APB(Advanced Peripheral Bus外围总线)(APB2)和低速 APB(APB1)域的频率。AHB和APB2域的最大频率是72MHZ。APB1域的最大允许频率是36MHZ。

RCC通过AHB时钟8分频后供给Cortex系统定时器的外部时钟。通过对SysTick控制与状态寄存器的设置,可选择上述时钟或Cortex AHB时钟作为SysTick时钟。

ADC时钟由高速APB2时钟经2、4、6或8分频后获得。

定时器时钟频率是其所在APB总线频率的两倍。然而,如果相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。

FCLK是Cortex-M3的自由运行时钟(Free Clock)。详情见ARM的Cortex-M3技术参考手册。

4.时钟树

二、HSE 时钟

高速外部时钟信号(HSE)由以下两种时钟源产生:(High Speed External)

��� HSE 外部晶体/陶瓷谐振器【2】

��� HSE 用户外部时钟

为了减少时钟输出的失真和缩短启动稳定时间,晶体/陶瓷谐振器和负载电容器必须尽可能地靠近振荡器管脚。负载电容值必须根据所选择的振荡器来调整。

HSE/LSE时钟源

硬件配置
外部时钟
晶体/陶瓷谐振器

外部时钟源(HSE旁路)

在这个模式里,必须提供外部时钟。它的频率最高可达25MHz。用户可通过设置在时钟控制寄存器中的HSEBYP和HSEON位来选择这一模式。外部时钟信号(50%占空比的方波、正弦波或三角波)必须连到SOC_IN管脚,同时保证OSC_OUT管脚悬空。见上图。

外部晶体/陶瓷谐振器(HSE晶体)4-16Mz外部振荡器可为系统提供更为精确的主时钟。相关的硬件配置可上图,进一步信息可参考数据手册的电气特性部分。

在时钟控制寄存器RCC_CR中的HSERDY位用来指示高速外部振荡器是否稳定。在启动时,

直到这一位被硬件置1,时钟才被释放出来。如果在时钟中断寄存器RCC_CIR中被激活,将

会产生相应中断。

HSE晶体可以通过设置时钟控制寄存器里RCC_CR中的HSEON位被启动和关闭。

三、HSI 时钟  High Speed Internal

HSI时钟信号由内部8MHZ的RC振荡器产生,它可以直接作为系统时钟或者在2分频后作为

PLL输入。HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振荡器短。然而,即使在校准之后它的时钟频率精度仍较差。

校准

制造工艺决定了不同芯片的RC振荡器频率会不同,这就是为什么每个芯片的HIS时钟频率在出厂前已经被ST校准到1%(25°C)的原因。系统复位时,工厂校准值被装载到时钟控制寄存器的HSICAL[7:0]位。如果用户的应用基于不同的电压或环境温度,这将会影响RC振荡器的精度。你可以通过利用在时钟控制寄存器里的HSITRIM[4:0]位来调整HSI频率。时钟控制寄存器中的HSIRDY位用来指示HSI RC振荡器是否稳定。在时钟启动过程中,直到这一位被硬件置1,HSI RC输出时钟才被释放。HSI RC可由时钟控制寄存器中的HSION位来启动和关闭。如果HSE晶体振荡器失效,HSI时钟会被作为备用时钟源。可以参考时钟安全系统。

四、 PLL

内部PLL可以用来倍频HSI RC的输出时钟或HSE晶体输出时钟。参考上图和时钟控制寄存器。

PLL的设置(选择HIS振荡器除2或HSE振荡器为PLL的输入时钟,和选择倍频因子)必须在

其被激活前完成。一旦PLL被激活,这些参数就不能被改动。如果PLL中断在时钟中断寄存器里被允许,当PLL准备就绪时,可产生中断申请。如果需要在应用中使用USB接口,PLL必须被设置为输出48或72MHZ时钟,用于提供48MHz的USBCLK时钟。

五、 LSE 时钟

LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为实时时钟或者其他定时功能

提供一个低功耗且精确的时钟源。LSE晶体通过在备份域控制寄存器(RCC_BDCR)里的LSEON位启动和关闭。在备份域控制寄存器(RCC_BDCR)里的LSERDY指示LSE晶体振荡是否稳定。在启动阶段,直到这个位被硬件置1后,LSE时钟信号才被释放出来。如果在时钟中断寄存器里被允许,可产生中断申请。外部时钟源(LSE旁路)在这个模式里必须提供一个32.768kHz频率的外部时钟源。你可以通过设置在备份域控制寄存器(RCC_BDCR)里的LSEBYP和LSEON位来选择这个模式。具有50%占空比的外部时钟信号(方波,正弦波或三角波)必须连到OSC32_IN管脚,同时保证OSC32_OUT管脚悬空。见上图。

六、 LSI 时钟

LSI RC担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟。LSI时钟频率大约32kHz(在30kHz和60kHz之间)。进一步信息请参考数据手册中有关电气特性部分。

LSI RC可以通过控制/状态寄存器(RCC_CSR)里的LSION位来启动或关闭。

在控制/状态寄存器(RCC_CSR)里的LSIRDY位指示低速内部振荡器是否稳定。在启动阶段,

直到这个位被硬件设置为1后,此时钟才被释放。如果在时钟中断寄存器(RCC_CIR)里被允

许,将产生LSI中断申请。

七、 系统时钟(SYSCLK)选择

系统复位后,HSI振荡器被选为系统时钟。当时钟源被直接或通过PLL间接作为系统时钟时,

它将不能被停止。只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),从一个时钟源到另一个时钟源的切换才会发生。在被选择时钟源没有就绪时,系统时钟的切换不会发生。直至目标时钟源就绪,才发生切换。在时钟控制寄存器(RCC_CR)里的状态位指示哪个时钟已经准备好了,哪个时钟目前被用作系统时钟。

八、 时钟安全系统(CSS)(Clock System Safe)

时钟安全系统可以通过软件被激活。一旦其被激活,时钟监测器将在HSE振荡器启动延迟后被使能,并在HSE时钟关闭后关闭。如果HSE时钟发生故障,此振荡器自动地被关闭,时钟失效事件将被送到高级定时器TIM1的断路输入端,并产生时钟安全中断CSSI,允许软件完成营救操作。此CSSI中断被连接到Cortex-M3 NMI的中断。

注意:一旦CSS被激活,并且HSE时钟出现故障,CSS中断就产生,并且NMI也自动产生。NMI将被不断执行,直到CSS中断挂起位被清除。因此,在NMI的处理程序中必须通过设置时钟中断寄存器(RCC_CIR)里的CSSC位来清除CSS中断。如果HSE振荡器被直间或间接地作为系统时钟来用的话,(间接的意思是:它被作为PLL输入时钟,并且PLL时钟被作为系统时钟),时钟故障将导致系统时钟自动切换到HSI振荡器,

同时外部HSE振荡器被关闭。在时钟失效时,如果HSE振荡器时钟(被分频或未被分频)是用作系统时钟的PLL的输入时钟,PLL也将被关闭。

九、 RTC 时钟

通过设置备份域控制寄存器(RCC_BDCR)里的RTCSEL[1:0]位,RTCCLK时钟源可以由

HSE/128、LSE或LSI时钟提供。除非备份域复位,此选择不能被改变。

LSE时钟在备份域里,但HSE和LSI时钟不是。因此:

��� 如果LSE 被选为RTC 时钟:

只要VBAT 维持供电,尽管VDD 供电被切断,RTC 仍继续工作。

��� 如果LSI 被选为自动唤醒单元(AWU)时钟:

如果VDD 供电被切断, AWU 状态不能被保证

��� 如果HSE 时钟128 分频后作为RTC 时钟:

如果VDD 供电被切断或内部电压调压器被关闭(1.8V 域的供电被切断),RTC 状态不能被

保证。

十、 看门狗时钟

如果独立看门狗已经由硬件选项或软件启动,LSI振荡器将被强制在打开状态,并且不能被

关闭。在LSI振荡器稳定后,时钟供应给IWDG。

十一、 时钟输出

微控制器允许输出时钟信号到外部MCO管脚。

相应的GPIO端口寄存器必须被配置为相应功能。以下四个时钟信号可被选作MCO时钟:

���  SYSCLK

���  HSI

���  HSE

���  除2 的PLL 时钟

时钟的选择由时钟配置寄存器(RCC_CFGR)中的MCO[2:0]位控制。

【1】采用RC选频网络构成的振荡电路称为RC振荡电路,它适用于低频振荡,一般用于产生1Hz~1MHz的低频信号。因为对于RC振荡电路来说,增大电阻R即可降低振荡频率,而增大电阻是无需增加成本的。

常用LC振荡电路产生的正弦波频率较高,若要产生频率较低的正弦振荡,势必要求振荡回路要有较大的电感和电容,这样不但元件体积大、笨重、安装不便,而且制造困难、成本高。因此,200kHz以下的正弦振荡电路,一般采用振荡频率较低的RC振荡电路。

常用的RC振荡电路

有相移式和桥式两种。

(1)RC移相式振荡器,具有电路简单,经济方便等优点,但选频作用较差,振幅不够稳定,频率调节不便,因此一般用于频率固定、稳定性要求不高的场合。其振荡频率是fo=1/2π√6RC

(2)RC桥式振荡器 将RC串并联选频网络和放大器结合起来即可构成RC振荡电路,放大器件可采用集成运算放大器。

【2】谐振器就是指产生谐振频率的电子元件,常用的分为石英晶体谐振器和陶瓷谐振器。起产生频率的作用,具有稳定,抗干扰性能良好的特点,广泛应用于各种电子产品中,石英晶体谐振器的频率精度要高于陶瓷谐振器,但成本也比陶瓷谐振器高。谐振器重要起频率控制的作用,所有电子产品涉及频率的发射和接收都需要谐振器。谐振器的类型按照外形可以分为直插式和贴片式两种。


使用特权

评论回复
地板
mmuuss586| | 2016-9-7 09:00 | 只看该作者
谢谢分享;

使用特权

评论回复
5
hugo0chen| | 2016-9-7 09:36 | 只看该作者
不错的东西,谢谢分享

使用特权

评论回复
6
一坨代码|  楼主 | 2016-9-10 00:14 | 只看该作者
hugo0chen 发表于 2016-9-7 09:36
不错的东西,谢谢分享

客气客气!

使用特权

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

本版积分规则

52

主题

109

帖子

2

粉丝