完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、TIMx的时钟源问题:
STM32有8路寄存器,包括TIM1和TIM8两个高级定时器,TIM6和TIM7两个基本定时器,TIM2-TIM5四个通用定时器,定时器是完全独立的,而且没有互相共享任何资源,它们可以一起同步操作,所有TIMx定时器在内部相连,用于定时器同步或链接。当一个定时器处于主模式时,它可以对另一个处于从模式的定时器的计数器进行复位、启动、停止或提供时钟等操作。其中TIM1和TIM8挂在APB2总线上,而TIM2-TIM7则挂在APB1总线上。他们所在的APB2总线也比APB1总线要好。APB2可以工作在72MHz下,而APB1最大是36MHz。 1)定时器的时钟: 计数器时钟可由下列时钟源提供: 1:内部时钟(CK_INT) 2:外部时钟模式1:外部输入脚(TIx) 3:外部时钟模式2:外部触发输入(ETR) 4:内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。 这些时钟,具体选择哪个可以通过TIMx_SMCR寄存器的相关位来设置。这里的CK_INT时钟是从APB1倍频的来的,除非APB1的时钟分频数设置为1,否则通用定时器TIMx的时钟是APB1时钟的2倍,当APB1的时钟不分频的时候,通用定时器TIMx的时钟就等于APB1的时钟。这里还要注意的就是高级定时器的时钟不是来自APB1,而是来自APB2的。 2)定时器的核心: 说到定时器的核心,自然少不了两个,一个是计数时钟(每隔多长时间计一次),二是计多少次溢出,这两个就共同决定了溢出时间。定时器的计数时钟根据定时器的不同分别来自APB1或APB2,计数时钟说白了就是要把一秒分成很多份,但由于总线时钟一般在数十兆,经过分频的APB也在数十兆,所以要把APB再分频至更低的频率,这就需要设置预分频寄存器。例如当前APB1为36MHz,除非APB1的时钟分频数设置为1,否则通用定时器TIMx的时钟是APB1时钟的2倍,这时的TIMx时钟为72MHz,因此分频至10KHz需要设置预分频器寄存器TIMx_PSC(如下图)为7199,为什么是7199而不是7200呢? 下面寄存器介绍说明了这点:计数器时钟CK_CNT等于TIMx时钟/(PSC+1),所以只需设置寄存器值7199就行了。 这里10KHz的频率相当于把一秒分为10000份,即0.0001秒,定时器每隔0.0001秒涨一次。 注:因为PSC是16位寄存器,所以值范围为0-65535。 计数器自动重装载寄存器TIMx_ARR,该寄存器存放的就是计数器要增加的次数(计多少次溢出)。 注:因为ARR也是16位寄存器,所以值范围为0-65535。 这样这两个寄存器决定了溢出时间,接着上面的例子,如果设置ARR寄存器值为5000,那就是说定时器每隔0.0001秒涨一次,总共涨5000次,这样就是0.5秒溢出一次。 总结下来,定时器的溢出公式为:溢出时间(秒)= ((ARR+1)*(PSC+1))/ TIMx时钟CK_INT(MHz) 定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器。 下面以定时器2~7的时钟说明这个倍频器的作用:当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率; 当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍。 假定AHB=36MHz,因为APB1允许的最大频率为36MHz,所以APB1的预分频系数可以取任意数值; 当预分频系数=1时,APB1=36MHz,TIM2~7的时钟频率=36MHz(倍频器不起作用); 当预分频系数=2时,APB1=18MHz,在倍频器的作用下,TIM2~7的时钟频率=36MHz。 有人会问,既然需要TIM2~7的时钟频率=36MHz,为什么不直接取APB1的预分频系数=1? 答案是:APB1不但要为TIM2~7提供时钟,而且还要为其它外设提供时钟; 设置这个倍频器可以在保证其它外设使用较低时钟频率时,TIM2~7仍能得到较高的时钟频率。 再举个例子:当AHB=72MHz时,APB1的预分频系数必须大于2,因为APB1的最大频率只能为36MHz。 如果APB1的预分频系数=2,则因为这个倍频器,TIM2~7仍然能够得到72MHz的时钟频率。能够使用更高的时钟频率,无疑提高了定时器的分辨率,这也正是设计这个倍频器的初衷。 二、TIM通用定时器配置步骤: 1.配置TIM时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); 2.定时器基本配置 void TIM2_Configuration(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_DeInit(TIM2); //复位TIM2定时器 TIM_TimeBaseStructure.TIM_Period = 5-1; // 2.5ms TIM_TimeBaseStructure.TIM_Prescaler = 36000-1; // 分频36000 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分频 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 计数方向向上计数 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); TIM_ClearFlag(TIM2, TIM_FLAG_Update); TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); TIM_Cmd(TIM2, ENABLE); } TIM_Period设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。它的取值必须在0x0000和0xFFFF之间。 TIM_Prescaler设置了用来作为TIMx时钟频率除数的预分频值。它的取值必须在0x0000和0xFFFF之间。 TIM_ClockDivision的作用是做一段延时,一般在特殊场合的时候会用到,可不关心。 TIM_CounterMode选择了计数器模式: TIM_CounterMode_Up //TIM向上计数模式 TIM_CounterMode_Down //TIM向下计数模式 TIM_CounterMode_CenterAligned1 //TIM中央对齐模式1计数模式 TIM_CounterMode_CenterAligned2 //TIM中央对齐模式2计数模式 TIM_CounterMode_CenterAligned3 //TIM中央对齐模式3计数模式 单片机时钟频率72MHz,APB1 二分频36MHz,故TIM2自动2倍频至72MHz,故定时器中断频率为72000000/36000/5=400Hz 3.使能定时器中断TIM_Cmd(TIM2, ENABLE); 4.配置NVIC。 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); 5.写中断函数 void TIM2_IRQHandler(void) { ......//中断处理 } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 19:19 , Processed in 0.736337 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号