色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統 > 設計應用 > STM32固件庫V3.5.0的CMSIS文件詳細說明

          STM32固件庫V3.5.0的CMSIS文件詳細說明

          作者: 時間:2016-11-28 來源:網絡 收藏
          1.首先選擇啟動文件:根據自己所用芯片的型號,選擇正確的啟動文件。例如選擇STM32F107系列的處理器,我們就選擇startup_stm32f10x_hd.s。在這個文件里首先要定義自己堆棧的大小,根據自己的需要確定。文件中已經定義好了中斷向量的位置及堆棧的初始化操作。

          Reset_HandlerPROC

          本文引用地址:http://cafeforensic.com/article/201611/322716.htm

          EXPORTReset_Handler[WEAK]

          IMPORT__main

          IMPORTSystemInit

          LDRR0, =SystemInit

          BLXR0

          LDRR0, =__main

          BXR0

          ENDP

          通過上面的代碼可以看到先執(zhí)行SystemInit()函數在進入main()函數。SystemInit()函數在文件system_stm32f10x.c中有定義。

          2.:這個頭文件包含了STM32的大部份定義:

          ① 定義了芯片的類型,例如:#define STM32F10X_CL

          ② 定義是否包含標準外設庫,#definedUSE_STDPERIPH_DRIVER

          ③ 定義外部振蕩器頻率,#definedHSE_VALUE

          上面的三個定義,最好在編譯器選項中定義好,這樣就不用修改stm32f10x.h文件,最好不要修改這個文件。

          ④ 采用枚舉的方式定義中斷號。

          ⑤ 包含core_cm3.h,system_stm32f10x.h。

          #include "core_cm3.h"

          #include "system_stm32f10x.h"

          #include

          ⑥ 定義數據類型,例如:typedef uint32_tu32此外還定義了FlagStatus,ITStatus及ErrorStatus等。

          ⑦ 定義外設結構體,地址及用到的常量。

          ⑧ 包含stm32f10x_conf.h來配置外設。

          #ifdef USE_STDPERIPH_DRIVER

          #include "stm32f10x_conf.h"

          #endif

          ⑨ 定義位操作的宏。

          3.system_stm32f10x.h和system_stm32f10x.c,這兩個文件中:

          ① 定義一個全局變量:extern uint32_t SystemCoreClock:系統時鐘頻率與此變量的選擇有關。

          #ifdef SYSCLK_FREQ_HSE

          uint32_t SystemCoreClock= SYSCLK_FREQ_HSE;

          #elif defined SYSCLK_FREQ_24MHz

          uint32_t SystemCoreClock= SYSCLK_FREQ_24MHz;

          #elif defined SYSCLK_FREQ_36MHz

          uint32_t SystemCoreClock= SYSCLK_FREQ_36MHz;

          #elif defined SYSCLK_FREQ_48MHz

          uint32_t SystemCoreClock= SYSCLK_FREQ_48MHz;

          #elif defined SYSCLK_FREQ_56MHz

          uint32_t SystemCoreClock= SYSCLK_FREQ_56MHz;

          #elif defined SYSCLK_FREQ_72MHz

          uint32_t SystemCoreClock= SYSCLK_FREQ_72MHz;

          #else

          uint32_t SystemCoreClock= HSI_VALUE;

          #endif

          ② SystemInit():這個函數就是啟動文件中調用的函數。

          ③ SystemCoreClockUpdate():更新SystemCoreClock的值,與系統頻率一致。

          注:利用此文件設置系統的時鐘具有一定的局限性,所以在編寫程序時建議不要用他,而利用標準外設庫中的stm32f10x_rcc中的函數進行設置。

          4.stm32f10x_conf.h

          配置需要的標準外設庫,將不需要用到的外設庫屏蔽掉。

          定義assert_Param的模式,選擇#define USE_FULL_ASSERT時,斷言輸出問題所在的位置,在調試時很有用。

          5.core_cm3:與CM3內核相關的操作

          6. stm32f10x_it中斷實現,在這里編寫相應的中斷服務函數。

          7.還需要注意的一點是:進入main函數后,除了設置嘀嗒時鐘和中斷外,在操作各外設之前,調用:RCC_AHBPeriphClockCmd(),RCC_APB1PeriphClockCmd(),RCC_APB2PeriphClockCmd(),啟動相應的時鐘,否則外設就不能正常工作。



          評論


          技術專區(qū)

          關閉