5611|9

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

stm2TIMx的捕获预分频问题 [复制链接]

原文参考英文版页313/679,页/524中文

Bits 3:2 IC1PSC: Input Capture 1 Prescaler.
This bit-field defines the ratio of the prescaler acting on CC1 input (IC1).
The prescaler is reset as soon as CC1E=’0’ (TIMx_CCER register).
00: no prescaler, capture is done each time an edge is detected on the capture input.
01: capture is done once every 2 events.
10: capture is done once every 4 events.
11: capture is done once every 8 events.

IC1PSC[1:0]:输入/捕获1预分频器
这2位定义了CC1输入(IC1)的预分频系数。
一旦CC1E=0(TIMx_CCER寄存器中),则预分频器复位。
00:无预分频器,捕获输入口上检测到的每一个边沿都触发一次捕获;
01:每2个事件触发一次捕获;
10:每4个事件触发一次捕获;
11:每8个事件触发一次捕获。

按照此说明,捕获输入有预分频功能,但设置多次怎么还是无效?

此帖出自stm32/stm8论坛

最新回复

                                     详情 回复 发表于 2009-5-23 15:10
点赞 关注
 

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

你希望得到什么效果?

                                  
此帖出自stm32/stm8论坛
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

目的对输入信号分频后捕获,因为输入信号频率较高

                                 有合适的端口对输入信号预分频再捕获吗?
此帖出自stm32/stm8论坛
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 

你是不是说,不管预分频系数是多少,效果都一样?

请把你的程序贴出来,我这里测试一下。

输入信号的频率是多少?方波还是其它波形?
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

5
 

不管预分频系数是多少,效果都一样

计数(ch1输入)预分频没错,捕获就是没分频,从2到8结果一样,在我用的这个硬件版本可能是个Bug,也可能设置顺序不对,但也查不出错在哪.脉冲没问题,200Khz到30khz,标准5V方波。其实用到的俩个TIMx捕获都无预分频功能,真是见鬼了。

此帖出自stm32/stm8论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

6
 

请把你的程序贴出来,我这里测试一下

                                 另外你说“其实用到的俩个TIMx捕获都无预分频功能”,这是什么意思?没有预分频功能怎么能有效果?
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 

预分频还这么难理解吗?

按照说明,比如设置TIMx CCMR1的D[3:2]=1(IC1PSC,2分频),实际却是一分频,即输入无分频功能,设为其他值也一样.TIMx的例子内有捕获的例子(1分频,可以设为多分频),各位可以测试.

我的程序见笑了,不值一提.我已经用笨法--外加分频来解决.难道没人用这个功能吗?我会一直关注它这个功能的,只要有时间.


例子中见:


  TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
//将TIM_ICPSC_DIV1改为如下值可以测试捕获的预分频功能(TI2FP2)
//#define TIM_CKD_DIV1                       ((u16)0x0000)
//#define TIM_CKD_DIV2                       ((u16)0x0100)
//#define TIM_CKD_DIV4                       ((u16)0x0200)
  TIM_ICInitStructure.TIM_ICFilter = 0x0;

  TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);

  /* Select the TIM2 Input Trigger: TI2FP2 */
  TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);

  /* Select the slave Mode: Reset Mode */
  TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);

  /* Enable the Master/Slave Mode */
  TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);

  /* TIM enable counter */
  TIM_Cmd(TIM2, ENABLE);

  /* Enable the CC2 Interrupt Request */
  TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

8
 

旧事重提

其实,自己的理解,这个问题到此为止已经说的明白不过了。按照ST手册说明(见前面引用说明,原文参考英文版页313/679,页/524中文),M32各定时器不但对外计数有预分频功能,对外捕获也有预分频功能(Ti1~4输入口)。对外计数预分频功能正常,而捕获预分频无效(怎么设置都是一分频),这就是我要说的。大家可以测试ST提供的一个捕获例子,见目录内的..TIMPWM_Input内的例子,此例给的是一分频,可以将分频因子修改测试,见前面所述。

个人认为这是个硬件bug(也许自己用法不对,如果有人能弄出来,愿意拜师求教),因为手册说明有此功能,实际整不出来。个人程序为无驱动库程序,并非独闯,已经仔细拜读驱动库及其例子。

鉴于版主对此问题重视,特意重提。
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

9
 

谢谢楼主旧事重提

通过仔细检查库函数,我怀疑是头文件中的常数定义错误,请试试把这几个常数定义修改如下:

#define TIM_CKD_DIV1    ((u16)0x0000)
#define TIM_CKD_DIV2    ((u16)0x0004) // Old value ((u16)0x0100)
#define TIM_CKD_DIV4    ((u16)0x0008) // Old value ((u16)0x0200)
#define TIM_CKD_DIV8    ((u16)0x000C)

或者在调用完TIM_PWMIConfig()之后,直接对TIM2_CCMR1操作修改它的IC2PSC[1:0]位。
此帖出自stm32/stm8论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

10
 

看看

                                  
此帖出自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
快速回复 返回顶部 返回列表