定时器TimeBase设置无效问题

原创 2016年08月30日 20:15:24
今天来公司移植回充部分代码,在设置定时器(用于采集回冲红外信号)周期时发现改变TIM_TimeBaseStructure的成员变量TIM_Period和TIM_Prescaler均无效,令我十分不解。

定时器设置代码如下:
void TIM5_Init(double T)
{
    u8 Count=T*10;     //T的单位ms
   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //时钟使能

    TIM_TimeBaseStructure.TIM_Period = Count-1;  //重装值,
    TIM_TimeBaseStructure.TIM_Prescaler =7200-1; //分频系数,72M/7200=10KHz(0.1ms),其他依此类推
    TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);     //把上述数值写入对应寄存器

    TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE);            //使能或者失能指定的TIM中断
    TIM_Cmd(TIM5, ENABLE);  //使能TIMx外设                         
}
中断函数中处理如下:
void TIM5_IRQHandler(void)   //TIM2中断
{
    GPIO_WriteBit(GPIOG,GPIO_Pin_2,(1-GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_2))); //电平翻转
}
每进一次中断函数改变一次PortG.2口的输出电平以输出方波,理论上方波周期T=T_timer*2,因为产生一周期方波需要两个周期定时器中断。但通过示波器观察PG2的输出方波频率为500kHz,即定时器周期1/(500k*2)=1us,该周期在改变TIM_Period或TIM_Prescaler值时均不变,所以不是定时器设置的问题,同时排除了定时器或中断嵌套等可能性。

最后检查代码发现原因就在于中断函数中没有关闭中断标志位,应该附上:
TIM_ClearITPendingBit(TIM5, TIM_IT_Update  );  //清除TIMx更新中断标志
由于一直有中断标志,程序不断执行中断函数TIM5_IRQHandler(),而STM32F103的指令执行时间是us级别,加上很短的响应时间,使得方波周期为1us。

结论是以后在中断函数中务必记得清中断标志位,以避免类似情况发生。

版权声明:本文为博主原创文章,转载请声明出处:)

示波器的使用总结

转自: http://blog.csdn.net/horatio2010/article/details/6953062 任何好的示波器系统的关键点在于精确地重建波形的能力,称为信号完整性。 ...
  • adazone
  • adazone
  • 2015年04月15日 22:05
  • 3585

示波器入门之采样率、存储深度

前沿:带宽、采样率、存储深度是DSO的三大关键指标 一、采样率 计算机只能处理离散的数字信号。模拟电压信号进入示波器后面临的首要问题就是连续信号的数字化(AD转化)问题。 采样(Sampling)就是...
  • u011391629
  • u011391629
  • 2016年06月29日 20:18
  • 7105

ffmpeg关于timebase的理解

ffmpeg关于timebase的理解 一:ffmpeg的分层结构 写这篇文章的时候先把ffmpeg分层问题大致说明一下,我们按照最常见的  "转码程序" 和 "摄像头采集" 以及 "播放器" ...
  • zhuweigangzwg
  • zhuweigangzwg
  • 2017年03月22日 17:24
  • 3293

FFMPEG之TimeBase成员理解

FFMPEG的很多结构中有AVRational time_base;这样的一个成员,它是AVRational结构的 typedef struct AVRational{     int num; //...
  • supermanwg
  • supermanwg
  • 2013年11月08日 16:21
  • 13712

示波器的采样率和存储深度(有改动)

原地址:http://blog.sina.com.cn/s/blog_51fca59c0100aajc.html 带宽、采样率和存储深度是数字示波器的三大关键指标。相对于工程师们对示波器带宽...
  • longxiaowu
  • longxiaowu
  • 2014年05月05日 15:56
  • 4806

自制虚拟现实示波器

看到网上很多人做了自制示波器,都是硬件实现的。最近学习了labwindows/cvi,所以萌生出自制一台串口示波器的想法。 下位机采用stm32,通过自带AD采集电压值,然后通过DMA传至串口,发送...
  • jhyworkspace
  • jhyworkspace
  • 2016年05月08日 17:04
  • 1604

STM32学习笔记:通用定时器基本设定

STM32 包含11个定时器,其中TIM2~TIM5为普通定时器。 普通定时器挂载在低速外设总线APB1上,其时钟来源于输入为APB1的一个倍频器。 配置普通定时器需要4步(以配置TIM2为例):...
  • summer_o_o
  • summer_o_o
  • 2014年03月16日 10:58
  • 13948

SpringMVC注解定时器的配置和时间设置

首先,在springMVC的注解配置文件即启动servelet会读取的xml配置文件中添加定时器的规范 xmlns:task="http://www.springframework....
  • xionglangs
  • xionglangs
  • 2017年05月15日 16:46
  • 275

TIM_OCMode_Timing TIM_OCMode_Toggle 含义

TIM_OCMode_Timing是在比较成功后不在对应输出管脚上产生输出。 TIM_OCMode_Toggle是在比较成功后翻转对应输出管脚上的电平。...
  • gtkknd
  • gtkknd
  • 2014年09月15日 17:30
  • 5065

TIM_InternalClockConfig

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;        //重新将 Timer设置为缺省值        TIM_DeInit(TIM2...
  • gtkknd
  • gtkknd
  • 2016年10月25日 15:31
  • 801
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:定时器TimeBase设置无效问题
举报原因:
原因补充:

(最多只允许输入30个字)