打印

STM32定时器的问题

[复制链接]
1791|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rainsinging|  楼主 | 2013-2-27 15:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不知道大家有没有遇到这样的问题:定时器2检测方波的频率,定时器3产生方波,我将他们各自运行时结果都是正确的,但是两个一起用定时器3产生的脉冲是正常的,而定时器2检测到的频率则不准确了
沙发
伟峰电子| | 2013-2-27 18:05 | 只看该作者
定时器3不是中断,定时器2用中断,应该没问题;都是中断,小差一点;都不是中断,差别较大。

使用特权

评论回复
板凳
rainsinging|  楼主 | 2013-2-28 16:15 | 只看该作者
void Timer_Configuration(void)
{
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;         //通道输入初始化结构
/*******************************检测方波的频率************************************/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); //打开TIM2外设时钟
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period        = 0xffff;   
TIM_TimeBaseStructure.TIM_Prescaler     = 72-1;   // 72分频
TIM_TimeBaseStructure.TIM_ClockDivision = 0;        
TIM_TimeBaseStructure.TIM_CounterMode   = TIM_CounterMode_Up;
TIM_TimeBaseInit( TIM2, &TIM_TimeBaseStructure );

TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;   //T2_Ch2
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;   //输入捕获上升沿
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0x2;     
TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);
     
TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2); //TIM2经滤波定时器输入2
TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);//选中触发信号(TRGI)的上升沿重初始化计数器并触发寄存器的更新
TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);

TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);
TIM_Cmd(TIM2, ENABLE);
/***********************产生脉冲信号******************************/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //打开TIM3外设时钟
TIM_DeInit(TIM3);
TIM_TimeBaseStructure.TIM_Period=1406; //自动重装载寄存器的值
TIM_TimeBaseStructure.TIM_Prescaler= (4 - 1); //时钟预分频数4  (这里的时钟在RCC设置里为72M)
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //采样分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse=180;        
TIM_OC4Init(TIM3,&TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);  
TIM_ARRPreloadConfig(TIM3,ENABLE);
TIM_Cmd(TIM3, ENABLE);
}
程序附上,我的TIM3没用中断,TIM2用中断的,总之两个放一起频率就测不准,分开来就是好的,好纠结啊,求高手帮忙解答下

使用特权

评论回复
地板
rainsinging|  楼主 | 2013-2-28 16:17 | 只看该作者
伟峰电子 发表于 2013-2-27 18:05
定时器3不是中断,定时器2用中断,应该没问题;都是中断,小差一点;都不是中断,差别较大。 ...

我是这么设置的呃,也不知道什么原因,可以帮忙看下我附加的程序么,谢谢

使用特权

评论回复
5
rainsinging|  楼主 | 2013-3-1 10:47 | 只看该作者
各位高手帮忙看下吧?给个思路或方向,不胜感激啊!!

使用特权

评论回复
6
rainsinging|  楼主 | 2013-3-1 10:49 | 只看该作者
准确的说法是测出来的频率显示有准的值,但是他又会有不正确的值显示出来

使用特权

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

本版积分规则

14

主题

80

帖子

0

粉丝