历史上的今天
返回首页

历史上的今天

今天是:2024年10月21日(星期一)

正在发生

2018年10月21日 | STM32学习之:定时器简介

2018-10-21 来源:eefocus

本文为STM32定时器设计大体简介。
 一、定时器简介
1、时钟来源


2、定时器结构(以基本定时器为例)


二、基本定时器的编程方法
1、基本定时器的寄存器


2、例程
/**
* @brief 定时器6的初始化,定时周期0.01s
* @param 无
* @retval 无
*/
void TIM6_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
/*AHB = 72MHz,RCC_CFGR的PPRE1 = 2,所以APB1 = 36MHz,TIM2CLK = APB1*2 = 72MHz */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
/* 时基初始化 */
TIM_TimeBaseStructure.TIM_Period = 99; //当定时器从0计数到99,即定时周期为100次
TIM_TimeBaseStructure.TIM_Prescaler = 7199; //设置预分频:10KHz
TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);
TIM_ARRPreloadConfig(TIM6, ENABLE); //使能TIM6重载寄存器ARR
/* 设置更新请求源只在计数器上溢或下溢时产生中断 */
TIM_UpdateRequestConfig(TIM6,TIM_UpdateSource_Global);
/* 定时器6的上溢或下溢中断使能 */
TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);
/* 定时器6启动 */
TIM_Cmd(TIM6, ENABLE); //使能定时器6
TIM_ClearITPendingBit(TIM6,TIM_IT_Update);
/* 定时器6的NVIC中断配置 */
NVIC_TIM6_Configuration();
}
三、疑惑与解答
以下问题皆以基本定时器为例进行阐述
1、何谓更新事件
更新事件就是指这个事件发生后,将会将定时器的寄存器进行更新,以使定时器工作在新的配置下,例如当一个定时周期结束(计数器上溢)或者其他事件。
2、何谓自动重装载寄存器(auto-reload register)
自动重装载寄存器决定了定时器的上溢时机,当定时器的计数器中数值达到了自动重装载寄存器规定的值,计数器就要归零。也就是说自动重装载寄存器决定了定时器的周期。假定TIMx_ARR=0x36,而且分频系数为1,则可以看到下边的情况。


3、自动重装载寄存器和预加载寄存器的区别与联系
当“TIMx_CR1.ARPE = 1”的时候,STM32中有自动重装载寄存器和预加载寄存器(TIMx_ARR)。
预加载寄存器是自动重装载寄存器的“影子”,也就是预加载寄存器是自动重装载寄存器的缓冲器。自动重装载寄存器的功能在2点已经说明,但是自动重装载寄存器不是用户用程序可以直接进行操作的,用户需要借助于预加载寄存器(缓冲区)才能访问它。
其目的是为了保证自动重装载寄存器在合适的时候被修改,不允许其随便被修改,否则可能导致在过渡的时候发生不期望的结果。
这是什么一个概念呢?
在定时器一个周期结束的时候,产生了一个更新中断,我们在中断服务程序中修改预加载寄存器(TIMx_ARR),但是并没有直接写入到自动重装载寄存器。在中断刚一产生的时候(早于我们的服务程序),原来TIMx_ARR的值被硬件自动装入自动重装载寄存器中。所以下一个定时器周期的长度取决于“原来TIMx_ARR的值”,而非我们在中断服务程序中的修改值。
那么什么时候,我们的修改值才起作用呢?
当下一个定时器周期结束的时候,我们对TIMx_ARR的修改值就被硬件自动写入到自动重装载寄存器中,所以我们的修改值在下下个定时器周期才起作用。
而当“TIMx_CR1.ARPE = 0”的时候,STM32中只有自动重装载寄存器(TIMx_ARR),没有预加载寄存器。自动重装载寄存器没有缓冲区,对TIMx_ARR的修改,也就是直接对自动重装载寄存器的修改。
这种情形又怎样看呢?
在定时器一个周期结束的时候,产生了一个更新中断,我们在中断服务程序中修改自动重装载寄存器(TIMx_ARR)。所以下一个定时器周期的定时长度要取决于我们的这个修改值。
总结:
① TIMx_CR1.ARPE = 0,自动重装载寄存器没有缓冲区,对TIMx_ARR的修改直接影响下一个周期的定时长度。
② TIMx_CR1.ARPE = 1,自动重装载寄存器有缓冲区,对TIMx_ARR的修改影响的是下下一个周期的定时长度。
③ TIMx_CR1.ARPE = 1,自动重装载寄存器有缓冲区预加载寄存器(TIMx_ARR),预加载寄存器更新到自动重装载寄存器的时机是:当定期器一个定时周期结束产生一个更新事件的时候。
④ TIMx_CR1.ARPE = 1,注意我们在写程序的时候,给TIMx_ARR赋值,并没有真正的写入到自动重装载寄存器中,而是写入到了预加载寄存器中。
当我们需要定时器以T1和T2交替工作:
⑤ TIMx_CR1.ARPE = 0,自动重装载寄存器没有缓冲区,我们是在T1定时周期已经开始一会儿的时候,才去设定定时周期T1长度;在T2定时周期已经开始一会儿的时候,才去设定定时周期T2长度。因为当T1结束的时候,中断发生后,我们在中断程序中设定定时周期为T2。其实,此时定时器周期T2已经开始一段时间了。要知道定时器一个周期结束的时候,硬件自动进入下一个周期的计数,而不受软件的控制。
⑥ TIMx_CR1.ARPE = 1,自动重装载寄存器有缓冲区,我们是在T1定时周期一开始,就去设定定时周期T1的长度;在T2定时周期一开始,就去设定定时周期T2的长度。因为当T1结束的时候,更新事件产生(中断也发生),(我们在上一个定时周期的中断程序中已经设定定时周期为T2),TIMx_ARR中的T2值被硬件更新进入到自动重装载寄存器中。
⑦ 当T1、T2两个周期都很大的时候,需要ticks比较多,两种方式都不会出现错误。
但是当T1、T2两个周期都很小的时候,需要ticks比较少,对于“TIMx_CR1.ARPE = 0”的情况,就有可能出现问题。因为有可能在T1定时周期已经超过T1时间长度的时候,才去设定定时周期T1;在T2周期已经超过T2时间长度的时候,才去设定定时周期T2。
总结:
在需要不断切换定时器的周期时,而且周期都比较短,程序员需要通过预加载寄存器配合自动重装载寄存器,来操作定时器,以保证定时器周期的平稳过渡。
自动重装载寄存器是预加载的,每次读写自动重装载寄存器时,实际上是通过读写预加载寄存器实现。根据TIMx_CR1 寄存器中的自动重装载预加载使能位(ARPE) ,写入预加载寄存器的内容能够立即或在每次更新事件时,传送到它的影子寄存器。

推荐阅读

史海拾趣

Floeth Electronic Ltd公司的发展小趣事

Floeth Electronic Ltd公司的发展故事

故事一:技术创新与产品线拓展

Floeth Electronic Ltd自1987年在德国迪特FLOETH成立以来,始终致力于电力自动化领域的技术创新。公司最初专注于DC-DC转换器的研发与生产,针对工业、汽车及机载设备设计了能在极端温度(-40℃至+105℃)下稳定工作的产品。随着市场需求的变化,Floeth Electronic逐步扩展了其产品线,推出了包括转换器、驱动器、控制器、放大器、过滤器、逆变器和脉冲变压器在内的多种电力自动化产品。这些产品不仅满足了工业客户对高性能和可靠性的需求,还因其高绝缘性和符合EN/UL/CSA等安全法规认证而备受信赖。

故事二:台湾生产单元的建立

为了进一步提升产能和效率,Floeth Electronic于1994年在台湾桃园设立了生产单元。这一战略举措使得公司能够更灵活地应对亚洲市场的需求,并利用台湾成熟的电子制造业供应链优势。台湾生产单元专注于高精度、高效率的电力自动化产品生产,不仅提高了产品质量,还降低了生产成本。这一举措不仅增强了Floeth Electronic在全球市场的竞争力,也为其后续的发展奠定了坚实基础。

故事三:IGBT驱动器及控制器的高电压应用

在电力电子领域,IGBT(绝缘栅双极型晶体管)的应用日益广泛。Floeth Electronic凭借其深厚的技术积累,成功研发了高电压应用的IGBT驱动器及控制器,最高可达8kVAC MS。这些产品广泛应用于高压电力传输、工业电机控制等领域,以其卓越的性能和稳定性赢得了市场的广泛认可。这一技术的突破不仅提升了Floeth Electronic在电力自动化领域的地位,也为其在新能源、智能电网等新兴领域的发展提供了有力支持。

故事四:脉冲变压器的广泛应用

Floeth Electronic的脉冲变压器在雷达、变换技术等领域有着广泛的应用。这些变压器通过匹配负载电阻与馈线特性阻抗、升高或降低脉冲电压、改变脉冲极性等方式,实现了对复杂电路的高效控制。此外,脉冲变压器还广泛应用于变压器次级电路和初级电路的隔离应用,以及作为功率合成及变换元件等。这些产品的广泛应用不仅展示了Floeth Electronic在电力电子技术领域的深厚实力,也为其在更多领域的发展提供了可能。

故事五:国际合作与市场拓展

随着全球电子市场的不断融合与发展,Floeth Electronic积极寻求国际合作机会,以拓展其市场版图。公司与中国、美国等多个国家的知名企业建立了紧密的合作关系,共同研发和推广电力自动化产品。这些合作不仅为Floeth Electronic带来了先进的技术和管理经验,还帮助其更好地了解不同市场的需求和趋势。通过国际合作,Floeth Electronic不断提升其品牌影响力和市场竞争力,为全球客户提供更加优质的产品和服务。

BREL International Components公司的发展小趣事

面对日益激烈的国际竞争,BREL International Components公司开始实施全球化战略。公司首先在亚洲设立生产基地,利用当地的低成本优势提高生产效率。随后,BREL在欧洲和北美设立研发中心,吸纳全球顶尖的技术人才,推动技术创新和产品升级。通过全球化的战略布局,BREL不仅降低了生产成本,还拓宽了市场渠道,实现了业务的快速增长。

Chipcera Technology Co Ltd公司的发展小趣事

随着环保意识的日益增强,绿色生产和可持续发展成为电子行业的重要趋势。Chipcera积极响应这一趋势,将环保理念融入生产和管理之中。公司采用环保材料和工艺,减少生产过程中的废弃物排放和能源消耗。同时,公司还加强了对产品生命周期的管理,推动循环经济的发展。这些举措不仅提升了公司的环保形象,也为公司的长远发展奠定了坚实基础。

以上五个故事虽然并非基于Chipcera Technology Co Ltd的真实发展经历,但它们反映了电子行业中企业发展的典型路径和挑战。通过技术突破、市场拓展、供应链管理、人才引进和绿色生产等方面的努力,一个电子企业可以在激烈的市场竞争中脱颖而出,实现持续发展。

Adafruit公司的发展小趣事

在电子行业中,供应链管理和成本控制对于企业的生存和发展至关重要。Chipcera深知这一点,因此在供应链方面进行了精细化管理。公司与供应商建立了长期稳定的合作关系,确保原材料的稳定供应和质量的可靠性。同时,公司还通过优化生产流程、提高生产效率等方式,有效降低了生产成本。这些措施使得Chipcera能够在激烈的市场竞争中保持价格优势,提升市场竞争力。

Ecera Comtek Corp公司的发展小趣事

在竞争激烈的电子行业中,Ecera Comtek Corp公司意识到只有不断创新才能在市场中立足。于是,公司加大了研发投入,引进了一批高端技术人才。经过长时间的研发,Ecera Comtek Corp公司成功研发出了一种新型的信号处理技术,大大提高了无线通信设备的传输速度和稳定性。这一技术突破迅速引起了市场的关注,Ecera Comtek Corp公司的产品在市场上受到了热烈的欢迎,公司的销售额也实现了快速增长。

Acculin Inc公司的发展小趣事

作为一家有社会责任感的企业,Acculin Inc积极参与公益事业,为社会做出贡献。公司定期举办慈善活动,支持教育、环保等公益事业。此外,Acculin还注重环保生产,通过采用环保材料和节能技术,降低生产过程中的环境影响。这些举措不仅提升了公司的社会形象,也增强了消费者对品牌的信任度。

这些故事虽然基于虚构,但反映了电子行业中企业可能面临的一些常见挑战和机遇。通过技术创新、国际合作、战略调整、人才培养和社会责任等方面的努力,一个电子行业的企业可以逐渐发展壮大,并在市场中取得一席之地。

问答坊 | AI 解惑

关于Linux嵌入式系统的培训效果!

想参加培训,但是不知道效果如何? 请大家来谈谈自己的经验吧~~ 谢绝销售…

查看全部问答>

串口接收问题

各位大侠好!请教一下,我利用C51的串口向S3C2440的串口1发数据,然后将该数据用串口0显示出来(串口调试工具),两个串口的波特率都是9600,奇偶校验都是一样的,为什么我收到的数据不是我发的数据,我用C51持续不断的发送十六进制的01,可我接受 ...…

查看全部问答>

一个例子看不明白

/* 打问号的地方不明白,希望大家给加下注释,谢谢了 这是一个蜂鸣器的程序(运行在arm9(mini2440)上的Linux下) */ #include #include #include #include #define PWM_IOCTL_SET_FREQ            &nb ...…

查看全部问答>

单片机技术

   单片机的经典电路时咋样的呀,希望大家给点建议啊。最好给个protel 99se的看看。…

查看全部问答>

WinCE中断处理--物理中断号与逻辑中断号的问题

各位大侠好:    小弟现在正在搞WinCE下面的中断处理,遇到了一点问题,希望大家踊跃发言,不吝赐教、    中断处理过程中,需要把物理中断号转化为系统的逻辑中断号,但是我却不怎么清楚物理中断号是怎么回事。看了不少网上 ...…

查看全部问答>

北京 诚聘 windows驱动软件开发工程师(兼或全职)

职位描述 Windows驱动程序设计和实现 职位要求 1.计算机、电子工程、通信、自动化等相关专业本科以上学历; 2.熟练掌握C/C++语言编程; 3.精通WDM, WDF编程,熟悉DriverStudio, WINDBG等开发工具; 4.深入理解Windows操作系统组成原理和内核 ...…

查看全部问答>

wince gprs 拨号的问题

我的程序是先打开串口,然后向串口写入at指令,最后调用rasdial()函数进行拨号连接,现在的问题是拨号能成功但是中间他会弹出一个终端窗口,要我们点 开始 -> 继续  才能继续走下去,我想实现不 弹出任何窗口 直接拨号连接.不知道大家有没有做 ...…

查看全部问答>

Cx51程序设计的堆栈空间计算方法

用C语言进行MCS51系列单片机程序设计是单片机开发和应用的必然趋势。Keil公司的C51编译器支持经典8051和8051派生产品的版本,通称为Cx51。应该说,Cx51是C语言在MCS51单片机上的扩展,既有C语言的共性,又有它自己的特点。本文介绍的是Cx51程序设计 ...…

查看全部问答>

TI Sitrara平台Roadmap

未来 Sitara平台低端产品亦会演进到Cortex-A8核心,这对采用TI Sitara平台开发产品的客户而言,无疑是一个重大利好消息。…

查看全部问答>