如何设置stm8s的定时器2以捕获比较?

问题描述

如何设置stm8s003的TIM2以捕获和比较信号?我的传感器连接到PD3,并产生具有+-相似周期但具有不同脉冲宽度的PWM信号。如果脉冲宽度 T / 2-1。我想我需要在CC中使用计时器,看起来PD3是TIM2 CH2

enter image description here

我将微控制器的频率设置为16MHz,将计时器的频率设置为1MHz(1 us)

CLK_CKDIVR = 0; // 16MHz
CLK_PCKENR1 = 0xFF; // Enable periphery
CLK_PCKENR2 = 0;

接下来,我启动计时器,启动它并监听事件

ISR_TIM2_CC(TIM2_CAP_COM) {
    // how to count pulse width?
}

void tim2_DeInit(void)
{
    TIM2_CR1 = 0;
    TIM2_IER = 0;
    TIM2_SR1 = 0;
    TIM2_SR2 = 0;
    TIM2_EGR = 0;
    TIM2_CCMR1 = 0;
    TIM2_CCMR2 = 0;
    TIM2_CCMR3 = 0;
    TIM2_CCER1 = 0;
    TIM2_CCER2 = 0;
    TIM2_CNTRH = 0;
    TIM2_CNTRL = 0;
    TIM2_PSCR = 0;
    TIM2_ARRH = 0xFF;
    TIM2_ARRL = 0xFF;
    TIM2_CCR1H = 0;
    TIM2_CCR1L = 0;
    TIM2_CCR2H = 0;
    TIM2_CCR2L = 0;
    TIM2_CCR3H = 0;
    TIM2_CCR3L = 0;
}

void tim2_init(void) {
    tim2_DeInit();

    TIM2_PSCR = 0x04;// 16/2^4 = 1MHz

    // CC settings
    TIM2_CCMR2 = 0x01;
    TIM2_CCER2 = 0x20 | 0x11;
    
    // Enable interruption and start timer
    TIM2_IER |= (1 << 2); // enable channel 2 for CC
    TIM2_CR1 = TIM2_CR1_ARPE | TIM2_CR1_CEN;
}

我不确定我的抄送设置是否正确。似乎每个事件都在每个上升沿触发,我需要使用一些标志来计数脉冲宽度,但是如何计算此PW?但是我无法设置下降沿,或者我需要在发生上升沿事件时重新配置定时器以捕获下降沿。

如果有人分享配置TIM2 ch2来计算脉冲宽度的示例,那就太好了

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...