STM32 SysTick 系統時(shí)鐘 超簡(jiǎn)易定時(shí)器SysTick
* @brief Configures the SysTick. 系統時(shí)鐘配置函數main.c
* @param None
* @retval None
*/
void SysTick_Configuration(void)
{
/* Setup SysTick Timer for 100 msec interrupts */
if (SysTick_Config((SystemCoreClock) / 10))// 1/10s=100ms
{
/* Capture error */
while (1);
}
NVIC_SetPriority(SysTick_IRQn, 0x0);
}
/**
* @brief This function handles SysTick Handler. 系統時(shí)鐘中斷函數stm32f10x_it.c
* @param None
* @retval None
*/
void SysTick_Handler(void)
{
/* Generate TIM1 COM event by software */
TIM_GenerateEvent(TIM1, TIM_EventSource_COM);
}
SysTick_Config(SystemFrequency / 10) 函數的形參就是systick重裝定時(shí)器的值。
systck計數頻率為每秒72000000次,所以72000次就是1/10秒,也就是100ms。
SysTick是1個(gè)24bit遞減計數器,通過(guò)對SysTick控制與狀態(tài)寄存器的設置,可選擇HCLK時(shí)鐘(72M)或HCLK的8分頻(9M,缺省是這個(gè))作為SysTick的時(shí)鐘源。
SysTick的重裝寄存器決定了定時(shí)器頻率。
若SysTick的時(shí)鐘源是72M, SystemFrequency = 72000000Hz
所以 SysTick_Config(SystemFrequency / 1000); 就是1ms時(shí)基。
// 1/1000 s=1ms
關(guān)于SysTick校準寄存器的介紹(大多數情況下,我們可以不必理會(huì )它)
校準值寄存器提供了這樣一個(gè)解決方案:它使系統即使在不同的CM3產(chǎn)品上運行,也能產(chǎn)生恒定的SysTick中斷頻率。最簡(jiǎn)單的作法就是:直接把TENMS的值寫(xiě)入重裝載寄存器,這樣一來(lái),只要沒(méi)突破系統極限,就能做到每10ms來(lái)一次 SysTick異常。如果需要其它的SysTick異常周期,則可以根據TENMS的值加以比例計算。只不過(guò),在少數情況下,CM3芯片可能無(wú)法準確地提供TENMS的值(如,CM3的校準輸入信號被拉低),所以為保險起見(jiàn),最好在使用TENMS前檢查器件的參考手冊。
SysTick定時(shí)器除了能服務(wù)于操作系統之外,還能用于其它目的:如作為一個(gè)鬧鈴,用于測量時(shí)間等。要注意的是,當處理器在調試期間被喊停(halt)時(shí),則SysTick定時(shí)器亦將暫停運作。
下面利用 SysTick 產(chǎn)生的 硬件延時(shí)函數 延時(shí) dly_ms 毫秒
/*******************************************************************************
* Function Name : SysTickHandler
* Description :系統時(shí)鐘,一般調教到1MS中斷一次
*******************************************************************************/
void SysTick_Handler(void)
{
if(Timer1)
Timer1--;
}
/********************************************
**函數名:SysTickDelay
**功能:使用系統時(shí)鐘的硬延遲
**注意事項:一般地,不要在中斷中調用本函數,否則會(huì )存在重入問(wèn)題.另外如果屏蔽了全局中斷,則不要使用此函數
********************************************/
volatile u16 Timer1;
void SysTickDelay(u16 dly_ms)
{
Timer1=dly_ms;
while(Timer1);
}
評論