关于USMART定时器

2019-07-20 10:23发布

应该是1000才对。库函数这里有点小bug
寄存器代码是对的:
[mw_shl_code=c,true]//下面这两个函数,非USMART函数,放到这里,仅仅方便移植.
//定时器4中断服务程序         
void TIM4_IRQHandler(void)
{                                                                   
        if(TIM4->SR&0X0001)//溢出中断
        {
                usmart_dev.scan();        //执行usmart扫描       
                TIM4->CNT=0;                //清空定时器的CNT
                TIM4->ARR=1000;                //恢复原来的设置                                                                                                               
        }                                  
        TIM4->SR&=~(1<<0);//清除中断标志位             
}
//使能定时器4,使能中断.
void Timer4_Init(u16 arr,u16 psc)
{
        RCC->APB1ENR|=1<<2;           //TIM4 时钟使能      
        TIM4->ARR=arr;                  //设定计数器自动重装值  
        TIM4->PSC=psc;                  //预分频器7200,得到10Khz的计数时钟
        TIM4->DIER|=1<<0;           //允许更新中断         
        TIM4->CR1|=0x01;            //使能定时器4
          MY_NVIC_Init(3,3,TIM4_IRQn,2);//抢占3,子优先级3,组2(组2中优先级最低的)                                                                         
}
#endif
////////////////////////////////////////////////////////////////////////////////////////
//初始化串口控制器
//sysclk:系统时钟(Mhz)
void usmart_init(u8 sysclk)
{
#if USMART_ENTIMX_SCAN==1
        Timer4_Init(1000,(u32)sysclk*100-1);//分频,时钟为10K ,100ms中断一次,注意,计数频率必须为10Khz,以和runtime单位(0.1ms)同步.
#endif
        usmart_dev.sptype=1;        //十六进制显示参数
}        [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。