久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > STM32 SysTick 系統時鐘 超簡易定時器SysTick

STM32 SysTick 系統時鐘 超簡易定時器SysTick

作者: 時間:2016-11-13 來源:網絡 收藏
/**

* @brief Configures the SysTick. 系統時鐘配置函數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);
}

本文引用地址:http://cqxgywz.com/article/201611/316413.htm

NVIC_SetPriority(SysTick_IRQn, 0x0);
}

/**
* @brief This function handles SysTick Handler. 系統時鐘中斷函數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重裝定時器的值。
systck計數頻率為每秒72000000次,所以72000次就是1/10秒,也就是100ms。

SysTick是1個24bit遞減計數器,通過對SysTick控制與狀態寄存器的設置,可選擇HCLK時鐘(72M)或HCLK的8分頻(9M,缺省是這個)作為SysTick的時鐘源。
SysTick的重裝寄存器決定了定時器頻率。

若SysTick的時鐘源是72M, SystemFrequency = 72000000Hz
所以 SysTick_Config(SystemFrequency / 1000); 就是1ms時基。
// 1/1000 s=1ms

關于SysTick校準寄存器的介紹(大多數情況下,我們可以不必理會它)


校準值寄存器提供了這樣一個解決方案:它使系統即使在不同的CM3產品上運行,也能產生恒定的SysTick中斷頻率。最簡單的作法就是:直接把TENMS的值寫入重裝載寄存器,這樣一來,只要沒突破系統極限,就能做到每10ms來一次 SysTick異常。如果需要其它的SysTick異常周期,則可以根據TENMS的值加以比例計算。只不過,在少數情況下,CM3芯片可能無法準確地提供TENMS的值(如,CM3的校準輸入信號被拉低),所以為保險起見,最好在使用TENMS前檢查器件的參考手冊。
SysTick定時器除了能服務于操作系統之外,還能用于其它目的:如作為一個鬧鈴,用于測量時間等。要注意的是,當處理器在調試期間被喊停(halt)時,則SysTick定時器亦將暫停運作。

下面利用 SysTick 產生的 硬件延時函數 延時 dly_ms 毫秒

/*******************************************************************************
* Function Name : SysTickHandler
* Description :系統時鐘,一般調教到1MS中斷一次
*******************************************************************************/

void SysTick_Handler(void)
{
if(Timer1)
Timer1--;
}

/********************************************
**函數名:SysTickDelay
**功能:使用系統時鐘的硬延遲
**注意事項:一般地,不要在中斷中調用本函數,否則會存在重入問題.另外如果屏蔽了全局中斷,則不要使用此函數
********************************************/
volatile u16 Timer1;
void SysTickDelay(u16 dly_ms)
{
Timer1=dly_ms;
while(Timer1);
}



評論


技術專區

關閉