Timer 如何设置stm8s';用于捕获比较的计时器2?

Timer 如何设置stm8s';用于捕获比较的计时器2?,timer,compare,capture,sdcc,stm8,Timer,Compare,Capture,Sdcc,Stm8,如何设置stm8s003的TIM2来捕获和比较信号?我的传感器连接到PD3,并生成周期相似但脉冲宽度不同的PWM信号。如果脉冲宽度T/2-1。我想我需要用CC的定时器,看起来PD3是TIM2 CH2 我将微控制器的频率设置为16MHz,定时器的频率设置为1MHz(1us) 接下来我初始化计时器,启动它并监听事件 ISR_TIM2_CC(TIM2_CAP_COM) { // how to count pulse width? } void tim2_DeInit(void) {

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

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

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

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;
}
ISR\u TIM2\u CC(TIM2\u CAP\u COM){
//如何计算脉冲宽度?
}
无效tim2_脱硝剂(无效)
{
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;
}
无效tim2_初始(无效){
tim2_Denit();
TIM2_PSCR=0x04;//16/2^4=1MHz
//抄送设置
TIM2_CCMR2=0x01;
TIM2_CCER2=0x20 | 0x11;
//启用中断和启动计时器
TIM2_IER |=(1)
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;
}