最近在研究stm8定时计数器,思路很简单,就是定时到一个时间以后就产生一个小脉冲,然后通过示波器去观察各个脉冲的间隔,程序如下:
void tim3_init(void)
{
// 然后初始化定时器3
TIM3_CR1 = 0x00;
TIM3_IER = 0x00; // 禁止中断
TIM3_EGR = 0x01; // 允许产生更新事件
TIM3_PSCR = 0x00; // 预分频器; fck_cn=fck_psc除以2的PSC[3:0]次方
TIM3_ARRH = 0x00; // 设定重装载时的寄存器的高8 位
TIM3_ARRL = 0x96; //0x96
TIM3_CNTRH = 0x00; // 设定计数器的初值
TIM3_CNTRL = 0x96; ///0x96
TIM3_IER = 0x01; // 允许更新中断
//TIM3_CR1 = 0x01; // b0 = 1,允许计数器工作
// b1 = 0,允许更新
// 设置控制器,启动定时器
}
void main(void)
{
tim3_init();
while(1)
{
TIM3_CNTRL=0X00; TIM3_CR1|=0X01; //启动
for(i=0;i<8;i++){ //产生8次脉冲
TEST_PIN; //产生一个脉冲
while((TIM3_SR1&0x01)==0); //等待更新事件
TIM3_SR1=0;
}
TIM3_CR1&=0Xfe;//关闭
break;
}
}
通过观察示波器,发现每次的脉冲间隔时间都不一致,由于本人之前用过AVR的单片机定时,也不会出现这样子的问题。上面是示波器的图片,究竟是哪里出现问题了呢?求解答
|