本帖最后由 lianyiqun 于 2015-7-8 21:43 編輯
1、首先是啟動文件上存在區別,107的啟動文件當中在進入主函數之前并沒有時鐘的初始化,但是407在main之前就有SystemInit()103如下:
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
LDR R0, =__main
BX R0
ENDP
407如下:
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT SystemInit
IMPORT __main
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
因而,我們在寫103程序的時候要注意在main函數之前寫SystemInit()函數,這樣才能保證時鐘正常,但是407就少了這一步了
http://wenku.baidu.com/link?url= ... xNR_Y79wOeaG9CRxSHq
關于SystemInit()與滴答定時器在stm32f103中的使用說明如下:
void SysTick_Configuration(void)
{
if (SysTick_Config(SystemCoreClock / 100)) //SysTick配置函數
{
while (1);
}
NVIC_SetPriority(SysTick_IRQn, 0x0); //SysTick中斷優先級設置
}
關鍵在于SysTick_Config(SystemCoreClock / 100)的理解
該函數的作用是打開計數器,設置計數周期,并使能中斷。他所傳入的參數,即計數周期。
周期計算方法是:默認情況下處理器在初始化時會調用SystemInit(),把系統頻率設為72Mhz,即SystemCoreClock=72000000;
可以簡單理解為系統一秒數72000000次,那么如果我需要10ms的定時周期,只需要讓重載數為720000,就可達到要求
NVIC_SetPriority(SysTick_IRQn, 0x0); 設置優先級為最高,應根據自己的需要進行調整
最后就是進入中斷處理函數了
void SysTick_Handler(void)
{
}
|