完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1、TIM通用定时器介绍
通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。 它可以应用于多种场合,包括测量输入信号的脉冲长度(输入捕获 )或者产生输出波形(输出比较PWM),使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整,而且每个定时器都是完全独立的,没有互相共享任何资源,因此这些定时器可以一起同步操作。 2、TIM定时器主要功能 在STM32F103系列中,通用定时器主要有TIM2、TIM3、TIM4、TIM5定时器,其功能包括: (1)16位向上、向下、向上/向下自动装载计数器 (2)16位可编程(可实时修改)预分频器,计数器时钟频率的分配系数为:1~65536之间的任意数值 (3)每个通用定时器都有4个独立通道,每个通道都可以进行: ①输入捕获 ②输出比较 ③PWM生成(边缘或中间对齐模式) ④单脉冲模式输出 (4)使用外部信号控制定时器和定时器互连得同步电路 (5)以下事件发生时产生中断/DMA: ①更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或内部/外部触发) ②触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) ③输入捕获 ④输出比较 (6)支持针对定位的增量(正交)编码器和霍尔传感器电路 (7)触发输入作为外部时钟或者按周期的电流管理 通用定时器框图 3、时基单元 可编程通用定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器,这个计数器可以向上计数、向下计数或者向上向下双向计数。此计数器时钟由预分频器分配得到。 计数器、自动装载寄存器和预分频器寄存器可以由软件读写,在计数器运行时仍可以读写。 时基单元包含: (1) 计数器寄存器 (2) 预分频器寄存器 (3) 自动装载寄存器 自动装载寄存器是预先装载的,写或读自动重装载寄存器将访问预装载寄存器。根据在TIMx_CR1寄存器中的自动装载预装载使能位(ARPE)的设置,预装载寄存器的内容被立即或在每次的更新事件UEV时传送到影子寄存器。当计数器达到溢出条件(向下计数时的下溢条件)并当TIMx_CR1寄存器中的UDIS位等于‘0’时,产生更新事件,更新事件也可以由软件产生。 4、计数器模式 (1)向上计数模式 在向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器的内容),然后重新从0开始计数并且产生一个计数器溢出事件。每次计数器溢出时可以产生更新事件,在TIMx_EGR寄存器中(通过软件方式或者使用从模式控制器)设置UG位也同样可以产生一个更新事件。 设置TIMx_CR1寄存器中的UDIS位,可以禁止更新事件;这样可以避免在向预装载寄存器中写入新值时更新影子寄存器,在UDIS位被清’0’之前,将不产生更新事件。但是在应该产生更新事件时,计数器仍会被清’0’,同时预分频器的计数也被请0(但预分频系数不变)。此外,如果设置了TIMx_CR1寄存器中的URS位(选择更新请求),设置UG位将产生一个更新事件UEV,但硬件 不设置UIF标志(即不产生中断或DMA请求);这是为了避免在捕获模式下清除计数器时,同时产生更新和捕获中断。当发生一个更新事件时,所有的寄存器都被更新,硬件同时(依据URS位)设置更新标志位(TIMx_SR寄存器中的UIF位)。 ①预分频器的缓冲区被置入预装载寄存器的值(TIMx_PSC寄存器的内容)。 ②自动装载影子寄存器被重新置入预装载寄存器的值(TIMx_ARR)。 (2)向下计数模式 在向下模式中,计数器从自动装入的值(TIMx_ARR计数器的值)开始向下计数到0,然后从自动装入的值重新开始并且产生一个计数器向下溢出事件。每次计数器溢出时可以产生更新事件,在TIMx_EGR寄存器中(通过软件方式或者使用从模式控 制器)设'置UG位,也同样可以产生一个更新事件。设置TIMx_CR 1寄存器的UDIS位可以禁止UEV事件。这样可以避免向预装载寄存器中写入新值 时更新影子寄存器。因此UDIS位被清为'0'之前不会产生更新事件。然而,计数器仍会从'当前自 动加载值重新开始计数,同时预分频器的计数器重新从0开始(但预分频系数不变)。此外,如果设置了TIMx_CR 1寄存器中的URS位(选择更新请求),设置UG位将产生一个更新事 件UEV但不设置UF标忐(因此不产生中断和DMA请求),这是为了避免在发生捕获事件并清除计 数器时,同时产生更新和捕获中断。当发生更新事件时,所有的寄存器都被更新,并且(根据URS位的设置)更新标志位(TIMx_SR寄 存器中的UIF位)也被设置。 ①预分频器的缓存器被置入预装载寄存器的值(TIMx_PSC寄存器的值)。 ②当前的自动加载寄存器被更新为预装载值(TIMx_ARR寄存器中的内容)。注:自动装载在计数器重载入之前被更新,因此下一个周期将是预期的值。 (3)中央对齐模式(向上/向下计数) 在中央对齐模式,计数器从0开始计数到自动加载的值(TIMx_ARR寄存器)-1,产生一个计数器 溢出事件,然后向下计数到1并且产生一个计数器下溢事件:然后再从0开始重新计数。在这个模式,不能写入TIMx_CR 1中的DIR方向位。它由硬件更新并指示当前的计数方向。可以在每次计数上溢和每次计数下溢时产生更新事件;也可以通过(软件或者使用从模式控制器) 设置TIMx_EGR寄存器中的UG位产生更新事件。然后,计数器重新从0开始计数,预分频器也 重新从0开始计数:设置TIMx_CR 1寄存器中的UDIS位可以禁止UEV事件。这样可以避免在向预装载寄存器中写入 新值时更新影子寄存器。因此UDIS位被清为'0'之前不会产生更新事件。然而,计数器仍会根据 当前'I动重加载的值,继续向上或向下计数。此外,如果设置了 TIMx_CR 1寄存器中的URS位(选择更新请求),设置UG位将产生一个更新事 件UEV但不设置UIF标志(因此不产生中断和DMA请求),这是为了避免在发生捕获事件并清除计 数器时,同时产生更新和捕数中断。当发生更新事件时,所有的寄存器都被更新,并且(根据URS位的设置)更新标志位(TIMx_SR寄 存器中的UIF位)也被设置。 ①预分频器的缓存器被加载为预装载(TIMx_PSC寄存器)的值。 ②当前的自动加载寄存器被更新为预装载值(TIMx_ARR寄存器中的内容)。注:如果因为计数 器溢出而产生更新,自动重装载将在计数器重载入之前被更新,因此下一个周期将是预期 的值(计数器被装载为新的为)。 5、PWM模式 脉冲宽度调制模式可以产生一个由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输出使能。 在PWM模式(模式1或模式2)下,TIMx_CNT和TIMx_CCRx始终在进行比较,(依据计数器的计数方向)以确定是否符合TIMx_CCRx<=TIMx_CNT或者TIMx_CNT<=TIMx_CCRx。为了与OCREF_CLR的功能(在下一个PWM周期之前,ETR信号上的一个外部事件能够清除OCxREF)一致。 根据TIMx_CR1寄存器中CMS位的状态,定时器能够产生边沿对齐的PWM信号或中央对齐的PWM信号。 void Tim4_Config(uint16_t psc,uint16_t arr) { RCC->APB2ENR |=(0x01<<2)|(0x01<<3)|(0x01<<0);//开启PB、PA时钟以及AFIO时钟 RCC->APB1ENR |=(0x01<<2);//开启定时器4 GPIOA->CRH &=~(0x0f<<8); GPIOA->CRH |=(0x03<<8);//PA10通用推挽输出,最大速度为50Mhz GPIOB->CRH &=~(0x0f<<4); GPIOB->CRH |=(0x0B<<4);//复用推挽输出 TIM4->CR1 =0; TIM4->CCMR2 |=(0x06<<12);//定时器4,通道4配置为输出比较4模式,设置为PWM1模式 TIM4->CCER |=(0x01<<12);//输出使能,极性 TIM4->PSC =psc-1;//预分频器 TIM4->ARR =arr-1;//重装载值 TIM4->CCR4 =arr/2;//设置比较值 TIM4->CR1 &=~(0x01<<0); TIM4->DIER |=(0x01<<0);//允许更新中断 NVIC_EnableIRQ (TIM4_IRQn); TIM4->CR1 |=(0x01<<0); } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
554浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 02:50 , Processed in 0.860047 second(s), Total 78, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号