第十一章 通用定时器(上篇)
单芯片解决方案,敞开全新体会——W55MH32 高功用。以太网。单片机。
W55MH32是。WIZnet。重磅推出的高功用以太网单片机,它为用户带来史无前例的集成化体会。这颗芯片将强壮的组件集于一身,具体来说,一颗W55MH32内置高功用。Arm。® Cortex-M3中心,其主频最高可达216MHz;装备1024KB FLASH与96KB S。RAM。,满意存储与数据处理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP协议栈、内置MAC以及PHY,具有独立的32KB以太网收发缓存,可供8个独立硬件socket运用。如此装备,实在完结了All-in-One解决方案,为。开发者。供给极大便当。
在封装标准上,W55MH32 供给了两种挑选:QFN68和QFN100。
W55MH32Q选用QFN68封装版别,尺度为8x8mm,它具有36个GPIO、3个。ADC。、12通道。DMA。、17个。守时器。、2个。I2C。、3个串口、2个SPI。接口。(其间1个带I2S接口复用)、1个。CAN。以及1个。USB。2.0。在坚持与同系列其他版别一同的中心功用基础上,仅减少了部分GPIO以及。SDI。O接口,其他参数坚持一同,性价比优势明显,特别合适网关模组等对空间布局要求较高的场景。紧凑的尺度和精简化外设装备,使其可以在有限空间内完结高效的网络衔接与数据交互,成为。物联网。网关、边际核算节点等紧凑型设备的抱负挑选。 同系列还有QFN100封装的W55MH32L版别,该版别具有更丰厚的外设资源,适用于需求多接口扩展的杂乱工控场景,软件运用办法一同。更多信息和材料请进入http://www.w5500.com/网站或许私信获取。
此外,本W55MH32支撑硬件加密。算法。单元,WIZnet还推出TOE+SSL运用,包含TCP SSL、HTTP SSL以及MQTT SSL等,为。网络通讯。安全再添保证。
为助力开发者快速上手与深化开发,依据W55MH32Q这颗芯片,WIZnet精心打造了配套开发板。开发板集成WIZ-Link芯片,凭借一根USB C口数据线,就能轻松完结调试、下载以及串口打印日志等功用。开发板将一切外设悉数引出,拓宽功用也大幅进步,便于开发者全面评价芯片功用。
若您想获取芯片和开发板的更多详细信息,包含产品特性、技能参数以及价格等,欢迎拜访官方网页:http://www.w5500.com/,咱们等候与您一同探究W55MH32的无限或许。
第十一章 通用守时器(上篇)。
W55MH32的通用守时器为。TI。M2~TIM5/TIM9~TIM14,由于篇幅有限,这儿咱们解说TIM2~TIM5的相关功用,关于通用守时器TIM9~TIM14,感兴趣的朋友查阅《W55MH32参阅手册》运用办法一同,功用上存在少许差异,把握了办法之后都是一通百通的。
本章分为如下几个末节:
1 通用守时器概述。
2 程序设计。
3 下载验证。
1 通用守时器概述。
1.1 通用守时器简介。
通用守时器是一个经过可。编程。预分频器驱动的 16 位主动装载计数器构成。它适用于多种场合,包含丈量输入。信号。的脉冲长度(输入捕获)或许发生输出波形(输出比较和PWM)。运用守时器预分频器和 RCC。 时钟。操控器。预分频器,脉冲长度和波形周期可以在几个微秒到几个 毫秒间调整。每个守时器都是彻底独立的,没有相互同享任何资源。
1.2 首要功用。
通用TIMx (TIM2、TIM3、TIM4和TIM5)守时器功用包含:
16位向上、向下、向上/向下主动装载计数器。
16位可编程(可以实时修正)预分频器,计数器时钟频率的分频系数为1~65536之间的恣意 数值。
4个独立通道:
输入捕获。
输出比较。
PWM生成(边际或中心对齐形式)。
单脉冲形式输出。
运用外部信号操控守时器和守时器互连的同步电路。
如下事情发生时发生中止/DMA:
更新:计数器向上溢出/向下溢出,计数器初始化(经过软件或许内部/外部触发)。
触发事情(计数器发动、中止、初始化或许由内部/外部触发计数)。
输入捕获。
输出比较。
支撑针对定位的增量(正交)。编码器。和霍尔。传感器。电路。
触发输入作为外部时钟或许按周期的。电流。办理。
通用守时器框图如下:
1.3 功用描绘。
1.3.1时基单元。
可编程通用守时器的首要部分是一个16位计数器和与其相关的主动装载。存放器。。这个计数器可以向上计数、向下计数或许向上向下双向计数。此计数器时钟由预分频器分频得到。
计数器、主动装载存放器和预分频器存放器可以由软件读写,在计数器作业时仍可以读写。时基单元包含:
计数器存放器(TIMx_CNT)。
预分频器存放器 (TIMx_PSC)。
主动装载存放器 (TIMx_ARR)。
主动装载存放器是预先装载的,写或读主动重装载存放器将拜访预装载存放器。依据在 TIMx_CR1存放器中的主动装载预装载使能位(ARPE)的设置,预装载存放器的内容被当即或在 每次的更新事情UEV时传送到影子存放器。当计数器抵达溢出条件(向下计数时的下溢条件)并当 TIMx_CR1存放器中的UDIS位等于'0'时,发生更新事情。更新事情也可以由软件发生。随后会详细描绘每一种装备下更新事情的发生。
计数器由预分频器的时钟输出CK_CNT驱动,仅当设置了计数器TIMx_CR1存放器中的计数器使能位(CEN)时,CK_CNT才有用。(有关计数器使能的细节,请拜见操控器的从形式描绘)。
注:实在的计数器使能信号CNT_EN是在CEN的一个时钟周期后被设置。
预分频器描绘。
预分频器可以将计数器的时钟频率按1到65536之间的恣意值分频。它是依据一个(在TIMx_PSC 存放器中的)16位存放器操控的16位计数器。这个操控存放器带有缓冲器,它可以在作业时被改 变。新的预分频器参数鄙人一次更新事情到来时被选用。
下面出了在预分频器作业时,更改计数器参数的比如:
当预分频器的参数从1变到2时,计数器的时序图。
当预分频器的参数从1变到4时,计数器的时序图。
1.3.2计数器形式。
向上计数形式。
在向上计数形式中,计数器从0计数到主动加载值(TIMx_ARR计数器的内容),然后从头从0开端 计数而且发生一个计数器溢出事情。
每次计数器溢出时可以发生更新事情,在TIMx_EGR存放器中(经过软件办法或许运用从形式控 制器)设置UG位也相同可以发生一个更新事情。
设置TIMx_CR1存放器中的UDIS位,可以制止更新事情;这样可以防止在向预装载存放器中写 入新值时更新影子存放器。在UDIS位被清'0'之前,将不发生更新事情。可是在应该发生更新事 件时,计数器仍会被清'0',一同预分频器的计数也被请0(但预分频系数不变)。此外,假如设置 了TIMx_CR1存放器中的U。RS。位(挑选更新恳求),设置UG位将发生一个更新事情UEV,但硬件 不设置UIF标志(即不发生中止或DMA恳求);这是为了防止在捕获形式下铲除计数器时,一同产 生更新和捕获中止。
当发生一个更新事情时,一切的存放器都被更新,硬件一同(依据URS位)设置更新标志位 (TIMx_SR存放器中的UIF位)。
预分频器的缓冲区被置入预装载存放器的值(TIMx_PSC存放器的内容)。
主动装载影子存放器被从头置入预装载存放器的值(TIMx_ARR)。
下图给出一些比如,当TIMx_ARR=0x36时计数器在不一同钟频率下的动作:
计数器时序图,内部时钟分频因子为1。
计数器时序图,内部时钟分频因子为2。
计数器时序图,内部时钟分频因子为4。
计数器时序图,内部时钟分频因子为N。
计数器时序图,当ARPE=0时的更新事情(TIMx_ARR没有预装入)。
计数器时序图,当ARPE=1时的更新事情(预装入了TIMx_ARR)。
向下计数形式。
在向下形式中,计数器从主动装入的值(TIMx_ARR计数器的值)开端向下计数到0,然后从主动 装入的值从头开端而且发生一个计数器向下溢出事情。
每次计数器溢出时可以发生更新事情,在TIMx_EGR存放器中(经过软件办法或许运用从形式控 制器)设置UG位,也相同可以发生一个更新事情。
设置TIMx_CR1存放器的UDIS位可以制止UEV事情。这样可以防止向预装载存放器中写入新值 时更新影子存放器。因而UDIS位被清为'0'之前不会发生更新事情。可是,计数器仍会从当时自 动加载值从头开端计数,一同预分频器的计数器从头从0开端(但预分频系数不变)。
此外,假如设置了TIMx_CR1存放器中的URS位(挑选更新恳求) ,设置UG位将发生一个更新事 件UEV但不设置UIF标志(因而不发生中止和DMA恳求),这是为了防止在发生捕获事情并铲除计 数器时,一同发生更新和捕获中止。
当发生更新事情时,一切的存放器都被更新,而且(依据URS位的设置)更新标志位(TIMx_SR寄 存器中的UIF位)也被设置。
预分频器的缓存器被置入预装载存放器的值(TIMx_PSC存放器的值)。
当时的主动加载存放器被更新为预装载值(TIMx_ARR存放器中的内容) 。
注:主动装载在计 数器重载入之前被更新,因而下一个周期将是预期的值。
以下是一些当TIMx_ARR=0x36时,计数器在不一同钟频率下的操作比如。
计数器时序图,内部时钟分频因子为1。
计数器时序图,内部时钟分频因子为2。
计数器时序图,内部时钟分频因子为4。
计数器时序图,内部时钟分频因子为N。
计数器时序图,当没有运用重复计数器时的更新事情。
中心对齐形式(向上/向下计数)。
在中心对齐形式,计数器从0开端计数到主动加载的值(TIMx_ARR存放器)-1,发生一个计数器 溢出事情,然后向下计数到1而且发生一个计数器下溢事情;然后再从0开端从头计数。
在这个形式,不能写入TIMx_CR1中的DIR方向位。它由硬件更新并指示当时的计数方向。
可以在每次计数上溢和每次计数下溢时发生更新事情;也可以经过(软件或许运用从形式操控器) 设置TIMx_EGR存放器中的UG位发生更新事情。然后,计数器从头从0开端计数,预分频器也 从头从0开端计数。
设置TIMx_CR1存放器中的UDIS位可以制止UEV事情。这样可以防止在向预装载存放器中写入 新值时更新影子存放器。因而UDIS位被清为'0'之前不会发生更新事情。可是,计数器仍会依据 当时主动重加载的值,继续向上或向下计数。
此外,假如设置了TIMx_CR1存放器中的URS位(挑选更新恳求) ,设置UG位将发生一个更新事 件UEV但不设置UIF标志(因而不发生中止和DMA恳求),这是为了防止在发生捕获事情并铲除计 数器时,一同发生更新和捕获中止。
当发生更新事情时,一切的存放器都被更新,而且(依据URS位的设置)更新标志位(TIMx_SR寄 存器中的UIF位)也被设置。
预分频器的缓存器被加载为预装载(TIMx_PSC存放器)的值。
当时的主动加载存放器被更新为预装载值(TIMx_ARR存放器中的内容)。
注:假如由于计数 器溢出而发生更新,主动重装载将在计数器重载入之前被更新,因而下一个周期将是预期 的值(计数器被装载为新的值)。
以下是一些计数器在不一同钟频率下的操作的比如:
计数器时序图,内部时钟分频因子为1,TIMx_ARR=0x6。
1.这儿运用了。中心。对齐形式1。
计数器时序图,内部时钟分频因子为2。
计数器时序图,内部时钟分频因子为4,TIMx_ARR=0x36。
计数器时序图,内部时钟分频因子为N。
计数器时序图,ARPE=1时的更新事情(计数器下溢)。
计数器时序图,ARPE=1时的更新事情(计数器溢出)。
1.3.3时钟挑选。
计数器时钟可由下列时钟源供给:
内部时钟(CK_INT)。
外部时钟形式1:外部输入脚(TIx)。
外部时钟形式2:外部触发输入(ETR)。
内部触发输入(ITRx):运用一个守时器作为另一个守时器的预分频器,如可以装备一个守时器Timer1而作为另一个守时器Timer2的预分频器。
内部时钟源(CK_INT)。
假如制止了从形式操控器(TIMx_SMCR存放器的SMS=000),则CEN 、DIR(TIMx_CR1存放器) 和UG位(TIMx_EGR存放器)是事实上的操控位,而且只能被软件修正(UG位仍被主动铲除)。只 要CEN位被写成'1',预分频器的时钟就由内部时钟CK_INT供给。
下图显现了。操控电路。和向上计数器在一般形式下,不带预分频器时的操作:
一般形式下的操控电路,内部时钟分频因子为1。
外部时钟源形式1。
当TIMx_SMCR存放器的SMS=111时,此形式被选中。计数器可以在选定输入端的每个上升沿 或下降沿计数。
TI2外部时钟衔接比如。
例如,要装备向上计数器在T12输入端的上升沿计数,运用下列进程:
1.装备TIMx_CCMR1存放器CC2S='01',装备通道2检测TI2输入的上升沿。
2.装备TIMx_CCMR1存放器的IC2F[3:0],挑选输入。滤波器。带宽(假如不需求滤波器,坚持 IC2F=0000)。
注:捕获预分频器不必作触发,所以不需求对它进行装备。
3.装备TIMx_CCER存放器的CC2P='0',选定上升沿极性。
4.装备TIMx_SMCR存放器的SMS='111',挑选守时器外部时钟形式1。
5.装备TIMx_SMCR存放器中的TS='110',选定TI2作为触发输入源。
6.设置TIMx_CR1存放器的CEN='1',发动计数器。
当上升沿呈现在TI2,计数器计数一次,且TIF标志被设置。
在TI2的上升沿和计数器实践时钟之间的延时,取决于在TI2输入端的从头同步电路。
外部时钟形式1下的操控电路。
外部时钟源形式2。
选定此形式的办法为:令TIMx_SMCR存放器中的ECE=1 计数器可以在外部触发ETR的每一个上升沿或下降沿计数。 下图是外部触发输入的框图:
外部触发输入框图。
例如,要装备在ETR下每2个上升沿计数一次的向上计数器,运用下列进程:
1.本例中不需求滤波器,置TIMx_SMCR存放器中的ETF[3:0]=0000。
2.设置预分频器,置TIMx_SMCR存放器中的ETPS[1:0]=01。
3.设置在ETR的上升沿检测,置TIMx_SMCR存放器中的ETP=0。
4.敞开外部时钟形式2,置TIMx_SMCR存放器中的ECE=1。
5.发动计数器,置TIMx_CR1存放器中的CEN=1 计数器在每2个ETR上升沿计数一次。
在ETR的上升沿和计数器实践时钟之间的延时取决于在ETRP信号端的从头同步电路。
外部时钟形式2下的操控电路。
1.3.4捕获/比较通道。
每一个捕获/比较通道都是围绕着一个捕获/比较存放器(包含影子存放器),包含捕获的输入部分。
(数字滤波、多路复用和预分频器),和输出部分(。比较器。和输出操控)。 下面几张图是一个捕获/比较通道概览。
输入部分对相应的TIx输入信号采样,并发生一个滤波后的信号TIxF。然后,一个带极性挑选的 边际检测器发生一个信号(TIxFPx),它可以作为从形式操控器的输入触发或许作为捕获操控。该 信号经过预分频进入捕获存放器(ICxPS)。
捕获/比较通道(如:通道1输入部分)。
输出部分发生一个中心波形OCxRef(高有用)作为基准,链的结尾决议终究输出信号的极性。
捕获/比较通道1的主电路。
捕获/比较通道的输出部分(通道1)。
捕获/比较模块由一个预装载存放器和一个影子存放器组成。读写进程仅操作预装载存放器。
在捕获形式下,捕获发生在影子存放器上,然后再复制到预装载存放器中。
在比较形式下,预装载存放器的内容被复制到影子存放器中,然后影子存放器的内容和计数器进行比较。
1.3.5输入捕获形式。
在输入捕获形式下,当检测到ICx信号上相应的边缘后,计数器的当时值被锁存到捕获/比较存放 器(TIMx_CCRx)中。当捕获事情发生时,相应的CCxIF标志(TIMx_SR存放器)被置'1',假如使能 了中止或许DMA操作, 则将发生中止或许DMA操作。假如捕获事情发生时CCxIF标志现已为 高,那么重复捕获标志CCxOF(TIMx_SR存放器)被置'1'。写CCxIF=0可铲除CCxIF,或读取存 储在TIMx_CCRx存放器中的捕获数据也可铲除CCxIF。写CCxOF=0可铲除CCxOF。
以下比如阐明如安在TI1输入的上升沿时捕获计数器的值到TIMx_CCR1存放器中,进程如下:
挑选有用输入端:TIMx_CCR1有必要衔接到TI1输入,所以写入TIMx_CCR1存放器中的 CC1S=01,只需CC1S不为'00',通道被装备为输入,而且TM1_CCR1存放器变为只读。
依据输入信号的特色,装备输入滤波器为所需的带宽(即输入为TIx时,输入滤波器操控位是 TIMx_CCMRx存放器中的ICxF位)。假定输入信号在最多5个内部时钟周期的时刻内颤动, 咱们须装备滤波器的带宽善于5个时钟周期。因而咱们可以(以fDTS频率)接连采样8次,以确 认在TI1上一次实在的边缘改换,即在TIMx_CCMR1存放器中写入IC1F=0011。
挑选TI1通道的有用转化边缘,在TIMx_CCER存放器中写入CC1P=0(上升沿)。
装备输入预分频器。在本例中,咱们期望捕获发生在每一个有用的电平转化时刻,因而预分频器被制止(写TIMx_CCMR1存放器的IC1PS=00)。
设置TIMx_CCER存放器的CC1E=1,答应捕获计数器的值到捕获存放器中。
假如需求,经过设置TIMx_DIER存放器中的CC1IE位答应相关中止恳求,经过设置 TIMx_DIER存放器中的CC1DE位答应DMA恳求。
当发生一个输入捕获时:
发生有用的电平转化时,计数器的值被传送到TIMx_CCR1存放器。
CC1IF标志被设置(中止标志)。当发生至少2个接连的捕获时,而CC1IF未曾被铲除, CC1OF也被置'1'。
如设置了CC1IE位,则会发生一个中止。
如设置了CC1DE位,则还会发生一个DMA恳求。
为了处理捕获溢出,主张在读出捕获溢出标志之前读取数据,这是为了防止丢掉在读出捕获溢出标志之后和读取数据之前或许发生的捕获溢出信息。
注:设置TIMx_EGR存放器中相应的CCxG位,可以经过软件发生输入捕获中止和/或DMA恳求。
1.3.6PWM输入形式。
该形式是输入捕获形式的一个特例,除下列差异外,操作与输入捕获形式相同:
两个ICx信号被映射至同一个TIx输入。
这2个ICx信号为边缘有用,可是极性相反。
其间一个TIxFP信号被作为触发输入信号,而从形式操控器被装备成复位形式。
例如,你需求丈量输入到TI1上的PWM信号的长度(TIMx_CCR1存放器)和占空比(TIMx_CCR2 存放器),具体进程如下(取决于CK_INT的频率和预分频器的值)。
挑选TIMx_CCR1的有用输入:置TIMx_CCMR1存放器的CC1S=01(挑选TI1)。
挑选TI1FP1的有用极性(用来捕获数据到TIMx_CCR1中和铲除计数器):置CC1P=0(上升沿 有用)。
挑选TIMx_CCR2的有用输入:置TIMx_CCMR1存放器的CC2S=10(挑选TI1)。
挑选TI1FP2的有用极性(捕获数据到TIMx_CCR2):置CC2P=1(下降沿有用)。
挑选有用的触发输入信号:置TIMx_SMCR存放器中的TS=101(挑选TI1FP1)。
装备从形式操控器为复位形式:置TIMx_SMCR中的SMS=100。
使能捕获:置TIMx_CCER存放器中CC1E=1且CC2E=1。
PWM输入形式时序。
由于只需TI1FP1 和TI2FP2 连到了从形式操控器 ,所以 PWM 输入形式只能运用TIMx_CH1 /TIMx_CH2信号。
1.3.7强置输出形式。
在输出形式(TIMx_CCMRx存放器中CCxS=00)下,输出比较信号(OCxREF和相应的OCx)可以 直接由软件强置为有用或无效状况,而不依托于输出比较存放器和计数器间的比较成果。
置TIMx_CCMRx存放器中相应的OCxM=101,即可强置输出比较信号(OCxREF/OCx)为有用状 态。这样OCxREF被强置为高电平(OCxREF一直为高电平有用),一同OCx得到CCxP极性位相 反的值。
例如:CCxP=0(OCx高电平有用),则OCx被强置为高电平。
置TIMx_CCMRx存放器中的OCxM=100,可强置OCxREF信号为低。
该形式下,在TIMx_CCRx影子存放器和计数器之间的比较仍然在进行,相应的标志也会被修正。因而仍然会发生相应的中止和DMA恳求。这将会鄙人面的输出比较形式一节中介绍。
1.3.8输出比较形式。
此项功用是用来操控一个输出波形,或许指示一段给定的的时刻现已届时。当计数器与捕获/比较存放器的内容相一同,输出比较功用做如下操作:
将输出比较形式(TIMx_CCMRx存放器中的OCxM位)和输出极性(TIMx_CCER存放器中的 CCxP位)界说的值输出到对应的引脚上。在比较匹配时,输出引脚可以坚持它的电平(OCxM=000)、被设置成有用电平(OCxM=001)、被设置成无效电平(OCxM=010)或进行翻转(OCxM=011)。
设置中止状况存放器中的标志位(TIMx_SR存放器中的CCxIF位)。
若设置了相应的中止屏蔽(TIMx_DIER存放器中的CCxIE位),则发生一个中止。
若设置了相应的使能位(TIMx_DIER存放器中的CCxDE位,TIMx_CR2存放器中的CCDS位 挑选DMA恳求功用),则发生一个DMA恳求。
TIMx_CCMRx中的OCxPE位挑选TIMx_CCRx存放器是否需求运用预装载存放器。 在输出比较形式下,更新事情UEV对OCxREF和OCx输出没有影响。
同步的精度可以抵达计数器的一个计数周期。输出比较形式(在单脉冲形式下)也能用来输出一个 单脉冲。
输出比较形式的装备进程:
1.挑选计数器时钟(内部,外部,预分频器)。
2.将相应的数据写入TIMx_ARR和TIMx_CCRx存放器中。
3.假如要发生一个中止恳求和/或一个DMA恳求,设置CCxIE位和/或CCxDE位。
4.挑选输出形式,例如当计数器CNT与CCRx匹配时翻转OCx的输出引脚,CCRx预装载未 用,敞开OCx输出且高电平有用,则有必要设置OCxM='011' 、OCxPE='0' 、CCxP='0'和 CCxE='1'。
5.设置TIMx_CR1存放器的CEN位发动计数器。
TIMx_CCRx存放器可以在任何时分经过软件进行更新以操控输出波形,条件是未运用预装载寄 存器(OCxPE='0',不然TIMx_CCRx影子存放器只能在发生下一次更新事情时被更新)。下图给出了一个比如:
输出比较形式,翻转OC1。
1.3.9PWM 形式。
脉冲宽度调制形式可以发生一个由TIMx_ARR存放器确认频率、由TIMx_CCRx存放器确认占空比的信号。
在TIMx_CCMRx存放器中的OCxM位写入'110'(PWM形式1)或'111'(PWM形式2),可以独登时设 置每个OCx输出通道发生一路PWM。有必要设置TIMx_CCMRx存放器OCxPE位以使能相应的预 装载存放器,最终还要设置TIMx_CR1存放器的ARPE位,(在向上计数或中心对称形式中)使能 主动重装载的预装载存放器。
仅当发生一个更新事情的时分,预装载存放器才干被传送到影子存放器,因而在计数器开端计数之前,有必要经过设置TIMx_EGR存放器中的UG位来初始化一切的存放器。
OCx的极功用够经过软件在TIMx_CCER存放器中的CCxP位设置,它可以设置为高电平有用或 低电平有用。TIMx_CCER存放器中的CCxE位操控OCx输出使能。详见TIMx_CCERx存放器的 描绘。
在PWM形式(形式1或形式2)下,TIMx_CNT和TIMx_CCRx一直在进行比较,(依据计数器的计数 方向) 以确认是否契合TIMx_CCRx ≤ TIMx_CNT 或许TIMx_CNT ≤ TIMx_CCRx 。可是 为了与 OCREF_CLR的功用(鄙人一个PWM周期之前, ETR信号上的一个外部事情可以铲除OCxREF) 一同,OCxREF信号只能鄙人述条件下发生:
l当比较的成果改动。
l当输出比较形式(TIMx_CCMRx存放器中的OCxM位)从“冻住”(无比较,OCxM='000')切换到某个PWM形式(OCxM='110'或'111')。
这样在作业中可以经过软件强置PWM输出。
依据TIMx_CR1存放器中CMS位的状况,守时器可以发生边缘对齐的PWM信号或中心对齐的 PWM信号。
PWM 边缘对齐形式。
向上计数装备。
当TIMx_CR1存放器中的DIR位为低的时分履行向上计数。参看0节。
下面是一个PWM形式1的比如。当TIMx_CNT。
假如比较值为0,则OCxREF坚持为'0' 。 下图为TIMx_ARR=8时边缘对齐的PWM波形实例。:
边缘对齐的PWM波形(ARR=8)。
向下计数的装备。
当TIMx_CR1存放器的DIR位为高时履行向下计数。
在 PWM 形式 1 ,当 TIMx_CNT>TIMx_CCRx 时参阅信号 OCxREF 为低,否 则为高。 假如 TIMx_CCRx中的比较值大于TIMx_ARR中的主动重装载值,则OCxREF坚持为'1'。该形式下不 能发生0%的PWM波形。
PWM 中心对齐形式。
当TIMx_CR1存放器中的CMS位不为'00'时,为中心对齐形式(一切其他的装备对OCxREF/OCx 信号都有相同的效果)。依据不同的CMS位设置,比较标志可以在计数器向上计数时被置'1'、在 计数器向下计数时被置'1'、或在计数器向上和向下计数时被置'1' 。TIMx_CR1存放器中的计数方节的中心对齐形式。
下图给出了一些中心对齐的PWM波形的比如:
TIMx_ARR=8。
PWM形式1。
TIMx_CR1存放器中的CMS=01,在中心对齐形式1时,当计数器向下计数时设置比较标 志。
中心对齐的PWM波形(APR=8)。
运用中心对齐形式的提示:
进入中心对齐形式时,运用当时的向上/向下计数装备;这就意味着计数器向上仍是向下计 数取决于TIMx_CR1存放器中DIR位的当时值。此外,软件不能一同修正DIR和CMS位。
不引荐当作业在中心对齐形式时改写计数器,由于这会发生不行预知的成果。特别地:
假如写入计数器的值大于主动重加载的值(TIMx_CNT>TIMx_ARR),则方向不会被更新。例如,假如计数器正在向上计数,它就会继续向上计数。
假如将0或许TIMx_ARR的值写入计数器,方向被更新,但不发生更新事情UEV。
运用中心对齐形式最稳妥的办法,就是在发动计数器之前发生一个软件更新(设置 TIMx_EGR 位中的UG位),不要在计数进行进程中修正计数器的值。
1.3.10单脉冲形式。
单脉冲形式(OPM)是前述很多形式的一个特例。这种形式答应计数器呼应一个鼓励,并在一个程序可控的延时之后,发生一个脉宽可程序操控的脉冲。
可以经过从形式操控器发动计数器,在输出比较形式或许 PWM 形式下发生波形。设置 TIMx_CR1存放器中的OPM位将挑选单脉冲形式,这样可以让计数器主动地在发生下一个更新事情UEV时中止。
仅当比较值与计数器的初始值不一同,才干发生一个脉冲。发动之前(当守时器正在等候触发), 有必要如下装备:
向上计数办法:CNT。 < CCRx ≤ ARR (特别地,0 < CCRx),
向下计数办法:CNT >CCRx。
单脉冲形式的比如。
例如,你需求在从TI2输入脚上检测到一个上升沿开端,推迟tDELAY之后,在OC1上发生一个长。
度为tPULSE 的正脉冲。
假定TI2FP2作为触发1:。
置TIMx_CCMR1存放器中的CC2S='01',把TI2FP2映像到TI2。
置TIMx_CCER存放器中的CC2P='0',使TI2FP2可以检测上升沿。
置TIMx_SMCR存放器中的TS='110' ,TI2FP2作为从形式操控器的触发(TRGI)。
置TIMx_SMCR存放器中的SMS='110'(触发形式),TI2FP2被用来发动计数器。 OPM波形由写入比较存放器的数值决议(要考虑时钟频率和计数器预分频器)。
tDELAY 由写入TIMx_CCR1存放器中的值界说。
tPULSE 由主动装载值和比较值之间的差值界说(TIMx_ARR - TIMx_CCR1)。
假定当发生比较匹配时要发生从'0'到'1'的波形,当计数器抵达预装载值时要发生一个从'1' 到'0'的波形;首要要置TIMx_CCMR1存放器的OC1M='111',进入PWM形式2;依据需求有 挑选地使能预装载存放器:置TIMx_CCMR1中的OC1PE='1'和TIMx_CR1存放器中的ARPE;然后在TIMx_CCR1存放器中填写比较值,在TIMx_ARR存放器中填写主动装载值,修正UG位来发生一个更新事情,然后等候在TI2上的一个外部触发事情。本例中, CC1P='0'。
在这个比如中,TIMx_CR1存放器中的DIR和CMS位应该置低。
由于只需一个脉冲,所以有必要设置TIMx_CR1存放器中的OPM='1',鄙人一个更新事情(当计数 器从主动装载值翻转到0)时中止计数。
特殊状况:OCx快速使能:
在单脉冲形式下,在TIx输入脚的边缘检测逻辑设置CEN位以发动计数器。然后计数器和比较值 间的比较操作发生了输出的转化。可是这些操作需求必定的时钟周期,因而它约束了可得到的最小延时tDELAY。
假如要以最小延时输出波形,可以设置TIMx_CCMRx存放器中的OCxFE位;此刻OCxREF(和 OCx)被强制呼应鼓励而不再依托比较的成果,输出的波形与比较匹配时的波形相同。OCxFE只 在通道装备为PWM1和PWM2形式时起效果。
1.3.11在外部事情时铲除OCxREF信号。
关于一个给定的通道,设置TIMx_CCMRx存放器中对应的OCxCE位为'1',可以用ET。RF。输入端 的高电平把OCxREF信号拉低,OCxREF信号将坚持为低直到发生下一次的更新事情UEV。
该功用只能用于输出比较和PWM形式,而不能用于强置形式。
例如,OCxREF信号可以联到一个比较器的输出,用于操控电流。这时,ETR有必要装备如下:
1.外部触发预分频器有必要处于封闭:TIMx_SMCR存放器中的ETPS[1:0]='00'。
2.有必要制止外部时钟形式2:TIMx_SMCR存放器中的ECE='0'。
3.外部触发极性(ETP)和外部触发滤波器(ETF)可以依据需求装备。
下图显现了当ETRF输入变为高时,对应不同OCxCE的值,OCxREF信号的动作。在这个比如 中,守时器TIMx被置于PWM形式。
铲除TIMx的OCxREF。
1.3.12编码器接口形式。
挑选编码器接口形式的办法是:假如计数器只在TI2的边缘计数,则置TIMx_SMCR存放器中的 SMS=001;假如只在TI1边缘计数,则置SMS=010;假如计数器一同在TI1和TI2边缘计数,则 置SMS=011。
经过设置TIMx_CCER存放器中的CC1P和CC2P位,可以挑选TI1和TI2极性;假如需求,还可以 对输入滤波器编程。
两个输入TI1和TI2被用来作为增量编码器的接口。参看表75,假定计数器现已发动(TIMx_CR1 存放器中的CEN='1'),计数器由每次在TI1FP1或TI2FP2上的有用跳变驱动。TI1FP1和TI2FP2 是TI1和TI2在经过输入滤波器和极性操控后的信号; 假如没有滤波和变相, 则TI1FP1=TI1 , TI2FP2=TI2。依据两个输入信号的跳变次序,发生了计数脉冲和方向信号。依据两个输入信号的跳变次序,计数器向上或向下计数,一同硬件对TIMx_CR1存放器的DIR位进行相应的设置。 不管计数器是依托TI1计数、依托TI2计数或许一同依托TI1和TI2计数。在任一输入端(TI1或许 TI2)的跳变都会从头核算DIR位。
编码器接口形式基本上相当于运用了一个带有方向挑选的外部时钟。这意味着计数器只在0到 TIMx_ARR存放器的主动装载值之间接连计数(依据方向,或是0到ARR计数,或是ARR到0计 数)。所以在开端计数之前有必要装备TIMx_ARR;相同,捕获器、比较器、预分频器、触发输出特性等仍作业如常。
在这个形式下,计数器依照增量编码器的速度和方向被主动的修正,因而计数器的内容一直指示着编码器的方位。计数方向与相连的传感器旋转的方向对应。下表列出了一切或许的组合,假定TI1和TI2不一同改换。
表75 计数方向与编码器信号的联系。
有用边缘。 | 相对信号的电平 (TI1FP1对应TI2, TI2FP2对应TI1)。 | TI1FP1信号。 | TI2FP2信号。 | ||
上升。 | 下降。 | 上升。 | 下降。 | ||
仅在TI1计数。 | 高。 | 向下计数。 | 向上计数。 | 不计数。 | 不计数。 |
低。 | 向上计数。 | 向下计数。 | 不计数。 | 不计数。 | |
仅在TI2计数。 | 高。 | 不计数。 | 不计数。 | 向上计数。 | 向下计数。 |
低。 | 不计数。 | 不计数。 | 向下计数。 | 向上计数。 | |
在TI1和TI2上计数。 | 高。 | 向下计数。 | 向上计数。 | 向上计数。 | 向下计数。 |
低。 | 向上计数。 | 向下计数。 | 向下计数。 | 向上计数。 |
一个外部的增量编码器可以直接与。MCU。衔接而不需求外部接口逻辑。可是, 一般会运用比较器 将编码器的差动输出转化到。数字信号。,这大大增加了抗噪声搅扰才能。编码器输出的第三个信 号标明机械零点,可以把它衔接到一个外部中止输入并触发一个计数器复位。
下图是一个计数器操作的实例,显现了计数信号的发生和方向操控。它还显现了当挑选了双边缘时,输入颤动是怎么被按捺的;颤动或许会在传感器的方位接近一个转化点时发生。在这个比如中,咱们假定装备如下:
CC1S='01' (TIMx_CCMR1存放器,IC1FP1映射到TI1)。
CC2S='01' (TIMx_CCMR2存放器,IC2FP2映射到TI2)。
CC1P='0' (TIMx_CCER存放器,IC1FP1不反相,IC1FP1=TI1)。
CC2P='0' (TIMx_CCER存放器,IC2FP2不反相,IC2FP2=TI2)。
SMS='011' (TIMx_SMCR存放器,一切的输入均在上升沿和下降沿有用).。
CEN='1' (TIMx_CR1存放器,计数器使能)。
编码器形式下的计数器操作实例。
下图为当IC1FP1极性反相时计数器的操作实例(CC1P='1',其他装备与上例相同)。
IC1FP1反相的编码器接口形式实例。
当守时器装备成编码器接口形式时,供给传感器当时方位的信息。运用第二个装备在捕获形式的守时器,可以丈量两个编码器事情的距离,取得动态的信息(速度,加速度,减速度)。指示机 械零点的编码器输出可被用做此意图。依据两个事情间的距离,可以依照固定的时刻读出计数器。假如或许的话,你可以把计数器的值锁存到第三个输入捕获存放器(捕获信号有必要是周期的 而且可以由另一个守时器发生);也可以经过一个由。实时时钟。发生的DMA恳求来读取它的值。
1.3.13守时器输入异或功用。
TIMx_CR2存放器中的TI1S位,答应通道1的输入滤波器衔接到一个异或门的输出端,异或门的 3个输入端为TIMx_CH1、TIMx_CH2和TIMx_CH3。
异或输出可以被用于一切守时器的输入功用,如触发或输入捕获。
1.3.14守时器和外部触发的同步。
TIMx守时器可以在多种形式下和一个外部的触发同步:复位形式、门控形式和触发形式。
从形式:复位形式。
在发生一个触发输入事情时,计数器和它的预分频器可以从头被初始化;一同,假如TIMx_CR1 存放器的URS位为低,还会发生一个更新事情UEV;然后一切的预装载存放器(TIMx_ARR , TIMx_CCRx)都会被更新。
鄙人面的比如中,TI1输入端的上升沿导致向上计数器被清零:
装备通道1以检测TI1的上升沿。装备输入滤波器的带宽(在本例中,不需求任何滤波器,因 此坚持IC1F=0000)。触发操作中不运用捕获预分频器,所以不需求装备它。CC1S位只选 择输入捕获源,即TIMx_CCMR1存放器中CC1S=01。置TIMx_CCER存放器中CC1P=0以 确认极性(只检测上升沿)。
置TIMx_SMCR存放器中SMS=100,装备守时器为复位形式;置TIMx_SMCR存放器中 TS=101,挑选TI1作为输入源。
置TIMx_CR1存放器中CEN=1,发动计数器。
计数器开端依据内部时钟计数,然后正常作业直到TI1呈现一个上升沿;此刻,计数器被清零然 后从0从头开端计数。一同,触发标志(TIMx_SR存放器中的TIF位)被设置,依据TIMx_DIER寄 存器中TIE(中止使能)位和TDE(DMA使能)位的设置,发生一个中止恳求或一个DMA恳求。
下图显现当主动重装载存放器TIMx_ARR=0x36时的动作。在TI1上升沿和计数器的实践复位之 间的延时,取决于TI1输入端的重同步电路。
复位形式下的操控电路。
从形式:门控形式。
依照选中的输入端电平使能计数器。
在如下的比如中,计数器只在TI1为低时向上计数:
装备通道1以检测TI1上的低电平。装备输入滤波器带宽(本例中,不需求滤波,所以坚持 IC1F=0000)。触发操作中不运用捕获预分频器,所以不需求装备。CC1S位用于挑选输入 捕获源,置TIMx_CCMR1存放器中CC1S=01。置TIMx_CCER存放器中CC1P=1以确认极 性(只检测低电平)。
置TIMx_SMCR存放器中SMS=101,装备守时器为门控形式;置TIMx_SMCR存放器中 TS=101,挑选TI1作为输入源。
置TIMx_CR1存放器中CEN=1,发动计数器。在门控形式下,假如CEN=0,则计数器不能 发动,不管触发输入电平怎么。
只需TI1为低,计数器开端依据内部时钟计数,在TI1变高时中止计数。当计数器开端或中止时 都设置TIMx_SR中的TIF标置。
TI1上升沿和计数器实践中止之间的延时,取决于TI1输入端的重同步电路。
门控形式下的操控电路。
从形式:触发形式。
输入端上选中的事情使能计数器。
鄙人面的比如中,计数器在TI2输入的上升沿开端向上计数:
装备通道2检测TI2的上升沿。装备输入滤波器带宽(本例中,不需求任何滤波器,坚持IC2F=0000)。触发操作中不运用捕获预分频器,不需求装备。CC2S位只用于挑选输入捕 获源,置TIMx_CCMR1存放器中CC2S=01。置TIMx_CCER存放器中CC2P=1以确认极性 (只检测低电平)。
置TIMx_SMCR存放器中SMS=110,装备守时器为触发形式;置TIMx_SMCR存放器中 TS=110,挑选TI2作为输入源。
当TI2呈现一个上升沿时,计数器开端在内部时钟驱动下计数,一同设置TIF标志。
TI2上升沿和计数器发动计数之间的延时,取决于TI2输入端的重同步电路。
触发器形式下的操控电路。
从形式:外部时钟形式2 + 触发形式。
外部时钟形式2可以与另一种从形式(外部时钟形式1和编码器形式在外)一同运用。这时,ETR信 号被用作外部时钟的输入,在复位形式、门控形式或触发形式时可以挑选另一个输入作为触发输入。不主张运用TIMx_SMCR存放器的TS位挑选ETR作为TRGI。
下面的比如中,TI1上呈现一个上升沿之后,计数器即在ETR的每一个上升沿向上计数一次:
经过TIMx_SMCR存放器装备外部触发输入电路:
ETF=0000:没有滤波。
ETPS=00:不必预分频器。
ETP=0:检测ETR的上升沿,置ECE=1使能外部时钟形式2。
按如下装备通道1,检测TI的上升沿:
IC1F=0000:没有滤波。
触发操作中不运用捕获预分频器,不需求装备。
置TIMx_CCMR1存放器中CC1S=01,挑选输入捕获源。
置TIMx_CCER存放器中CC1P=0以确认极性(只检测上升沿)。
置TIMx_SMCR存放器中SMS=110,装备守时器为触发形式。置TIMx_SMCR存放器中 TS=101,挑选TI1作为输入源。
当TI1上呈现一个上升沿时,TIF标志被设置,计数器开端在ETR的上升沿计数。
ETR信号的上升沿和计数器实践复位间的延时,取决于ETRP输入端的重同步电路。
外部时钟形式2+触发形式下的操控电路。
1.3.15守时器同步。
一切TIMx守时器在内部相连,用于守时器同步或链接。当一个守时器处于主形式时,它可以对另一个处于从形式的守时器的计数器进行复位、发动、中止或供给时钟等操作。
下图显现了触发挑选和主形式挑选模块的概略。
运用一个守时器作为另一个守时器的预分频器。
主/从守时器的比如。
如:可以装备守时器1作为守时器2的预分频器。参阅上图,进行下述操作:
装备守时器1为主形式,它可以在每一个更新事情UEV时输出一个周期性的触发信号。在TIM1_CR2存放器的MMS='010'时,每逢发生一个更新事情时在TRGO1上输出一个上升沿信号。
衔接守时器1的TRGO1输出至守时器2,设置TIM2_SMCR存放器的TS='000',装备守时器2为运用ITR1作为内部触发的从形式。
然后把从形式操控器置于外部时钟形式1(TIM2_SMCR存放器的SMS=111);这样守时器2即可由守时器1周期性的上升沿(即守时器1的计数器溢出)信号驱动。
最终,有必要设置相应(TIMx_CR1存放器)的CEN位别离发动两个守时器。
注:假如OCx已被选中为守时器1的触发输出(MMS=1xx),它的上升沿用于驱动守时器2的计数器。
运用一个守时器使能另一个守时器。
在这个比如中,守时器2的使能由守时器1的输出比较操控。只当守时器1的OC1REF为高时,守时器2才对分频后的内部时钟计数。两个守时器的时钟频率都是由预分频器对CK_INT除以3(fCK_CNT=fCK_INT/3)得到。
装备守时器1为主形式,送出它的输出比较参阅信号(OC1REF)为触发输出(TIM1_CR2存放器的MMS=100)。
装备守时器1的OC1REF波形(TIM1_CCMR1存放器)。
装备守时器2从守时器1取得输入触发(TIM2_SMCR存放器的TS=000)。
装备守时器2为门控形式(TIM2_SMCR存放器的SMS=101)。
置TIM2_CR1存放器的CEN=1以使能守时器2。
置TIM1_CR1存放器的CEN=1以发动守时器1。
注:守时器2的时钟不与守时器1的时钟同步,这个形式只影响守时器2计数器的使能信号。
守时器1的OC1REF操控守时器2。
在这个比如中,在守时器2发动之前,它们的计数器和预分频器未被初始化,因而它们从当时的数值开端计数。可以在发动守时器1之前复位2个守时器,使它们从给定的数值开端,即在守时器计数器中写入需求的恣意数值。写TIMx_EGR存放器的UG位即可复位守时器。
鄙人一个比如中,需求同步守时器1和守时器2。守时器1是主形式并从0开端,守时器2是从形式并从0xE7开端;2个守时器的预分频器系数相同。写'0'到TIM1_CR1的CEN位将制止守时器1,守时器2随即中止。
装备守时器1为主形式,送出输出比较1参阅信号(OC1REF)做为触发输出(TIM1_CR2存放器的MMS=100)。
装备守时器1的OC1REF波形(TIM1_CCMR1存放器)。
装备守时器2从守时器1取得输入触发(TIM2_SMCR存放器的TS=000)。
装备守时器2为门控形式(TIM2_SMCR存放器的SMS=101)。
置TIM1_EGR存放器的UG='1',复位守时器1。
置TIM2_EGR存放器的UG='1',复位守时器2。
写'0xE7'至守时器2的计数器(TIM2_CNTL),初始化它为0xE7。
置TIM2_CR1存放器的CEN='1'以使能守时器2。
置TIM1_CR1存放器的CEN='1'以发动守时器1。
置TIM1_CR1存放器的CEN='0'以中止守时器1。
经过使能守时器1可以操控守时器2。
运用一个守时器去发动另一个守时器。
在这个比如中,运用守时器1的更新事情使能守时器2。一旦守时器1发生更新事情,守时器2即从它当时的数值(可以对错0)依照分频的内部时钟开端计数。在收到触发信号时,守时器2的CEN位被主动地置'1',一同计数器开端计数直到写'0'到TIM2_CR1存放器的CEN位。两个守时器的时钟频率都是由预分频器对CK_INT除以3(fCK_CNT=fCK_INT/3)。
装备守时器1为主形式,送出它的更新事情(UEV)做为触发输出(TIM1_CR2存放器的MMS=010)。
装备守时器1的周期(TIM1_ARR存放器)。
装备守时器2从守时器1取得输入触发(TIM2_SMCR存放器的TS=000)。
装备守时器2为触发形式(TIM2_SMCR存放器的SMS=110)。
置TIM1_CR1存放器的CEN=1以发动守时器1。
运用守时器1的更新触发守时器2。
在上一个比如中,可以在发动计数之前初始化两个计数器。下图显现在与0相同装备状况下,运用触发形式而不是门控形式(TIM2_SMCR存放器的SMS=110)的动作。
运用守时器1的使能触发守时器2。
运用一个守时器作为另一个的预分频器。
这个比如运用守时器1作为守时器2的预分频器。装备如下:
装备守时器1为主形式,送出它的更新事情UEV做为触发输出(TIM1_CR2存放器的MMS='010')。然后每次计数器溢出时输出一个周期信号。
装备守时器1的周期(TIM1_ARR存放器)。
装备守时器2从守时器1取得输入触发(TIM2_SMCR存放器的TS=000)。
装备守时器2运用外部时钟形式(TIM2_SMCR存放器的SMS=111)。
置TIM1_CR2存放器的CEN=1以发动守时器2。
置TIM1_CR1存放器的CEN=1以发动守时器1。
运用一个外部触发同步地发动2个守时器。
这个比如中当守时器1的TI1输入上升时使能守时器1,使能守时器1的一同使能守时器2,为保证计数器的对齐,守时器1有必要装备为主/从形式(对应TI1为从,对应守时器2为主):
装备守时器1为主形式,送出它的使能做为触发输出(TIM1_CR2存放器的MMS='001')。
装备守时器1为从形式,从TI1取得输入触发(TIM1_SMCR存放器的TS='100')。
装备守时器1为触发形式(TIM1_SMCR存放器的SMS='110')。
装备守时器1为主/从形式,TIM1_SMCR存放器的MSM='1'。
装备守时器2从守时器1取得输入触发(TIM2_SMCR存放器的TS=000)。
装备守时器2为触发形式(TIM2_SMCR存放器的SMS='110')。
当守时器1的TI1上呈现一个上升沿时,两个守时器同步地依照内部时钟开端计数,两个TIF标志也一同被设置。
注:在这个比如中,在发动之前两个守时器都被初始化(设置相应的UG位),两个计数器都从0开端,但可以经过写入恣意一个计数器存放器(TIMx_CNT)在守时器间刺进一个偏移。下图中能看到主/从形式下在守时器1的CNT_EN和CK_PSC之间有个推迟。
运用守时器1的TI1输入触发守时器1和守时器2。
1.3.16调试形式。
当。微操控器。进入调试形式(Cortex-M3中心中止),依据DBG模块中DBG_TIMx_STOP的设置,TIMx计数器或许继续正常操作,或许中止。详见后边的章节:支撑守时器、。看门狗。、bxCAN和I2C的调试。
2 程序设计。
2.1 TIM_B。asic。例程。
此例程的首要效果是进行通用守时器的测验。经过装备守时器 TIM3,使其在计数溢出时发生更新中止,在中止服务函数中打印中止服务函数名,以此来验证守时器的中止功用是否正常作业。
体系上电或复位后,程序开端履行。首要会经过串口输出体系时钟频率信息和测验提示信息,之后,守时器 TIM3 开端计数。当计数器的值抵达主动重载值 9999 时,会发生更新中止,进入中止服务函数 TIM3_IRQHandler。在中止服务函数中,会铲除中止标志位并经过串口输出 TIM3_IRQHandler。
尔后,每隔一段时刻(由守时器的预分频器和主动重载值决议),守时器就会发生一次更新中止,串口会周期性地输出 TIM3_IRQHandler,标明守时器的中止功用正常作业。
2.2 TIM_CalibrationLsi例程。
此例程的首要效果是经过守时器 TIM5 的输入捕获功用来丈量内部低速。振荡器。(LSI)信号的周期和频率。LSI 一般用于实时时钟(RTC)等对时钟精度要求不高的场合,经过丈量其周期和频率,可以对 LSI 的功用进行评价。
1.时钟装备。
void RCC_ClkConfiguration(void){ RCC_DeInit(); // 复位RCC时钟装备到默许状况 // 装备外部高速时钟(HSE) RCC_HSEConfig(RCC_HSE_ON); // 使能HSE while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); // 等候HSE安排妥当 // 装备锁相环(PLL):HSE×9=72MHz RCC_PLLCmd(DISABLE); // 先禁用PLL RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); // 设置PLL输入源为HSE,倍频系数9 RCC_PLLCmd(ENABLE); // 使能PLL while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); // 等候PLL安排妥当 // 设置体系时钟源为PLL输出 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // 挑选PLL作为体系时钟源 // 装备总线时钟分频 RCC_HCLKConfig(RCC_SYSCLK_Div1); // AHB总线时钟 = SYSCLK/1 (72MHz) RCC_PCLK1Config(RCC_HCLK_Div2); // APB1总线时钟 = HCLK/2 (36MHz) RCC_PCLK2Config(RCC_HCLK_Div1); // APB2总线时钟 = HCLK/1 (72MHz) // 使能内部低速时钟(LSI)和高速时钟(HSI) RCC_LSICmd(ENABLE); // 使能LSI(约40kHz,用于看门狗等) while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET); // 等候LSI安排妥当 RCC_HSICmd(ENABLE); // 使能HSI(16MHz内部RC时钟) while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); // 等候HSI安排妥当}。
外部高速时钟(HSE):使能 HSE 并等候其安排妥当,为后续锁相环(PLL)供给安稳的输入时钟源。
锁相环(PLL):以 HSE 为输入源,设置倍频系数为 9,使能 PLL 并等候其安排妥当,得到更高频率的时钟信号。
体系时钟源:将体系时钟源设置为 PLL 输出,进步体系全体作业速度。
总线时钟分频:对 AHB、APB1 和 APB2 总线时钟进行合理分频,满意不同外设的时钟需求。
内部低速时钟(LSI)和高速时钟(HSI):使能 LSI 和 HSI 并等候它们安排妥当,其间 LSI 用于后续丈量。
2.初始化操作。
延时函数:调用 delay_init() 初始化延时函数,为后续或许的延时操作做预备。
串口。通讯。:调用。 UART。_Configuration(115200) 装备串口通讯,波特率为 115200,用于输出体系时钟信息、测验提示以及丈量成果。
获取时钟频率:运用 RCC_GetClocksFreq(&clocks) 获取体系时钟频率信息,为守时器装备供给参数。
3. 守时器装备。
时钟使能:使能 TIM5 和复用功用(AFIO)的时钟,保证 TIM5 可以正常作业,并答应对其引脚进行重映射。
引脚重映射:将 TIM5 的通道 4 重映射到 LSI 信号,以便对 LSI 信号进行捕获。
时基单元初始化:设置 TIM5 的主动重载值为 0xFFFF,预分频器值依据 PCLK1 频率核算得出,时钟分割为 1,计数形式为向上计数,确认守时器的计数规模和计数速度。
输入捕获装备:将 TIM5 的通道 4 装备为输入捕获形式,选用上升沿捕获,直接映守时器溢出和捕获到信号边缘时可以及时呼应。
守时器使能:使能 TIM5,开端对 LSI 信号进行计数和捕获。
4.主循环处理。
int main(void){ // ...(前半部分初始化代码略) TIM_Configuration(); // 初始化TIM5 while (1) { if (TIM5_CAPTURE_STA & 0X80) // 检测捕获完结标志(最高位为1) { // 核算总时刻(考虑守时器溢出次数)。 te。mp = (TIM5_CAPTURE_STA & 0X3F) * 65536 + TIM5_CAPTURE_VAL; // 溢出次数×65536 + 捕获值 printf("LSI The period is:%d usrn", temp); // 输出周期(微秒) printf("LSI The frequency is:%f Hzrn", (float)(1000000 / temp)); // 核算频率并输出 TIM5_CAPTURE_STA = 0; // 清零标志,预备下一次捕获 } }}。
运用TI4,不分频且不进行滤波,以精确捕获 LSI 信号的上升沿和下降沿。
中止装备:装备 TIM5 的中止优先级,使能更新中止和通道 4 捕获中止,保证在。
在主循环中,继续查看 TIM5_CAPTURE_STA 的最高位。若该位为 1,标明成功捕获到一个完好的 LSI 信号周期。此刻,核算该周期的总时刻(考虑守时器溢出状况),并经过串口输出 LSI 的周期和频率。最终,将 TIM5_CAPTURE_STA 清零,预备下一次捕获。
5. 中止服务函数处理。
当 TIM5 发生更新中止或通道 4 捕获中止时,进入中止服务函数:
若还未成功捕获到一个完好的周期:
关于更新中止,若已捕获到上升沿,则记载守时器溢出次数。
关于通道 4 捕获中止:
若已捕获到上升沿,此刻捕获到下降沿,符号成功捕获到一个完好的高脉冲宽度,并记载捕获值。
若还未开端捕获,此刻捕获到上升沿,清零相关变量,设置计数器为 0,并符号捕获到上升沿。
最终,铲除更新中止和通道 4 捕获中止标志位,为下一次中止做好预备。
3 下载验证。
3.1 TIM_Basic例程。
烧录完结后,硬件发动,串口输出体系时钟频率信息及“TIM Basic Test.”提示,守时器TIM3装备为向上计数形式,计数周期达9999时触发更新中止,在中止服务函数中查看并铲除中止标志,经过串口输出函数名`TIM3_IRQHandler,之后主函数进入无限循环继续等候并呼应守时器中止。
3.2 TIM_CalibrationLsi例程。
代码烧录后,体系先对时钟进行装备,发动串口并输出体系时钟频率信息及“TIM5 Calibration LSI Test.”提示,接着装备TIM5守时器用于丈量低速内部时钟(LSI),当TIM5捕获到LSI信号的上升沿和下降沿后,主循环会核算并经过串口输出LSI的周期和频率,期间继续等候新的捕获事情。
WIZnet 是一家无晶圆厂。半导体。公司,成立于 1998 年。产品包含互联网。处理器。iMCU™,它选用 TOE(TCP/IP 卸载引擎)技能,依据共同的专利全硬连线 TCP/IP。iMCU™ 面向各种运用中的。嵌入式。互联网设备。
WIZnet 在全球具有 70 多家分销商,在香港、韩国、美国设有办事处,供给技能支撑和产品营销。
香港办事处办理的区域包含:澳大利亚、印度、土耳其、亚洲(韩国和日本在外)。
审阅修改 黄宇。
内容来源:https://fastrans.nhobethoi.com/app-1/trực tiếp seagame 32,https://chatbotjud-hml.saude.mg.gov.br/app-1/celebrity-hunter
本文地址:http://w.21nx.com/article/66697428-6f0899985.html
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。