你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32定时器功能OK,但是分频因子不起作用!

[复制链接]
caizhiwei 提问时间:2015-2-6 13:31 /
10ST金币
功能:10ms中断

今天突然发现了一个奇怪问题,分频因子不起作用!
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//时钟分频因子
程序代码如下,stm32f1,F2通用:
  1. /*TIM6初始化 用于LCD backlight */
  2. //TIM_Period:自动重装值(u32)
  3. //TIM_Prescaler:时钟预分频值(u16)
  4. //定时时间计算  T=(TIM_Period+1)*(TIM_Prescaler+1)/TIMxCLK(60Mhz)=(359+1)*(199+1)/36MHz=1ms

  5. void TIM6_Configuration(void)
  6. {
  7.   TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
  8.   NVIC_InitTypeDef NVIC_InitStructure;         
  9.                                                                                                                                                                                                                  
  10.   NVIC_InitStructure.NVIC_IRQChannel = TIM6_DAC_IRQn;        // Enable the TIM6 Interrupt
  11.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 先占优先级 1
  12.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;    // 从优先级 6
  13.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;           // IRQ通道被使能
  14.   NVIC_Init(&NVIC_InitStructure);

  15.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);//使能TIM6时钟 =系统时钟60M
  16.   TIM_TimeBaseInitStruct.TIM_Period = (100-1);//重装载值(1ms)
  17.   TIM_TimeBaseInitStruct.TIM_Prescaler = (6000-1); //预分频 f=(TIM_Prescaler+1)
  18. <font color="#ff0000">  /*TIM_CKD_DIV2, TIM_CKD_DIV4 is Not Action,Why? */
  19.   TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//时钟分频因子</font>
  20.   TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
  21.   //TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0x0000;///高级定时器有效(TIM1&TIM 8)
  22.   
  23.   TIM_TimeBaseInit(TIM6,&TIM_TimeBaseInitStruct);
  24.   //TIM_UpdateRequestConfig(TIM7,TIM_UpdateSource_Regular);//只有上溢或下溢才产生更新事件
  25.   TIM_ClearFlag(TIM6, TIM_FLAG_Update);
  26.   TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);
  27.                
  28.   TIM_Cmd(TIM6,ENABLE);       
  29. }
复制代码
  1. void TIM6_DAC_IRQHandler()
  2. {

  3.      if(TIM_GetITStatus(TIM6,TIM_IT_Update)!=RESET)
  4.     {
  5.          TIM_ClearITPendingBit(TIM6,TIM_FLAG_Update);                 
  6.           LED2_TOGGLE;      
  7.     }

  8. }
复制代码
希望有朋友帮我看看撒?修改分频因子不起作用~



最佳答案

查看完整内容

这个是死区采样分频设定,只有高级定时器里才有效,而且只对死区及ETR数字滤波才有效,给你一张寄存器说明吧,哥们。 一般意义上的分频就设置PSC就行了
收藏 评论15 发布时间:2015-2-6 13:31

举报

15个回答
netlhx 回答时间:2015-2-6 13:31:40
这个是死区采样分频设定,只有高级定时器里才有效,而且只对死区及ETR数字滤波才有效,给你一张寄存器说明吧,哥们。

QQ截图20150207210708.png

一般意义上的分频就设置PSC就行了

天好蓝 回答时间:2015-2-6 14:37:00
帮顶一哈
废鱼 回答时间:2015-2-6 15:10:54
楼主如何确定修改分频不管用呢?
sdkdwyb-321669 回答时间:2015-2-6 15:36:39
看看楼主怎么解决的
caizhiwei 回答时间:2015-2-6 18:39:13
安 发表于 2015-2-6 15:10
楼主如何确定修改分频不管用呢?

用示波器测量的撒?嘿嘿,我解决了分享给大家
lkl0305 回答时间:2015-2-6 23:59:29
帮顶一个
废鱼 回答时间:2015-2-7 08:49:39
楼主能具体说一下吗?你这个设置的周期是多少,实际测试到的周期是多少,示波器的截图。
逍遥李 回答时间:2015-2-7 09:44:08
问题解决了吗楼主?
caizhiwei 回答时间:2015-2-7 20:54:43

功能:10ms中断
wz002 回答时间:2015-2-7 22:39:43
好像哪里见到过这个问题,帮你找找
晓枫VS枯叶 回答时间:2015-2-7 23:07:56
10楼正解,TIM_ClockDivision是在采样时使用的时钟分频器,比如输入捕获时的采样时钟或计算互补输出的死区的时钟;时钟分频就一个PSC,还有一个重装载计数值ARR,一般只有设置这两个就够了,TIM_ClockDivision在输入捕获和PWM的互补输出时设置才有意义!
caizhiwei 回答时间:2015-2-8 13:10:49
晓枫VS枯叶 发表于 2015-2-7 23:07
10楼正解,TIM_ClockDivision是在采样时使用的时钟分频器,比如输入捕获时的采样时钟或计算互补输出的死区 ...

有道理,呵呵
逍遥李 回答时间:2015-2-8 13:23:12
netlhx 发表于 2015-2-6 13:31
这个是死区采样分频设定,只有高级定时器里才有效,而且只对死区及ETR数字滤波才有效,给你一张寄存器说明 ...

厉害!~!
wamcncn 回答时间:2015-2-8 13:36:45
学习了有问题才能进步
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版