實驗說明:
使用GPIO(PC15)來觀察程式進入SysTick_Handler,到下一次進入SysTick_Handler的時間。
Main function:
int main(void)
{
RCC_ClocksTypeDef RCC_Clocks;
RCC_GetClocksFreq(&RCC_Clocks);
SysTick_Config(960000+1);//10ms中斷一次
while ( 1 ) {
if (flag_10ms_period){
flag_10ms_period = 0;
//每10ms要執行的function
}
}
}
SysTick_Handler function:
extern volatile uint8_t flag_10ms_period;
void SysTick_Handler(void)
{
GPIO_SetBits(GPIOC, GPIO_Pin_15);
flag_10ms_period = 1;
GPIO_ResetBits(GPIOC, GPIO_Pin_15);
}
SysTick會依照你使用MCU的系統頻率來計算中斷次數,下圖為STM32F411xC的SysClk,這次範例要計算每10ms中斷一次,計算方式為96000MHz(實體頻率) * 10,並在main.c中加入SysTick_Config(96000*10)。
| STM32F411xC Sysclk |
由下圖觀察到,由於我們在SysTick_Handler中有做將GPIO拉high->low的動作,因此觀察GPIO high的間格時間,即可知道SysTick是否依我們的設計每10m觸發一次。

沒有留言:
張貼留言