systick初始化一般放在创建第一个任务里,具体说是在OSInit(); 之后的第一个任务开始处,在早期版本的库文件中包含stm32f10x_systick.c和stm32f10x_systick.h两个文件,
因此我们只要在第一个任务开始处,调用下面这个函数即可。SysTick_Config里面所调用的函数就定义在stm32f10x_systick.c中。
void SysTick_Config(void)
{
RCC_ClocksTypeDef rcc_clocks;
INT32U cnts;
RCC_GetClocksFreq(&rcc_clocks);
cnts = (INT32U)rcc_clocks.HCLK_Frequency/OS_TICKS_PER_SEC;
SysTick_SetReload(cnts);
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
SysTick_CounterCmd(SysTick_Counter_Enable);
SysTick_ITConfig(ENABLE);
}
但是后来的版本,stm32f10x_systick.c和stm32f10x_systick.h两个文件都不存在了,固件库中core_cm3.h里面有一个关于SysTick定时器的函数 static __INLINE uint32_t SysTick_Config(uint32_t ticks);采用下面的方法,
static void Systick_init(void); //函数声明
static void Systick_init(void)
{
RCC_ClocksTypeDef rcc_clocks;
RCC_GetClocksFreq(&rcc_clocks); //调用标准库函数,获取系统时钟。
SysTick_Config(rcc_clocks.HCLK_Frequency / OS_TICKS_PER_SEC); //初始化并使能 SysTick
//OS_TICKS_PER_SEC是在os_cfg.h中定义的
}
在第一个任务开始处,调用Systick_init(); 实现滴答时钟的初始化。
关键字:ucos-II 移植到 stm32 systick『本文转载自网络,版权归原作者所有,如有侵权请联系删除』