历史上的今天
返回首页

历史上的今天

今天是:2024年09月10日(星期二)

正在发生

2019年09月10日 | 正点原子战舰第32讲 定时器中断实验

2019-09-10 来源:eefocus

定时中断

定时框图

首先选择定时器的时钟 我们选择默认的内部时钟, 产生CK_PSC,然后配置时基电路,时基电路有预分频系数配置,计数器,重装载值的配置然后比如说,我们采用向上计数,那么定时器会从0计数到 自动装载值,这个时候如果开启了中断那么他们产生一个中断。去执行中断服务函数,然后又从0开始往上计数,这就是向上计数。

通常情况下都是选择内部时钟 这个寄存器在中文参考手册14.4.3 TIMX_SMCR 的最低位默认为000,是以内部时钟来驱动。

上图为内部时钟的来源示意图 它是由 AHB 经过APB1 的预分频然后给定时器和通用定时器来用。

APB1的时钟是由 AHB经过预分频得到的,定时器的 CK_INT时钟是由APB1分频后得到的,如果APB1的分频系数是1,则APB1=CK_INT,否则CK_INT=APB1时钟*APB1的分频系数。


因为我们使用的是内部时钟所以,F(CK_PSC)=CK_INT,然后经过一个分频  /n(这个值实际上是由CK_PSC这个寄存器决定的),得到CK_CNT,我们利用 Systeminit函数进行初始化,由上图可以知道AHB=72M  APB1=32M 所以我们可以知道 APB1是2分频,所以通用定时器时钟 CK_INT=2*36M=72M。


然后介绍一下计数器的模式,他有向上向下 和中央对齐模式。计数到溢出值,如果开启中断就会产生中断。


这里利用 向上计数模式模式讲解一下这个过程,这


1.里的话我们的 时钟分频因子为1 ,也就是说APB1的分频系数为1,


2定时器要使能,


3计数器寄存器 储存我们的定时器重装载值,也就是说当我们计数到36以后就会有一个溢出,溢出就会有一个更新事件.如果我们会有一个更新中断标志,使能了中断就执行 中断服务函数。


上图是一个定时器中断相关的寄存器 是一个16位的寄存器,是计数器的当前值


上图是预分频寄存器,也是一个16位的寄存器


CK_CNT=Fck_psc / (PSC[15:0]+1)           PSC[15:0]+1=N   (这里的N,就是上图中的那个N)


上面就是一个自动重装载寄存器。他也是一个16位的寄存器


控制寄存器,我们主要用到了她的位4和位0


位4  确定我们的计数方向


位0 使能计数器

还要用到中断,所以我们要使能相应的中断,这里我们使能更新中断。


定时器参数配置函数  它用来配置


预分频系数


计数模式  


自动装载值


ClockDivision 在输入捕获里面用到


RepetitionCounter 高级定时器用。


上面这些设置在 TIM_TimeBaseInit()函数当中。


然后就有定时器使能函数,他操作的就是的位0

然后就是定时器 中断使能函数 配置的就是这使能更新中断位0

然后就是一些状态位的获取

上图为定时器中断配置的一般步骤。

我们向上计数,他从0计数到自动装载值,所以这个时间的长短是由两个 参数决定的,一个是自动重装载值,时另个一是定时器的钟频率(Tclk)它是由APB1进行倍频得到的 ,预分频系数(PSC+1)与 Tclk相除的倒数 就是定时器的周期。那么ARR+1就是 定时器走过的周期的个数。


因为我们这里用的是系统时钟72M, 也就说定时器的时钟频率就是72M(Tlck=72),PSC+1(相当于Fck_psc)。


那么要计时500ms的话,要将 ARR设置成  (4999+1)X(7199+1)M/72。


下面开始进行代码编写 在编写中断优先级函数时先进中断优先级分组才行。


这样下面的代码功能就是让  LED每500ms翻转一次。


通用与高级定时器既可以向上计数也可以向下计数,基本定时器的时钟来自PCLK1 为72M,,但是这里PCLK1的时钟为36M.


这里是如何得到72M的时钟呢?  我们这里要看系统那个框架,如下图这里说  如果APB1的预分频系数=1,则时钟频率不变,但是这里AHB由72M变成了 APB1的36M进行了2分频,所以定时器的时钟应该X2,也就是36X2=72M

高级定时器 1和8的时钟是72M,


上图为定时器的功能框图


与分频器  psc   计数器cnt   自动重装载寄存器 ARR

计数器要计数必须有时钟,这个时钟由CK_CNT提供,每一个脉冲计数器加一,CK_CNT是由CK_PSC经过这个预分频器得到的,CK_PSC 是内部时钟是72M,公式为:


计数器的时钟=   72M/(psc+1)  ,计数器是16位的,最大能记到65535,满了之后他会产生中断,ARR表示计数器能够计数到的最大数值,如果说我们配置ARR=1000,那么就表示计数器从0开始计数到1000的时候他就产生中断,中断之后计数器会清零,然后从新从0开始计数, 如果我们要计算  计数0-1000所用时间,也就是中断溢出时间的话就用  


计数器周期=(psc+1)/72000000  ,然后再用  计数器周期* (ARR+1)=计数器计数到ARR所用时间。


这里计数器计数10000次/s  也就是  10次/ms   0.01 次/us  1次=0.1ms   


推荐阅读

史海拾趣

Exar公司的发展小趣事

Exar公司通过收购和兼并多家公司,实现了技术融合和产品线拓展。其中,Neterion和Hifn的收购是Exar发展历程中的重要里程碑。Neterion在万兆以太网数据传输技术和虚拟化IO技术方面处于领先地位,而Hifn则在数据精简、加密、压缩技术方面拥有领先技术。Exar将这两家公司的技术融合在一起,推出了一系列高性能的数据传输和存储产品,进一步巩固了其在行业中的领先地位。

Coleman Cable Inc公司的发展小趣事

品质一直是Coleman Cable的生命线。公司建立了严格的质量控制体系,从原材料采购、生产过程到成品检验,每一个环节都严格把关。这种对品质的执着追求,使得Coleman Cable的产品在市场上享有良好的声誉。同时,公司还积极听取客户反馈,不断改进产品和服务,赢得了客户的信赖和忠诚。

Electroswitch公司的发展小趣事

Electroswitch Electronics Products(以下简称“Electroswitch”)成立于1986年,是Electro Switch Corp的一个子公司,后者早在1946年就已创立。在创立之初,Electroswitch就致力于设计和制造高品质的开关产品,以满足电子应用领域的各种需求。通过不断的技术创新和产品优化,Electroswitch逐渐在电子行业中树立了良好的声誉。

DEVCON公司的发展小趣事

在竞争激烈的电子行业中,提供优质的服务是赢得客户信任的关键。DEVCON公司深知这一点,因此不断创新服务模式,提升服务质量。公司建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。同时,公司还积极开展培训活动,提升员工的技能水平和服务意识。这些创新举措赢得了客户的广泛赞誉和信赖,为DEVCON公司的稳定发展提供了有力保障。

Bussmann (Eaton)公司的发展小趣事

1985年,Cooper工业(后更名为库柏工业)收购了Bussmann公司,并成立了新的事业部——“Cooper Bussmann熔断器”。这一收购为Bussmann带来了更多的资源和市场机会,使其能够进一步扩大生产规模,提升产品质量,并加强在全球市场的布局。同时,Cooper工业的支持也帮助Bussmann巩固了在电路保护领域的领先地位,并逐渐将其打造成为熔断器电路保护及相关配件的最知名品牌。

GTE Microcircuits公司的发展小趣事
故障排查通常从检查电源开始,确认电源电压和电流是否正常。然后逐步检查各级放大器的输入输出信号,使用示波器或万用表等工具观察信号波形和幅值是否正常。此外,还可以利用替换法来排除故障元件。

问答坊 | AI 解惑

求助用89C2051、24C02设计程序。

用89C2051、24C02设计程序,达到下列功能:(最好能用C51语言设计) 89S2051接受两个按键的控制信号进行增减计数,并在数码管显示0、1、2、3、4、5、6、7、8、9、A、B、C|、D、E、F共16种状态。 同时输出控制信号0~16的二进制步进数值(D1~D4)给 ...…

查看全部问答>

VxWorks5.4->6.5移植--ifLib

目前在做VxWorks的应用程序代码移植,从5.4到6.5,在5.4的代码使用了ifLib库里的函数,如ifunit()、ifAddrGet()等;而在VxWorks6.5中,ifLib库已经没用,请问是用别的库来代替?若是,可否有针对性的对ifunit()做个移植的解释?谢谢!…

查看全部问答>

WINCE字体的问题!

请问:修改WINCE的字体变使它变小后,窗口上文字又显示不清晰!有什么好办法解决呀!谢谢了!…

查看全部问答>

C#写的MMI程序不能在CE里运行?

C#写的MMI程序不能在CE里运行。在XP下双击该程序,运行正常,可拷到CE下却不能运行,什么也不提示。可是在.net studio中下载到CE中,却可以调试并正常显示。 请问,是不是PB生成bin时,什么组建没加进去? 其中,.net compact framework1.0已经 ...…

查看全部问答>

请教wince下不能打开ASP文件问题

在WINCE6.0上使用附带的WEB服务器,能够访问htm文件。但是不能打开ASP文件。错误是501/505。不明白是怎么回事。 望有经验者指导一下。…

查看全部问答>

求单片机控制程序源代码

各位大侠帮忙啊~ 求单片机控制程序源代码,单片机控制状态的转移  就是实现标签和阅读器的控制 希望做过有经验的 帮帮忙啊  感谢感谢…

查看全部问答>

自动控制原理

有没有对自动控制原理感兴趣的大师啊,交流下.…

查看全部问答>

如何将wince应用程序下载到wince平台

如何将一个wince应用程序通过pc机下载到wince平台中,通自已写的开发的程序进行下载,而不是通过开发工具下载。下载程序与cdtk类似(将exe或dll下载到wince平台中),请各位大虾指点该下载程序的开发思路。 …

查看全部问答>

测试设备,寻求合作!

水位、温度测试,用单片机实现,体积要小,数据传送800米,最好用mcs1200,熟悉者联系:437175689,诚求合作…

查看全部问答>

请问谁有 MST710 芯片驱动

请问谁有MSG710芯片驱动(最好是linux下面的)的,现在正在做模拟屏的驱动,第一次做芯片驱动又比较急,不知道该怎么下手,想要一份参考一下。谢谢。 luogk@magliving.com …

查看全部问答>