本帖最后由 xfjane 于 2012-6-11 11:11 编辑
用stm8s207c8的TIM1的CH1捕获脉冲,每次只捕获上升沿,根据相邻两次的差值计算脉冲频率。同时TIM1产生15ms的更新中断(用于判断脉冲周期是否大于15ms)。
tim1初始化程序如下:
CLR TIM1_PSCRH
MOV TIM1_PSCRL, #7 ;8分频,2M
BRES TIM1_CCER1, #0
MOV TIM1_CCMR1, #$01 ;每个脉冲都捕获一次
MOV TIM1_CCER1, #$01 ;捕获发生在上升沿,捕获使能
BSET TIM1_IER, #1 ;允许捕获中断
BRES TIM1_SR1, #1 ;清捕获中断标志
MOV TIM1_ARRH, #$75
MOV TIM1_ARRL, #$2F ;计数值=15mS*2M-1=29999
BSET TIM1_IER, #0 ;允许更新中断
BSET TIM1_CR1, #2 ;仅允许溢出更新
BRES TIM1_SR1, #0 ;清更新中断标志
BSET TIM1_CR1, #0 ;使能TIM1
BSET TIM1_EGR, #0 ;产生更新事件,重新计数
另外,tim1的更新中断和捕获中断都清了标志。
如果使输入的脉冲频率固定(周期不大于15ms),捕获中断只能进入一次,之后总是进入更新中断。
但是,如果一开始脉冲周期大于15ms,然后慢慢减小,捕获中断就能正常进入,程序也能正常计算出频率。
补充一下,同样的程序,用STM8S207RB就很正常,但是用STM8S207C8就不行。
请帮忙看下问题出在哪儿?是不是芯片本身的问题? |