4566|5

49

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于TIM的疑问 [复制链接]

我只想简单的测试一下STM32103RBT6的TIM4定时器溢出中断,根据设置,定时器周期居然不对,下面是我的具体设置,请教各位,问题在哪里?

时钟的设置:晶体8MHZ,SYSCLK = 72MHZ,PCLK1 = 36MHZ,下面的设置对吗?
   /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1); 
  
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1); 

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);

    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2);
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    /* PLLCLK = 8MHz * 9 = 72 MHz */
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

//使能USART2 ,TIM4 时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 | RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM4, ENABLE);

定时器4 寄存器的设置
  TIM_TimeBaseStructure.TIM_Period = 0x00ff;  //周期,重装载数值        
  TIM_TimeBaseStructure.TIM_Prescaler = 0;    //预分频器   
  TIM_TimeBaseStructure.TIM_ClockDivision = 0; //定时器输入滤波器对时钟输入的采样频率,1,2,4倍    
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;     //向上计数
  
  TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

  TIM_CounterModeConfig(TIM4, TIM_CounterMode_Up);
  TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); // TIM4 中断使能
   TIM_Cmd(TIM4, ENABLE);

中断函数:GPIOC输出脉宽为定时周期,按照计算应该是 (1/36)*256 = 7.1us
但是实际脉冲宽度是3.55US,查阅了很久的手册,看到《STM32F10xxx参考手册》P37时钟章节的图7 时钟树,有一个“TIM  2,3,4 ×1,2 multiplier”是不是这个乘法器的影响?但是我并没有在手册里面看到这个的说明,

void TIM4_IRQHandler(void)
{
  
    static        u16    temp = 0x0000;
    if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
    {
        
        temp = ~temp;
        GPIO_Write(GPIOC,temp);        
        TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
    }
}
F: .jpg



    
此帖出自stm32/stm8论坛

最新回复

                                     详情 回复 发表于 2008-7-5 18:17
点赞 关注
 

回复
举报

58

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

72M分频

                                 (1/72)*256 = 3.55us
此帖出自stm32/stm8论坛
 
 

回复

19

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

这个问题已经有人贴出了例子,在精华帖中找找

 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

4
 

APB1时钟 36MHZ

问题在于 
    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);
TIM4使用的是 36MHZ的APB1时钟,不是72MHZ吧
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

5
 

楼主没有好好看手册,手册里写得很清楚

你看的是中文版的翻译,在所说的P37的最后一个段落,有这样一段话“定时器时钟频率是其所在APB总线频率的两倍。然而,如果相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。”

这段话的前半句正是你所要的答案。

另外,这个中文版本是根据英文第2版翻译的,现在英文的版本已经是第4版,在这个英文第4版的69页,有这样一段话,也明确地说明了这个问题:

The timer clock frequencies are automatically fixed by hardware. There are two cases:
1. if the APB prescaler is 1, the timer clock frequencies are set to the same frequency as that of the APB domain to which the timers are connected.
2. otherwise, they are set to twice (x2) the frequency of the APB domain to which the timers are connected.


以前还有一个精华帖,对这个问题也有专门的叙述:STM32F10xx时钟系统框图:时钟是整个系统的脉搏
相关链接:http://www.st.com/stonline/products/literature/rm/13902.pdf
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

6
 

非常感谢!

                                  
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表