打印
[STM8]

一个定时器能同时计时和捕获吗

[复制链接]
2052|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qhtflsw|  楼主 | 2015-5-28 15:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定时器1用于系统定时,和4个通道输入捕获?可行?
沙发
wind~风| | 2015-5-28 15:50 | 只看该作者
理论可行,实际看你怎么操作

使用特权

评论回复
板凳
mmuuss586| | 2015-5-28 19:10 | 只看该作者
不行,支持不了这么多;
不过你可以试试看;

使用特权

评论回复
地板
戈卫东| | 2015-5-28 20:10 | 只看该作者
应该是可以的吧

使用特权

评论回复
5
yhy123456| | 2015-5-28 20:54 | 只看该作者
最好别这样吧  

使用特权

评论回复
6
huangxz| | 2015-5-28 22:28 | 只看该作者
cortex-m3自带有系统定时器,为啥不用呢,
如果你捕获同时当系统定时器用,定时周期没那么容易控制吧。

使用特权

评论回复
7
desertsailor| | 2015-6-2 19:29 | 只看该作者
应该可以,捕获和计时是分开的

使用特权

评论回复
8
zh113214| | 2015-6-2 22:24 | 只看该作者
理论上可以,但是最好不要这样吧

使用特权

评论回复
9
airwill| | 2015-6-3 07:41 | 只看该作者
当然可行.
捕获的时候, 不要使用从模式.
定时器有4个捕获寄存器, 捕获四路没有问题. 通常为了捕获较宽的时间, 本来也需要保存定时器溢出作为高位以提高捕获精度.
这时候要特别注意中断服务尽量短而快,以避免丢失捕获信号.

使用特权

评论回复
10
qhtflsw|  楼主 | 2015-6-3 15:32 | 只看该作者
huangxz 发表于 2015-5-28 22:28
cortex-m3自带有系统定时器,为啥不用呢,
如果你捕获同时当系统定时器用,定时周期没那么容易控制吧。 ...

用的是STM8S105

使用特权

评论回复
11
qhtflsw|  楼主 | 2015-6-3 15:51 | 只看该作者
airwill 发表于 2015-6-3 07:41
当然可行.
捕获的时候, 不要使用从模式.
定时器有4个捕获寄存器, 捕获四路没有问题. 通常为了捕获较宽的时 ...

捕获时候的计数器是基于定时器的计数值还是?

使用特权

评论回复
12
icecut| | 2015-6-3 15:52 | 只看该作者
定时简单,随便有个周期性中断就能实现软定时.别什么都追求硬件完成
捕获,软件就无能为力了

使用特权

评论回复
13
qhtflsw|  楼主 | 2015-6-4 16:25 | 只看该作者
可行,不过捕获范围太小。于是用另外的定时器T2定时,T1四个通道捕获。
static void Init_TIM1(void)//1us
{
        TIM1_DeInit();
        TIM1_TimeBaseInit(15, TIM1_COUNTERMODE_UP, 0x6666, 0x00);//115us-26000us,0x6666=26214
       
        /* 通道1,上升沿,映射在T1通道CH1-PC1,1分频,无滤波 */
        GPIO_Init(GPIOC, GPIO_PIN_1, GPIO_MODE_IN_PU_NO_IT);
        TIM1_ICInit(TIM1_CHANNEL_1, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV1, 0x00);
        /* 通道2,上升沿,映射在T1通道CH2-PC2,1分频,无滤波 */
        GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_IN_PU_NO_IT);
        TIM1_ICInit(TIM1_CHANNEL_2, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV1, 0x00);
        /* 通道3,上升沿,映射在T1通道CH3-PC3,1分频,无滤波 */
        GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_IN_PU_NO_IT);
        TIM1_ICInit(TIM1_CHANNEL_3, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV1, 0x00);
        /* 通道4,上升沿,映射在T1通道CH4-PC4,1分频,无滤波 */
        GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_PU_NO_IT);
        TIM1_ICInit(TIM1_CHANNEL_4, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV1, 0x00);

        TIM1_ITConfig(TIM1_IT_CC1, ENABLE);//捕获使能
        TIM1_ITConfig(TIM1_IT_CC2, ENABLE);
        TIM1_ITConfig(TIM1_IT_CC3, ENABLE);
        TIM1_ITConfig(TIM1_IT_CC4, ENABLE);
       
        TIM1_ClearFlag(TIM1_FLAG_CC1);
        TIM1_ClearFlag(TIM1_FLAG_CC2);
        TIM1_ClearFlag(TIM1_FLAG_CC3);
        TIM1_ClearFlag(TIM1_FLAG_CC4);
        TIM1_Cmd(ENABLE);//使能TIM1       

使用特权

评论回复
14
huzi2099| | 2015-6-4 18:31 | 只看该作者
所谓的捕获其实就是在预定好的信号到来的时候把计数值装入通道寄存器,同时工作自然是可以的,只是计算时间差的时候要按当前的计数回0值核算一下.

使用特权

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

本版积分规则

59

主题

164

帖子

4

粉丝