nbsp; TIMER_SET_PRESCALE_VALUE(TIMER0, 23); //设置预分频器,将时钟源分频为24 TIMER_SET_CMP_VALUE(TIMER0, 62500); //设置比较器值,产生1秒定时器 NVIC_EnableIRQ(TMR0_IRQn); TIMER_EnableInt(TIMER0); TIMER_Start(TIMER0);} int main(){ /* setting UART0_CLK clock source and UART0 clock divider */ CLK_EnableModuleClock(UART0_MODULE); CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0_S_HIRC, CLK_CLKDIV_UART(1)); UART_Open(UART0, 115200); TIMER0_INIT(); while(1){ printf("TMR0_COUNT = %dn", TMR0_COUNT); CLK_SysTickDelay(1000); //打印一次后延时1秒 } return 0;}
你可以通过两个途径来消除误差:
1. 误差来自定时器的时钟源精度,使用外部时钟源代替内部高速时钟,可以提高定时器准确性。若使用外部时钟源后依然存在误差,那么使用精度更高的时钟源可能能降低误差。
2. 误差来自预分频器的设置。在设置预分频器时,频率必须精确地被分频。预分频器分频越大,频率的错误率越高。您可以通过尝试不同的预分频器值,以获得最小误差,例如以2或3的倍数进行预分频会更好。
nbsp; TIMER_SET_PRESCALE_VALUE(TIMER0, 23); //设置预分频器,将时钟源分频为24 TIMER_SET_CMP_VALUE(TIMER0, 62500); //设置比较器值,产生1秒定时器 NVIC_EnableIRQ(TMR0_IRQn); TIMER_EnableInt(TIMER0); TIMER_Start(TIMER0);} int main(){ /* setting UART0_CLK clock source and UART0 clock divider */ CLK_EnableModuleClock(UART0_MODULE); CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0_S_HIRC, CLK_CLKDIV_UART(1)); UART_Open(UART0, 115200); TIMER0_INIT(); while(1){ printf("TMR0_COUNT = %dn", TMR0_COUNT); CLK_SysTickDelay(1000); //打印一次后延时1秒 } return 0;}
你可以通过两个途径来消除误差:
1. 误差来自定时器的时钟源精度,使用外部时钟源代替内部高速时钟,可以提高定时器准确性。若使用外部时钟源后依然存在误差,那么使用精度更高的时钟源可能能降低误差。
2. 误差来自预分频器的设置。在设置预分频器时,频率必须精确地被分频。预分频器分频越大,频率的错误率越高。您可以通过尝试不同的预分频器值,以获得最小误差,例如以2或3的倍数进行预分频会更好。
举报