打印
[STM32F1]

输入捕获 频率在5mhz左右

[复制链接]
1361|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
m191007|  楼主 | 2014-8-12 21:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
hz, TI, IO, pi, ST
用STM32 定时器的外部捕获  捕抓到的 误差很大,不知道是哪里的原因,是不是这种方式不能支持这么搞的 频率

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); //endabe tim2 clk
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //endabe tim2 clk


//             GPIO_InitStructure_Modem.GPIO_Pin = GPIO_Pin_1;
//          GPIO_InitStructure_Modem.GPIO_Speed = GPIO_Speed_50MHz;
//      GPIO_InitStructure_Modem.GPIO_Mode = GPIO_Mode_IPD;          
////          GPIO_InitStructure_Modem.GPIO_Mode = GPIO_Mode_AF_PP;
//          GPIO_Init(GPIOA, &GPIO_InitStructure_Modem);
//          GPIO_ResetBits(GPIOA,GPIO_Pin_1);  //down pull

//   TIM_TimeBaseStructure_Modem.TIM_Prescaler = 0;
//   TIM_TimeBaseStructure_Modem.TIM_CounterMode = TIM_CounterMode_Up;
//   TIM_TimeBaseStructure_Modem.TIM_Period = 65535;
//   TIM_TimeBaseStructure_Modem.TIM_ClockDivision = TIM_CKD_DIV1;
////   TIM_TimeBaseStructure.TIM_RepetitionCounter = ;
//   TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure_Modem);
//         
//   
//  TIM2_ICInitStructure_Modem.TIM_Channel = TIM_Channel_2;           //IC1 映射到 TI2
//  TIM2_ICInitStructure_Modem.TIM_ICPolarity = TIM_ICPolarity_Rising;//         上升沿出发
//  TIM2_ICInitStructure_Modem.TIM_ICSelection = TIM_ICSelection_DirectTI;         //IC1 映射到 TI1
//  TIM2_ICInitStructure_Modem.TIM_ICPrescaler = TIM_ICPSC_DIV1;         //无分频
//  TIM2_ICInitStructure_Modem.TIM_ICFilter = 0;                                //无滤波
////  TIM_ICInit(TIM2,&TIM2_ICInitStructure_Modem);
//  TIM_PWMIConfig(TIM2,&TIM2_ICInitStructure_Modem);
//
//  TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);                //选择IC2为始终触发源
//
//  TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);//TIM从模式:触发信号的上升沿重新初始化计数器和触发寄存器的更新事件
//
//  TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable); //启动定时器的被动触发
//
//  MY_NVIC_Init(2,3,TIM2_IRQChannel,2);// 抢占2 子优先级3 组2,最低优先级
//
//  TIM_ITConfig(TIM2,TIM_IT_Update|TIM_IT_CC2,ENABLE) ; //更新中断和捕获中断
////   TIM_ITConfig(TIM2,TIM_IT_CC2,ENABLE) ;
//   TIM_Cmd(TIM2,ENABLE);       

沙发
bobde163| | 2014-8-12 22:38 | 只看该作者
这么高的频率不知道F1能不能行,F1的主时钟频率是多少,这个捕捉的频率上限和代码执行时间有很大关系,建议直接操作寄存器,这样能减少代码执行时间,还有调高主时钟频率

使用特权

评论回复
板凳
m191007|  楼主 | 2014-8-12 23:20 | 只看该作者
bobde163 发表于 2014-8-12 22:38
这么高的频率不知道F1能不能行,F1的主时钟频率是多少,这个捕捉的频率上限和代码执行时间有很大关系,建议 ...

F1主频72mhz 除了加分频器 还有没有其他解决方案

使用特权

评论回复
地板
bobde163| | 2014-8-12 23:40 | 只看该作者
m191007 发表于 2014-8-12 23:20
F1主频72mhz 除了加分频器 还有没有其他解决方案

先在这样的情况下实测一下最高能正确测到的频率有多高,然后再通过优化代码,减少执行时间来提升,看到最后能不能达到5m

使用特权

评论回复
5
m191007|  楼主 | 2014-8-13 09:11 | 只看该作者
bobde163 发表于 2014-8-12 23:40
先在这样的情况下实测一下最高能正确测到的频率有多高,然后再通过优化代码,减少执行时间来提升,看到最 ...

用pwm 输入捕获 一次只能抓到19个,72000000/19 ,逻辑分析仪抓到是3.3mhz ,误差有点大

使用特权

评论回复
6
m191007|  楼主 | 2014-8-13 09:57 | 只看该作者
Using this method, the maximum frequency that can be measured, with TIMxCLK equal to
72 MHz, is 17 mHz instead of 1098 Hz when a 16-bit timer is used.  手册上说最大可测频率在17mhz 不知道程序哪里出了问题

使用特权

评论回复
7
bobde163| | 2014-8-13 23:03 | 只看该作者
你是使用测周期的方式测量还是测频率的方式测量?

使用特权

评论回复
8
m191007|  楼主 | 2014-8-18 11:33 | 只看该作者
bobde163 发表于 2014-8-13 23:03
你是使用测周期的方式测量还是测频率的方式测量?

现在只能通过测周期的方式去求频率了 貌似STM32的 PWM测频 测量范围不是很高

使用特权

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

本版积分规则

4

主题

23

帖子

1

粉丝