ucos-II移植到stm32上關於systick部分的修改
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裡面有一個關於
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(); 實現滴答時鐘的初始化。