单片机是stm8S003F3,内部RC16M时钟,用的是TIM1,两块板子同一个程序,定时时间有误差,且不是同一块板子还不一样,如10ms定时,一块板子测出来是9.9ms,另一块板子测出来是10.1ms。
不知道是哪里的问题,怀疑是不是内部RC导致的,大家有没有遇到过,还有其它什么原因。程序如下
void bsp_ConfgiSysClk(SYS_CLK_E _iSysClk)
{
if (_iSysClk == HSI_16M)
{
/* 自动切换, 切换到内部高速时钟HSI, 禁止系统时钟中断, 关闭当前的时钟源 */
CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); /* 设置内部高速RC时钟HSI为时钟源,分频系数为1 */
while (CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == RESET); /* 等待HSI时钟稳定 */
}
}
void TIM1_Config(void)
{
TIM1_TimeBaseInit(15, TIM1_COUNTERMODE_UP, 999, 0);
TIM1_SetCounter(0);/* 将计数器初值设为0 */
TIM1_ARRPreloadConfig(DISABLE); /* 预装载不使能 */
TIM1_ITConfig(TIM1_IT_UPDATE , ENABLE); /* 计数器向上计数/向下计数溢出更新中断 */
TIM1_Cmd(ENABLE); /* 使能TIM1 */
}
INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)
{
TIM1_ClearITPendingBit(TIM1_IT_UPDATE);
TOGGLE_LED;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
呃, 算错了, 惭愧, 那STM8的内部RC不能满足你, 事实上 STM8的内部RC已经算精度不错的了,,,其它MCU的内部RC更惨...10%的都有
一周热门 更多>