STM32系列CortexM3高级控制定时器.docx
- 文档编号:23716575
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:33
- 大小:311.80KB
STM32系列CortexM3高级控制定时器.docx
《STM32系列CortexM3高级控制定时器.docx》由会员分享,可在线阅读,更多相关《STM32系列CortexM3高级控制定时器.docx(33页珍藏版)》请在冰豆网上搜索。
STM32系列CortexM3高级控制定时器
Cortex-M3的高级控制定时器
目录
摘要……………………………………………………………………2
ABSTRACT………………………………………………………………3
1绪论………………………………………………………………………4
1.1Cortex-M3的背景及意义……………………………………………4
1.2高级控制定时器的意义………………………………………………4
2STM32系列的体系结构................................................................................6
2.1Cortex-M3处理内核…………………………………………………6
2.2嵌套向量中断控制器………………………………………………6
2.3两个可选组件………………………………………………………6
2.4总线接口……………………………………………………………7
2.5调试接口……………………………………………………………7
3高级控制定时器……………………………………………………………8
3.1高级控制定时器的简介……………………………………………8
3.2高级控制定时器的功能描述………………………………………8
3.3高级控制定时器的寄存器种类……………………………………12
4STM32系列开发工具……………………………………………………14
4.1KeilMDK工具……………………………………………………….14
4.2KeilMDK的安装……………………………………………………14
5高级控制定时器实验设计………………………………………………19
5.1实验的目的…………………………………………………………19
5.2实验源代码的注解…………………………………………………19
5.3实验运行及结果……………………………………………………22
5.4实验现象的分析……………………………………………………24
结束语…………………………………………………………………………25
参考文献………………………………………………………………………26
致谢…………………………………………………………………………27
STM32系列(Cortex-M3)高级控制定时器
摘要
本文主要介绍STM32系列中Cortex-M3处理器,开发环境KeilMDK以及EduKit-M3实验平台。
Cortex-M3处理器使用了ARMv7-M体系结构,是一个可综合的、高度可配置的处理器。
它也是一个低功耗的处理器,具有门数少,中断延迟小,调试容易等特点。
Cortex-M3处理器的特性,使它适合很大范围的应用,主要包括:
价格敏感的设备——通用MCU、智能玩具、个人电子设备,低功耗设备——Zigbee、PAN(BlueTooth)、医疗电子设备,高性能设备——超低价格手机、汽车应用、大容量存储设备。
STM32微处理器基于ARM核,所以很多基于ARM嵌入式开发环境都可用于STM32开发平台。
开发工具都可用于STM32开发。
选择合适的开发环境可以加快开发进度,节省开发成本。
而STM32常用的开发工具是KeilMDK,Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器在内的完整开发方案,通过一个集成开发环境(uVision)将这些功能组合在一起。
现在最高版本是uVision3,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。
本设计是先在软件KeiluVision3进行仿真并观测输出波形。
在这过程中掌握如何编译所需要的代码,如何修改源代码,如何运用该软件,以及如何实现实验目的。
然后在EduKit-M3实验平台通过示波器察看所需要的波形。
在这个过程中掌握实验所需要注意的事项,如何连接软件和硬件,如何观察波形。
关键词:
STM32,Cortex-M3处理器,KeiluVision3
ABSTRACT
ThisarticleintroducesmainlytheprocessorofCortex-M3inSTM32series,thedevelopmentenvironmentKeilMDKandtheEduKit-M3experimentalplatform.TheCortex-M3processorimplementstheARMv7-Marchitecture,isacomprehensive,highlyconfigurableprocessor.Itisalsoalow-powerprocessorthatfeatureslowgatecount,lowinterruptlatency,andlow-costdebug.ThecharacteristicsofCortex-M3processor,makingitsuitableforlargescopeofapplication,mainlyincluding:
pricesensitiveequipments—generalMCU、intelligenttoys、personalelectronicequipment,lowpowerconsumptionequipments—thePAN(BlueTooth)Zigbee、medicalelectronicequipment、highperformance,lowpricescellphonesequipments—carapplication、massstoragedevice.
STM32microprocessorbasedontheARMkernel,somanyembeddeddevelopmentenvironmentbasedonARMcanbeusedfortheSTM32developmentplatform.theDevelopmenttoolscanbeusedforSTM32development.Choosingappropriatedevelopmentenvironmentcanspeedupdevelopmentprogressandsavedevelopmentcosts.HowevercommonlyuseddevelopmenttoolforSTM32isKeilMDK,andKeilincludesCcompilers,macroassemblers,connectors,librarymanagementsandthecompletedevelopmentplanthathasapowerfulsimulationdebugger,andthesefunctiongettogetherbyanintegrateddevelopmentenvironment(uVision).NowthehighestversionisuVision3.itsinterfaceissimilarwiththeinterfaceofcommonlyusedMicrosoftvc++,butitsinterfaceisfriendlyandeasytolearnanduse.Indebuggingprocedures,softwaresimulationalsohaveverypowerfulfunctions.
ThisdesignisfirstlysimulatingbythesoftwareKeiluVision3andobservingtheoutputwaveforms.Inthisprocessweshouldlearnhowtocompilerequiredcodes,howtomakechangestomodifythecodes,howtousethesoftware,andhowtoachieveexperimentalpurposes.ThenintheEduKit-M3experimentalplatformweobservtherequiredwaveformsbytheoscilloscope.InthisprocessweshouldmasterLABSnotices,howtoconnectsoftwareandhardware,howtoobservewaveforms.
Keywords:
STM32,theCortex-M3processor,KeiluVision3
1绪论
1.1Cortex-M3的背景及意义
随着单片机市场的规模越来越大,各行各业对单片机的功能要求越来越高,那么处理器和软件的性能要求就会越来越高。
在这样的环境下,ARMCortex-M3处理器,作为Cortex系列的处女作,为了让32位处理器在单片机市场上占主导的地位,轰轰烈烈地诞生了。
Cortex系列按照性能的不同分为A,R,M三个系列。
A系列,面向复杂的尖端应用程序,用于运行开放式的复杂操作系统。
R系列,适合实时系统。
M系列,专门针对低成本的微控制领域。
Cortex-M3处理器的性能是ARM7的两倍,它是一个低功耗的处理器,具有门数少、中断延迟小、调试容易等特点。
Cortex-M3处理器使用了ARMv7-M体系结构,是一个可综合的、高度可配置的处理器。
它包含了一个高效的哈佛结构三级流水线,可提供1.25DMIPS/MHz的性能。
为降低器件成本,Cortex-M3处理器采用了与系统部件紧耦合的实现方法,来缩小芯片面积,其内核面积比现有的三级流水线内核缩小了30%。
Cortex-M3处理器实现了Thumb-2指令集架构,具有很高的代码密度,可降低存储器需求,并能达到非常接近32位ARM指令集的性能。
所以它主要用于价格敏感的设备(如通用MCU、智能玩具、个人电子设备等)、低功耗设备(如Zigbee、PAN、BlueTooth、医疗电子设备等)、高性能设备(如超低价格手机、汽车应用、大容量存储设备等)。
Cortex-M3处理器在高性能内核基础上,集成了多种系统外设,可以满足不同应用对成本和性能的要求。
处理器是全部可综合、高度可定制的(包括物理中断、系统调试等),Cortex-M3还有一个可选的细粒度的(fine-granularity)存储器保护单元(MPU)和一个嵌入式跟踪宏单元(ETM)[1]。
现在Cortex-M3产品已经面世,提供更多的指令,更高效能,同时也更易用,价值也相当低。
不但可令产品提供更多的功能,软件的开发和测试也容易得多,使产品能更早推出市场。
1.2高级控制定时器的意义
STM32中有两个非常重要的定时器分别是高级控制定时器和通用定时器。
高级控制定时器(TIM1)和通用定时器(TIMx)是完全独立的,不共享任何资源。
高级控制定时器,简称TIM1,由一个自动重载的16位计数器组成,它由可编程的预分频器驱动。
该定时器可用于多种场合,包括测量输入信号的脉冲宽度(输入捕获),产生输出波形(输出比较,PWM,嵌入“死区时间”的互补PWM…)。
高级控制定时器不但具有通用定时器的功能而且还具有一些其他特殊的功能,例如具有可编程“死区时间”的补偿输出,循环计数器更新定时器寄存器的值,打断输入以使定时器的输出信号进入复位或一个已知的状态,打断输入产生中断/DMA等功能。
这些特殊的功能归功于寄存器的不同。
高级控制定时器比通用定时器多两个寄存器。
这两个寄存器是循环计数器的寄存器(TIM1_RCR),打断和死区寄存器(TIM1_BDTR)。
一般情况下,对于互补输入和死区插入的运用非常简单。
高级控制定时器能输出两个补偿信号,并管理输出信号的即时接通和切断.这就是通常所说的死区。
需要依赖连接到输出的设备和这些设备的特性(如电平转换的固有延迟,电源转换引起的延时等)对死区时间进行调整.。
而对于使用打断功能,依据相应的控制位,输出使能信号和无效电平都会被修改。
所以对于高级控制定时器的实验,应该对高级控制定时器进行控制,并且使之各通道输出插入了死区的互补的PWM输出[2]。
2
STM32系列的体系结构
STM32有六大产品系列分别是STM32F105/107,STM32F103,STM32F102,STM32F101,STM32L15x,STM32F100。
所有STM32系列都采用同样性能Cortex-M3内核。
而Cortex-M3处理器主要包括:
处理器内核,嵌套向量中断控制器(NVIC),存储器保护单元(MPU),总线接口,调试接口。
下面主要介绍Cortex-M3处理器。
2.1Cortex-M3处理内核
Cortex-M3处理器使用了ARMv7-M体系结构,是一个可综合的、高度可配置的处理器。
内部的数据路径是32位的,寄存器是32位的,存储器接口也是32位的。
它采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指和数据访问并行不悖,因而可提供1.25DMIPS/MHz的性能。
Cortex-M3内核实现了Thumb-2指令集——传统Thumb指令集的一个超集,既获得了传统32位代码的性能,又具有16位的高代码密度。
它拥有R0—R15的寄存器,R0—R7寄存器是低位寄存器,R8—R12是高位寄存器,R13作为椎栈指针SP,SP有两个,这两个SP具有不同的功能,任一时刻只能使用其中一个。
R14是连接寄存器,R15是程序计数寄存器[2]。
2.2嵌套向量中断控制器
Cortex-M3在内核水平上搭载了一颗中断控制器——嵌套向量中断控制器(NVIC),它与内核有很深的“亲密接触”——与内核是紧耦合的,因而提供了工业领先的中断处理性能。
标准的NVIC实现包括一个不可屏蔽中断(NMI),加上具有优先级的32个通用物理中断。
通过简单的综合选择,控制器可以被配置为1-244个物理中断。
另外,抢占式优先级的数目,可以在综合时配置到255个。
与处理器内核的紧密结合,使处理器可以更快地执行中断服务程序(ISR)。
典型
情况下,从中断发生到进入服务可减少70%的周期数,这是通过寄存器硬件堆栈,加上退出和重启多寄存器Load-Store操作完成的。
这种实现也意味着不需要任何汇编代码来完成寄存器数据传送,大大简化了代码[1]。
2.3两个可选组件
ARMCortex-M3有两个可选组件:
存储器保护单元(MPU)、嵌入式跟踪宏(ETM)。
细粒度的MPU设计,使多任务的应用可以实现安全特权,以及分离代码、数据和堆栈。
在类似汽车等许多嵌入式应用中,这类需求正变得越来越普遍。
嵌入式跟踪单元(ETM)提供了一种远小于传统跟踪单元范围的指令跟踪捕获,使许多低价器件(如MCU)可以实现跟踪调试[1]。
在Cortex-M3微控制器中可以选配一个存储器保护单元(MPU),它可以实施对存储器(主要是内存和外设寄存器)的保护,从而使软件更加健壮和可靠。
如果打算启用MPU,则在使用前,必需根据需要对其编程;如果没有启用MPU,则等同于系统没有配有MPU。
MPU有许多功能,例如阻止用户应用程序破坏操作系统所使用的数据,阻止一个任务访问其他任务的数据区并把任务隔开,可以把关键数据区设置成只读从根本上消除被破坏的可能,检测意外的存储访问,可以通过MPU设置存储器region的其他访问属性[2]。
ETM功能块用于提供指令跟踪(即指令执行的历史记录),它是个选配件,不一定出现在所有的Cortex-M3产品上。
当它使能,并且跟踪操作开始后,会产生指令跟踪数据包。
ETM中也有一个FIFO缓冲区,为跟踪数据流的捕捉提供充足的时间。
为了减少产生的数据量,ETM并不会一直忙不迭地输出处理器当前正在执行的地址。
通常它只输出有关程序执行流的信息,并只有在需要时才输出完整的地址。
因为调试主机也有一份二进制映像的备份,它可以使用此备份来重建指令的执行序列[2]。
2.4总线接口
ARMCortex-M3处理器集成了一个AMBAAHB-Lite总线来连接系统外设,并降低系统集成的复杂性。
总线矩阵支持不对齐的数据访问,使不同的数据类型可以在存储器中紧密衔接(不因为数据需要对齐而留出空隙),可显著降低SRAM的需求和系统成本。
总线矩阵将处理器、调试接口连接到外部总线[2]。
2.5调试接口
ARMCortex-M3实现了一个完整的硬件调试解决方案,通过一个传统的JTAG口或一个适合小封装器件的2线串行调试口(SWD),可以获得很高的处理器系统可视度。
对于系统跟踪,处理器在数据观察点基础上集成了一个可选的ETM(嵌入式跟踪宏单元),它可以被配置为特定的系统事件触发。
为了简化这些系统事件的处理,一个串行观测器(SerialWireViewer,SWV)可以通过一个引脚输出标准的ASCII数据流[2]。
3高级控制定时器
3.1高级控制定时器的简介
高级控制定时器(TIM1)由一个自动重载的16位计数器组成,它由可编程的预分频器驱动。
该定时器可用于多种场合,包括测量输入信号的脉冲宽度(输入捕获),产生输出波形(输出比较,PWM,嵌入“死区时间”的互补PWM…)。
使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。
TIM1定时器有以下特性:
1.16位的向上,向下,向上/向下的自动重载计数器。
2.16位的可编程预分频器(也可以不工作)允许以1到65535范围内的任何分频因子对计数器时钟进行分频。
3.多达4个独立的通道用于:
输入捕获,输出比较,产生PWM(边沿和中心对齐模式),单脉冲模式输出,具有可编程“死区时间”的补偿输出。
4.使用外部信号控制定时器和定时器互连的同步电路。
5.循环计数器只有经过给定的周期后,才能更新定时器寄存器的值。
6.打断输入以使定时器的输出信号进入复位或一个已知的状态。
7.可以产生中断/DMA的事件有:
更新(计数器上溢/下溢,计数器初始化。
),触发事件(计数器开始,停止,初始化或由内部/外部触发计数),输入捕获,输出比较,打断输入[2]。
3.2高级控制定时器的功能描述
1.时基单元
可编程的高级控制定时器的主要模块是一个16位的计数器以及相关的自动重载寄存器.该计数器可向上,向下或向上/向下双计数.该定时器的时钟可通过预分频器来分频.计数器,自动重载寄存器和预分频数寄存器均可通过软件来读写.即使计数器在工作,读写操作也是有效的.
时基单元包括:
计数器寄存器(TIM1_CNT),预分频数寄存器(TIM1_PSC),自动重载寄存器(TIM1_ARR),循环计数器寄存器(TIM1_RCR)。
自动重载寄存器是预先加载的。
对自动重载寄存器的读写是通过读写预加载寄存器来实现的。
预加载寄存器中的内容要么永久性的传送到影子寄存器中,要么仅在每次更新事件发生时才传送到影子寄存器中,这取决于TIM1_CR1寄存器中自动重载的预加载使能位(APRE)的值。
计数器上溢(或向下计数时下溢)且TIM1_CR1寄存器的UDIS位等于0时发生更新事件.更新事
件也可由软件产生[2]。
2.计数器模式
计数器模式有向上计数模式,向下计数器模式以及中心对齐模式。
向上计数模式:
计数器从0向上计数到自动重载计数器中的值(TIM1_ARR寄存器的内容),然后重新从0开始并产生计数器溢出事件。
向下计数模式:
计数器从自动重载值(TIM1_ARR寄存器的内容)向下计数到0,然后再从自动重载值开始并产生计数器下溢事件。
中心对齐模式(向上/向下计数):
计数器首先从0向上计数到自动重载值(TIM1_ARR寄存器的内容)-1,产生计数器上溢事件后再向下计数到1产生计数器下溢事件,然后从0开始重复这一过程。
循环向下计数器时基单元描述了更新事件在计数器上溢/下溢时是如何产生的。
实际上,更新事件仅当循环向下计数到0时才产生。
这可用来产生PWM信号。
这意味着在每N次计数溢出或下溢时,数据从预装载寄存器传输到影子寄存器,N是TIM1_RCR周期计数寄存器中的值。
循环向下计数器有两种递减方式分别是向上计数模式下每次计数器上溢时和向下计数模式下每次计数器下溢时。
3.时钟选择
能提供计数器时钟源的有:
内部时钟(CK_INT),外部时钟模式1:
外部输入引脚,外部时钟模式2:
外部触发输入ETR,内部触发输入(即将一个定时器作为另一个定时器的预分频器)[2]。
4.捕获/比较通道
每个捕获/比较通道都是由一个捕获/比较寄存器(包括一个影子寄存器),一个捕获输入部分(包括数字过滤器,多路器和预分频器)和一个输出部分(包括比较器和输出控制)。
捕获/比较模块由一个预加载寄存器和一个影子寄存器组成。
读写操作总是针对预加载寄存器的。
在捕获模式下,捕获实际上在影子寄存器中进行的,然后再复制到预装载寄存器中。
在比较模式下,预加载寄存器中的值被复制到影子寄存器中,并和计数器值比较[2]。
5.输入捕获模式
在输入捕获模式下,当检测到ICx信号上相应的边沿后,捕获/比较寄存器被用来锁存计数器的值。
当一个捕获事件发生时,相应的CCXIF标志被置1,如果使能了中断或者DMA操作,则将产生中断或者DMA操作。
如果一个捕获事件发生时CCxIF标志已经为高,那么重复捕获标志CCxOF被置1。
写CCxIF=0可清除CCxIF,或读取存储在TIM1_CCRx寄存器中的捕获数据也可清除CCxIF。
写CCxOF=0可清除CCxOF[2]。
6.PWM输入模式
这种模式是输入捕获模式的特例。
除以下内容外,其余过程相同:
1)同一个TIx输入映射了两个ICx信号。
2)这两个ICx信号分别在相反的极性边沿有效。
3)两个TIxFP信号中的一个被选为触发输入,并且从模式控制器被设置成复位模式[2]。
7.强制输出模式
在输出模式下(TIM1_CCMRx寄存器中的CCxS=00),每个输出比较信号(OCxREF和相应的OCx/OCxN)都可直接由软件强制设为有效或不有效状态,不依赖于输出比较寄存器和计数器间的任何比较.只需将相应的TIM1_CCMRx寄存器中的OcxM位设置为101,就可强制将一个输出比较信号(OCXREF/OCx)设为有效状态。
因此OCXREF将被强制设为高(OCXREF总是高电平有效),OCx的值与CCxP极性位的值相反[2]。
8.输出比较模式
此项功能是用来控制一个输出波形或者指示何时一段给定的时间已经到时。
1)当计数器与捕获/比较寄存器的内容相同时,输出比较功能做如下操作:
将输出比较模式(TIM1_CCMRx寄存器中的OCxM位)和输出极性(TIM1_CCER寄存中的CCxP位)定义的值输出到对应的引脚上。
在比较匹配时,输出引脚可以保持它的电平(OCxM=011)、被设置成有效电平(OCxM=001)、被设置成无有效电平(OCxM=010)或进行翻转(OCxM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32 系列 CortexM3 高级 控制 定时器