代码在:2个地方定义初始化了系统滴答时钟1、delay.c中
[AppleScript]
纯文本查看 复制代码
void delay_init(){u32 reload;Sys
tick_CLKSourceConfig(SysTick_CLKSource_HCLK);//选择外部时钟 HCLKfac_us=SystemCoreClock/1000000;//不论是否使用OS,fac_us都需要使用reload=SystemCoreClock/1000000;//每秒钟的计数次数 单位为M reload*=1000000/configTICK_RATE_HZ;//根据configTICK_RATE_HZ设定溢出时间//reload为24位寄存器,最大值:16777216,在72M下,约合0.233s左右fac_ms=1000/configTICK_RATE_HZ;//代表OS可以延时的最少单位 SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk; //开启SYSTICK中断SysTick->LOAD=reload; //每1/configTICK_RATE_HZ秒中断一次SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开启SYSTICK }
2、port.c中也定义了,通过vTaskStartScheduler-->xPortStartScheduler-->vPortSetupTimerInterrupt
[AppleScript]
纯文本查看 复制代码
#if configOVERRIDE_DEFAULT_TICK_CONFIGURATION == 0void vPortSetupTimerInterrupt( void ){/* Calculate the constants required to configure the tick interrupt. */#if configUSE_TICKLESS_IDLE == 1{ulTimerCountsForOneTick = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ );xMaximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick;ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ );}#endif /* configUSE_TICKLESS_IDLE *//* Configure SysTick to interrupt at the requested rate. */portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );}#endif /* configOVERRIDE_DEFAULT_TICK_CONFIGURATION */
按说用其中一个就可以了,但是为什么取消delay中的系统滴答初始化时候,系统跑不起来?
谢谢指教