历史上的今天
返回首页

历史上的今天

今天是:2025年02月12日(星期三)

正在发生

2020年02月12日 | STM8 8位基本型定时器 TIM4

2020-02-12 来源:eefocus

STM8S 的定时器 TIM4 由一个带可编程预分频器的 8 位可自动重载的向上计数器组成。

在这里插入图片描述

TIM4 的时钟源为系统主时钟 f MASTER ,因为 f MASTER 来源于 HSE、HSI、LSI,所以也相当于 TIM4 的时钟源可以为 HSE、HSI、LSI。

f MASTER 直接连接到 CK_PSC 时钟,然后经过预分频器分频,3 位可编程预分频器可以提供 1、2、4、8、16、32、64、128 的分频,生成 CK_CNT 时钟,以驱动向上计数器进行计数。计数时钟的频率为:


fCK_CNT =f CK_PSC / 2(PSC[2:0])

在这里插入图片描述


向上计数时,计数器从 0 开始计数,当计数值(TIM4_CNTR 寄存器的值)增加到用户预先设置在自动重装载寄存器 TIM4_ARR 寄存器中的值时,计数器重新从 0 开始计数并产生一个计数器溢出事件。此时,如果定时器 TIM4_CR1 寄存器中的 UDIS 位为 0,则会产生一个定时器更新事件 UEV。UEV 不一定必须定时器溢出时才会产生,如果 TIM4 计数器没有溢出,我们可以通过在程序中置位 TIM4_EGR 寄存器的UG 位来产生一个更新事件 UEV。使用软件置位 TIM4_CR1 寄存器中的 UDIS 位,可以禁止 UEV 事件的产生,可以避免在更新预装载寄存器时更新影子寄存器。


影子寄存器

某个寄存器在物理上对应 2 个寄存器,一个物理寄存器呈现在程序员面前,可以由程序员来读写它的值,我们称其为预装载寄存器(preload register);另一个寄存器则对程序员屏蔽,程序员无法直接对其操作,但实际中是它在起真正的作用,我们称其为影子寄存器(shadow register)。


在计数器计数的过程中,需要时刻将计数值与预设值进行比较,以判断是否有溢出,实际与计数值比较的不是 TIM4_ARR 寄存器,而是其影子寄存器。设计预装载寄存器与影子寄存器的优点是可以保证多个通道时可以准确的同步,因为这种架构下所有通道可以在更新事件发生时在同一时间更新影子寄存器为所对应的预装载寄存器,而如果只有预

装载寄存器,则只能通过程序一条一条的顺序更新,无法做到准确同步。


更新事件发生后 STM8S 的 CPU 完成以下的动作:

■ TIM4_ARR 的值被重新更新到其影子寄存器;

■ 预分频寄存器 TIM4_PSCR 的值被重新更新到预分频寄存器缓冲器;

■ 硬件更新状态寄存器 TIM4_SR1 中的 UIF 位(更新中断标志位);


如果想使用 TIM4 的溢出中断,还需要使能 TIM4 的溢出中断功能,具体为置位 TIM4_IER 寄存器的UIE 位。


控制寄存器 1 TIM4_CR1

在这里插入图片描述

此寄存器用于完成对定时器 4 的简单控制。BIT[6:4]为保留位。


BIT7 为自动预装载使能位,该位置位时,TIM4_ARR 通过缓冲预装载;该位清零时,自动预装载功能被关闭,TIM4_ARR 不通过缓冲预装载。即


APRE=1 时,设置到 TIM4_ARR 寄存器的值被放入缓冲器中,需要下一次 UEV 产生时,TIM4_ARR 的值才会被写入到影子寄存器;

APRE=0 时,TIM4_ARR 寄存器的值立即被写入影子寄存器。

例如,在 APRE=1 时,我们设置 TIM4_ARR 为 0x36,则计数器需要先计数到 0xFF,发生一次溢出之后,0x36 才会被写入到影子寄存器,下次计数器计数到 0x36 时就会产生溢出;在 APRE=0 时,我们设置 TIM4_ARR 为 0x36,则此值马上被写入影子寄存器,计数器计数至 0x36就会产生溢出。


BIT3,单脉冲模式设置位。OPM=0,计数器在更新事件发生时不停止;OPM=1,计数器在下一次更新事件发生时停止。


BIT2,更新中断请求设置位。URS=0 时,所有更新事件都会发生中断请求;URS=1 时,只有计数器溢出时,才会发生中断请求。通过置位 EG 位发生的更新事件不会发出中断请求。


BIT1,禁止更新位。UDIS=0 时,使能更新事件;UDIS=1 时,禁止更新事件产生。


BIT0,计数器使能位。CEN=0,禁止计数器;CEN=1,使能计数器。


中断使能寄存器 TIM4_IER

在这里插入图片描述

BIT7、BIT[5:1]保留。

BIT6,触发中断使能位。TIE=0,禁止触发中断;TIE=1,使能触发中断。

BIT0,更新中断使能位。UIE=0,禁止更新中断;UIE=1,使能更新中断,发生更新事件时会发出中断请求。


状态寄存器 1 TIM4_SR1

在这里插入图片描述

BIT[7:1]保留。

BIT0,更新中断标志位。UIF=0,无更新中断;UIE=1,更新中断发生。如果 UDIS=0,则发生在计数器溢出时;如果 UDIS=0 和 URS=0,则发生在软件设置 UG 位产生软件重新初始化计数器时。


事件产生寄存器 TIM4_EGR

在这里插入图片描述

BIT[7:1]保留。

BIT[0],UG 更新事件产生位。UG=0,无更新事件产生;当 UDIS=0 时,通过软件置位 UG 可产生更新事件;如果同时 URS=0,则还会产生中断请求;当 UDIS=1 时,置位UG 会初始化计数器和分频计数器,但不会产生更新事件。


计数器 TIM4_CNTR

在这里插入图片描述

预分频寄存器 TIM4_PSCR

在这里插入图片描述

BIT[7:3],保留位。

BIT[2:0],分频器的值。计数器时钟的频率为 f CK_CNT =f CK_PSC /2 (PSC[2:0]) ,为了使新的分频值有效,需要产生一次更新事件。


自动重装寄存器 TIM4_ARR

在这里插入图片描述

使用寄存器实现 TIM4 定时

TIM4 是一个 8 位通用定时器,TIM4 工作时,其计数器从 0 开始向上计数,计数到 TIM4_ARR 寄存器中设置的值时,计数器重新从 0 开始计数,同时产生一个计数器溢出事件。


我们设计一个实例,利用 TIM4 定时器中断,使开发板的 3 个 LED 每隔大约 1 秒钟翻转一次明灭状态。


void main( void )

{

InitLED();

InitTIM4();

asm("rim");

TIM4_CR1|=0x01;

while(1)

{

}

}

void InitTIM4(void)

{

TIM4_PSCR=0x07;//分频值,2M/2^7=15.625K

TIM4_IER=0x01;//更新中断使能

TIM4_CNTR=255;//计数器初值,255*(1/15.625K)=0.01632S

TIM4_ARR=255;//自动重装的值

}

#pragma vector=TIM4_OVR_UIF_vector //定义中断服务函数入口地址

__interrupt void TIM4_OVR_UIF__IRQHandler(void)

{

i++;

TIM4_SR=0x00; //清除中断标志

if(i==61)

{ //翻转 LED 接口的输出状态

PC_ODR_ODR3^=1;

PE_ODR_ODR0^=1;

PD_ODR_ODR3^=1;

i=0;

}

}


TIM4_PSCR 寄存器设置 TIM4 计数器的分频值,设置为 0x07 之后,TIM4 的计数器计数时钟频率为2M/2^7=15.625KHz。


TIM4_CNTR 用来设置 TIM4 的计数器初值,TIM4_ARR 用来设置 TIM4 的自动重装

值,将它们设置为 255,则 TIM4 每隔 255×(1/15.625K)=0.01632 秒产生一次溢出中断。


要实现 LED每隔大约 1 秒翻转一次,则只要 TIM4 没中断 61 次翻转 LED 接口的输出状态即可。

推荐阅读

史海拾趣

博通集成(BEKEN)公司的发展小趣事

随着产品线的不断丰富和技术实力的提升,博通集成开始积极拓展市场。公司凭借优质的产品和服务,赢得了众多客户的信赖和支持。同时,公司注重品牌建设,通过参加行业展会、举办技术研讨会等方式,提升品牌知名度和影响力。如今,博通集成已成为无线连接芯片设计领域的知名品牌。

Everspin Technologies公司的发展小趣事

Everspin一直致力于MRAM技术的创新和发展。其中,自旋转移力矩MRAM(STT-MRAM)是该公司的重要技术之一。Everspin在平面内和垂直磁隧道结(MTJ)STT-MRAM位单元的开发方面取得了显著成果,并积累了超过600项有效专利和应用的知识产权组合。这些技术的创新和专利的积累,使得Everspin在MRAM市场中保持了领先地位。

ALD [Advanced Linear Devices]公司的发展小趣事

2010年,Everspin在北京召开了一场盛大的媒体发布会,正式推出了其16MB MRAM存储器产品。这款产品的推出标志着Everspin在MRAM技术领域的领先地位。该产品在市场上受到了广泛关注,不仅因其存储容量大,还因其独特的数据持久性和非易失性特性,使得关键任务数据即使在断电的情况下也能得到保护。

Cambridge Electronic Industries Ltd公司的发展小趣事

在激烈的市场竞争中,CEI深知品质管理的重要性。公司建立了完善的质量管理体系,从原材料采购到产品制造、检验、包装等各个环节都进行严格把关。同时,CEI还注重持续改进和优化生产流程,提高生产效率和产品质量。这些措施使得CEI的产品在市场上具有更高的竞争力和口碑。

Custom Mmic Design Services Inc公司的发展小趣事

Custom Mmic Design Services Inc(以下简称CMDS)在成立的初期,就致力于开发高性能的微波单片集成电路(MMIC)。当时,市场上对于高频、低功耗的MMIC需求日益增长,但现有产品往往难以满足特定应用的性能要求。CMDS团队通过深入研究,成功开发出了一款新型MMIC,其性能在行业内处于领先地位,迅速获得了客户的认可。这一技术突破不仅为CMDS带来了可观的订单,也使其在微波集成电路领域确立了领先地位。

Asia Electronics Ind Co Ltd公司的发展小趣事

面对日益激烈的市场竞争,Asia Electronics Ind Co Ltd深知优化供应链管理的重要性。公司加强与供应商的合作与沟通,确保原材料的质量和供应的稳定性。同时,公司还引入先进的供应链管理系统,实现供应链的透明化和高效化。通过优化供应链,公司降低了生产成本,提高了生产效率,为公司的持续发展提供了有力保障。

问答坊 | AI 解惑

基于S3C44B0X和uCLinux 的嵌入式网络系统的实现

基于S3C44B0X和uCLinux 的嵌入式网络系统的实现 S3C44B0X 是SamSung 公司推出的一款基于 ARM7TDMI 核的RISC 嵌入式处理器,具有丰富的片上资源,适合于对成本和功耗要求比较高的应用场合。嵌入式 OS—uCLinux 继承了Linux 的内核小、效率高、源代 ...…

查看全部问答>

汽车LED灯

汽车LED灯 14.5V 400LM 用18个0.5W灯做 电压:14.5VDC 光通量:400LM LED:0.5W白光 LED:18PCS 谁有方案类的IC提供的。…

查看全部问答>

软件无线电实现及相关技术研究

[摘要]随着无线个人通信系统的发展,新系统层出不穷,也使得过去以硬件为主的无线通信体制难以适应这种局面。本文首先对 软件无线电技术的发展现状进行分析,在此基础上分析了目前的调制信号识别技术,设计了系统的详细实现方案,提出了系统的总 ...…

查看全部问答>

关于输入和输出电阻!

输入电阻和输出电阻,个人认为说的非常清楚!!…

查看全部问答>

vs2005里面怎么导入pb5.0生成的模拟器

小弟以前是搞wm5.0的。最近要做一个wince 5.0的东东。要用.net cf开发。但是怎么创建vs2005下面的开发环境啊。pb5.0我都装好了。。网上到是有一篇介绍怎么向VS2005里面加模拟器的文章,但是个人感觉不好。我看到微软下载里面有一个Mike Hall的讲解 ...…

查看全部问答>

嵌入系统

    要求:         在LINUX系统中通过的嵌入式手机二级菜单.               只通过键盘上的方向键、ENTER、ESC控制。…

查看全部问答>

创新技术为声纹鉴定提供实用系统

“声纹鉴定与自动识别技术研究”项目是由公安部物证鉴定中心等单位完成,其主要研究成果是将声纹自动识别功能植入VS99语音工作站,该系统能对说话人特征进行自动分析、判断和语图显示及测量,并可结合专家鉴定以确定说话人身份,适合于法庭科学实际 ...…

查看全部问答>

求高手指点为什么只能计数低八位

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity clock_10Hz isport(reset:in std_logic;clk_in:in std_logic;clk_out: out std_logic_vector(21 downto 0));end clock_10Hz ; architecture behavioral of cl ...…

查看全部问答>

大神指点啊!!

小弟刚接触430,一不小心把MSP430G2553烧掉了,现急需一枚,哪可以搞到??请大神们指点,谢谢!!!…

查看全部问答>