问题描述
如何设置stm8s003的TIM2以捕获和比较信号?我的传感器连接到PD3,并产生具有+-相似周期但具有不同脉冲宽度的PWM信号。如果脉冲宽度
我将微控制器的频率设置为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 (将#修改为@)