STM32普通定时器(TIM2-7)的时钟源疑问

来源:互联网 发布:网络销售金融是骗局吗 编辑:程序博客网 时间:2024/04/27 19:52

【问题】

STM32F103的APB1最大总线时钟是AHB总线时钟的1/2,最大为36MHz,在用ST的库函数(v2.0)的时候,TIM2(普通定时器)的时钟频率为72MHz,不知道原因何在?

【问题分析】

STM32中有多达8个定时器,其中TIM1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生。其它6个为普通定时器,时钟由APB1的输出产生。

下图是STM32参考手册上时钟分配图中,有关定时器时钟部分的截图:


从图中可以看出,定时器的时钟不是直接来自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的时钟频率。能够使用更高的时钟频率,无疑提高了定时器的分辨率,这也正是设计这个倍频器的初衷。

示例:

/*    sysclock/(TIM_Prescaler+1) = 72MHz/36000 = 2000Hz    1/2000Hz = 0.5ms     0.5ms * 100 = 50ms  */    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;    //  TIM_OCInitTypeDef  TIM_OCInitStructure ;    TIM_DeInit( TIM2);//复位TIM2定时器      /* TIM2 configuration */    TIM_TimeBaseStructure.TIM_Period = 100; //50ms定时时间,单位ms         TIM_TimeBaseStructure.TIM_Prescaler = 35999;//频率2kHz        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分割      TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //计数方向向上计数    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);            /* Clear TIM2 update pending flag[清除TIM2溢出中断标志] */    TIM_ClearFlag(TIM2, TIM_FLAG_Update);          /* Enable TIM2 Update interrupt [TIM2溢出中断允许]*/    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);     //关闭定时器2,通过串口接收事件启动该定时器    TIM_Cmd(TIM2, DISABLE);/******************************************************************/void TIM_Configuration(void){TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;  TIM_OCInitTypeDef TIM_OCInitStructure;    //TIM1 使用内部时钟  //TIM_InternalClockConfig(TIM1);  //TIM1基本设置  //设置预分频器分频系数71,即APB2=72M, TIM1_CLK=72/72=1MHz  //TIM_Period(TIM1_ARR)=1000,计数器向上计数到1000后产生更新事件,计数值归零  //向上计数模式  //TIM_RepetitionCounter(TIM1_RCR)=0,每次向上溢出都产生更新事件  TIM_BaseInitStructure.TIM_Period = 1000;  TIM_BaseInitStructure.TIM_Prescaler = 71;  TIM_BaseInitStructure.TIM_ClockDivision = 0;  TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;  TIM_BaseInitStructure.TIM_RepetitionCounter = 0;  TIM_TimeBaseInit(TIM1, &TIM_BaseInitStructure);  //清中断,以免一启用中断后立即产生中断  TIM_ClearFlag(TIM1, TIM_FLAG_Update);  //使能TIM1中断源  TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);  //TIM1总开关:开启  TIM_Cmd(TIM1, ENABLE); }
                                             
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 深圳社保转外省怎么办 单位退休后医保怎么办 鼓楼医院就诊卡怎么办 2017个体户怎么办环评 查环保停工工人怎么办 林地己建房了怎么办 交不起环保罚款怎么办 单位没钱交社保怎么办 单位不缴医保怎么办 公司拖欠工资后注销怎么办 吸入纳米光触媒怎么办 溶解氧过低该怎么办 停水后来水浑浊怎么办 拉菜绿色通行证怎么办 烤箱下火太大怎么办 烤箱没有下火怎么办 烤箱的火不均匀怎么办 烤箱没上下火怎么办 烤箱两头火小怎么办? 手机上网夜视怎么办 环保标志到期了怎么办 绍兴市民卡怎么办的 被博士老爸骗怎么办 净水器滤瓶漏水怎么办 华迈净水器漏水怎么办 超限超载告知书怎么办 辽宁省荣复军人怎么办 加载失败网页打不开怎么办 整容证明开不了怎么办 无法开整容证明怎么办 整容后换身份证怎么办 换身份证了驾照怎么办 网易云安装不了怎么办 上网站看不到东西怎么办 电脑显示应用程序错误怎么办 电脑出现应用程序错误怎么办 老师教错了怎么办 老师不让坐位上怎么办 老师问学生家长借钱怎么办 学生向老师借钱怎么办 老师向家长借钱怎么办