打印

急求定时器定时0.5us解决方案

[复制链接]
5735|35
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tionsa|  楼主 | 2010-7-7 10:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的STM32103系列,外部是25M,定时设置后,出不来0.5us,最快也是2us.请各位DX给看看,代码如下
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
//  TIM_OCInitTypeDef  TIM_OCInitStructure ;
  TIM_DeInit( TIM3);//复位TIM3定时器
  /* TIM3 configuration */
  TIM_TimeBaseStructure.TIM_Period = 10;
  TIM_TimeBaseStructure.TIM_Prescaler = 1;  
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//0x0; // 时钟分割  
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //计数方向向上计数
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  
  /* Clear TIM3 update pending flag[清除TIM3溢出中断标志] */
  TIM_ClearFlag(TIM3, TIM_FLAG_Update);

  /* Enable TIM3 Update interrupt [TIM3溢出中断允许]*/
  TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);  
  /* TIM3 enable counter [允许tim3计数]*/
  TIM_Cmd(TIM3, ENABLE);
望ST公司的FAE给实际测试并提供解决方式,谢谢.
沙发
香水城| | 2010-7-7 11:17 | 只看该作者
设置的定时器时钟频率是多少?

使用特权

评论回复
板凳
tionsa|  楼主 | 2010-7-7 11:45 | 只看该作者
RCC_APB1Periph_TIM3
  RCC_DeInit();

  /* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);

  /* Wait till HSE is ready */
  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if(HSEStartUpStatus == SUCCESS)
  {
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

        //FLASH时序控制
        //推荐值:
        //SYSCLK = 0~24MHz         Latency=0
        //SYSCLK = 24~48MHz  Latency=1
        //SYSCLK = 48~72MHz  Latency=2
    FLASH_SetLatency(FLASH_Latency_2);
       
    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
  
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);

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

        #if (ExtHSECry==ExtHSECry8M)
    /* PLLCLK = 8MHz * 9 = 72 MHz */
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
        #endif
        #if (ExtHSECry==ExtHSECry25M)
    /* PLLCLK = 25MHz * 3 = 72 MHz */
        RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_3);
        #endif

    /* Enable PLL */
    RCC_PLLCmd(ENABLE);
       
        //等待PLL稳定
    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
        //切换时钟后等待系统时钟稳定
    /* Wait till PLL is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x08)
    {
    }

  }

使用特权

评论回复
地板
香水城| | 2010-7-7 12:34 | 只看该作者
3楼没有回答我的问题:设置的定时器时钟频率是多少?

使用特权

评论回复
5
tionsa|  楼主 | 2010-7-7 12:43 | 只看该作者
使用系统时钟是72M,定时器的是36M,定时时间是0.5us,

使用特权

评论回复
6
香水城| | 2010-7-7 13:59 | 只看该作者
1)你是否能肯定,你正确地设置了定时器的时钟频率为36MHz?
2)请问你是如何判断“定时设置后,出不来0.5us,最快也是2us”?
3)楼主位说"外部是25M",硬件上是如何产生这个频率的?

使用特权

评论回复
7
tionsa|  楼主 | 2010-7-7 14:37 | 只看该作者
请看我3楼那里的RCC的时钟设置.
至于IO口测试的方式是
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
  {
        /* Clear TIM3 update interrupt [清除TIM3溢出中断标志]*/
  TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
        //        发送Break  和mark
  #if 1
  GPIO_WriteBit(GPIOA, GPIO_Pin_5, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_5)));
#endif
} 我在中断里面反向端口,用示波器抓的波形.
我采用外部晶振的方法,外部是25M,不是8M,用的倍频的方式.ST的芯片的晶振上有详细的说明.

使用特权

评论回复
8
tionsa|  楼主 | 2010-7-7 14:40 | 只看该作者
在TIM3中断处理程序里反向IO口测试波形,测试出的中断频率.

使用特权

评论回复
9
香水城| | 2010-7-7 14:42 | 只看该作者
1)3楼的程序中看不出来RCC的时钟设置成什么样。另外外部晶振25MHz,如果使用RCC_PLLMul_3,应该得到25x3=75MHz,而不是72MHz!

2)3楼的程序中没有定时器输入频率的设置。

3)执行这段中断程序可能已经超过0.5us,你怎么能指望它产生0.5us的波形? 请尝试设置一个较长的时间,比如试试看100us。

使用特权

评论回复
10
tionsa|  楼主 | 2010-7-7 14:47 | 只看该作者
那我们换个方式,如果我想出0.5us的中断,该如何做呢?你可否拿你手里的demo板调试下,看是否能出呢

使用特权

评论回复
11
hsbjb| | 2010-7-7 15:12 | 只看该作者
0.5us这个时间确实短了点,不好测,用IO反向测出来的时间误差估计就会在这个范围内

使用特权

评论回复
12
jiabin1024| | 2010-7-7 16:04 | 只看该作者
楼主真强悍,0.5US定时,搞不好就死了。

使用特权

评论回复
13
tionsa|  楼主 | 2010-7-8 08:35 | 只看该作者
确实是死了,所以在换个方式.谢谢

使用特权

评论回复
14
IJK| | 2010-7-8 09:02 | 只看该作者
0.5us定时,可以用查询试试看。

使用特权

评论回复
15
ZRL700424| | 2010-7-8 09:09 | 只看该作者
太牛了,0.5US中断,偶用过最短的中断也是32US,并且中断里的程序几个US就能执行完

使用特权

评论回复
16
自然的天逸| | 2010-7-8 09:20 | 只看该作者
要中断是 不可取的可以PWM输出就不占用CPU了

使用特权

评论回复
17
秋天落叶| | 2010-7-8 09:54 | 只看该作者
查询就更不行了,程序跑一遍就会是多少us了

使用特权

评论回复
18
lphbkj| | 2010-7-8 10:49 | 只看该作者
你用的什么单片机?

使用特权

评论回复
19
crazybee| | 2010-7-8 11:41 | 只看该作者
夸张!

使用特权

评论回复
20
winloop| | 2010-7-8 13:19 | 只看该作者
先不讨论能不能实现,你做这么短的定时是要干什么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

45

帖子

0

粉丝