应该是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]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>