1. 程式人生 > >ucos-II移植到stm32上關於systick部分的修改

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裡面有一個關於

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(); 實現滴答時鐘的初始化。