<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32固件庫(kù)V3.5.0的CMSIS文件詳細(xì)說(shuō)明

          STM32固件庫(kù)V3.5.0的CMSIS文件詳細(xì)說(shuō)明

          作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
          1.首先選擇啟動(dòng)文件:根據(jù)自己所用芯片的型號(hào),選擇正確的啟動(dòng)文件。例如選擇STM32F107系列的處理器,我們就選擇startup_stm32f10x_hd.s。在這個(gè)文件里首先要定義自己堆棧的大小,根據(jù)自己的需要確定。文件中已經(jīng)定義好了中斷向量的位置及堆棧的初始化操作。

          Reset_HandlerPROC

          本文引用地址:http://www.ex-cimer.com/article/201611/322716.htm

          EXPORTReset_Handler[WEAK]

          IMPORT__main

          IMPORTSystemInit

          LDRR0, =SystemInit

          BLXR0

          LDRR0, =__main

          BXR0

          ENDP

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

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

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

          ② 定義是否包含標(biāo)準(zhǔn)外設(shè)庫(kù),#definedUSE_STDPERIPH_DRIVER

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

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

          ④ 采用枚舉的方式定義中斷號(hào)。

          ⑤ 包含core_cm3.h,system_stm32f10x.h。

          #include "core_cm3.h"

          #include "system_stm32f10x.h"

          #include

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

          ⑦ 定義外設(shè)結(jié)構(gòu)體,地址及用到的常量。

          ⑧ 包含stm32f10x_conf.h來(lái)配置外設(shè)。

          #ifdef USE_STDPERIPH_DRIVER

          #include "stm32f10x_conf.h"

          #endif

          ⑨ 定義位操作的宏。

          3.system_stm32f10x.h和system_stm32f10x.c,這兩個(gè)文件中:

          ① 定義一個(gè)全局變量:extern uint32_t SystemCoreClock:系統(tǒng)時(shí)鐘頻率與此變量的選擇有關(guān)。

          #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():這個(gè)函數(shù)就是啟動(dòng)文件中調(diào)用的函數(shù)。

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

          注:利用此文件設(shè)置系統(tǒng)的時(shí)鐘具有一定的局限性,所以在編寫程序時(shí)建議不要用他,而利用標(biāo)準(zhǔn)外設(shè)庫(kù)中的stm32f10x_rcc中的函數(shù)進(jìn)行設(shè)置。

          4.stm32f10x_conf.h

          配置需要的標(biāo)準(zhǔn)外設(shè)庫(kù),將不需要用到的外設(shè)庫(kù)屏蔽掉。

          定義assert_Param的模式,選擇#define USE_FULL_ASSERT時(shí),斷言輸出問(wèn)題所在的位置,在調(diào)試時(shí)很有用。

          5.core_cm3:與CM3內(nèi)核相關(guān)的操作

          6. stm32f10x_it中斷實(shí)現(xiàn),在這里編寫相應(yīng)的中斷服務(wù)函數(shù)。

          7.還需要注意的一點(diǎn)是:進(jìn)入main函數(shù)后,除了設(shè)置嘀嗒時(shí)鐘和中斷外,在操作各外設(shè)之前,調(diào)用:RCC_AHBPeriphClockCmd(),RCC_APB1PeriphClockCmd(),RCC_APB2PeriphClockCmd(),啟動(dòng)相應(yīng)的時(shí)鐘,否則外設(shè)就不能正常工作。



          關(guān)鍵詞: STM32固件庫(kù)CMSIS文

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();