一,ARM(Cortex Microcontroller Software Interface? ? ? ? ? Standard)
? ? ? ? ? ARM Cortex? 微控制器軟件接口標準(Cortex Microcontroller Software Interface Standard)是 CortexM 處理器系列的與供應商無關的硬件抽象層。使用CMSIS,可以為處理器和外設實現一致且簡單的軟件接口,從而簡化軟件的重用、縮短微控制器新開發人員的學習過程,并縮短新設備的上市時間。
????????ARM 是一個做芯片標準的公司,它負責的是芯片內核的架構設計,而TI、ST這樣的公司,他們并不做標準,他們是芯片公司,他們是根據 ARM 公司提供的芯片內核標準設計自己的芯片。所以,任何一個做 Cortex M3 芯 片 ,他們的內核結構都是一樣的,不同的是他們的存儲器容量, 片上外設 IO 以及其他模塊的區別
二,標準庫與HAL庫
????????1? . 寄存器
????????????????·寄存器眾多,需要經常翻閱芯片手冊,費時費力;
???????????????·更大靈活性,可以隨心所欲達到自己的目的;
? ? ? ? ? ? ? ? ·深入理解單片機的運行原理,知其然更知其所以然。
????????2. 標準庫
?????????????? ?·將寄存器底層操作都封裝起來,提供一整套接口(API)供開發者調用
? ? ? ? ? ? ? ? ·每款芯片都編寫了一份庫文件,也就是工程文件里stm32F1xx…之類的;
? ? ? ? ? ? ? ? ·配置結構體變量成員就可以修改外設的配置寄存器,從而選擇不同的功能;
? ? ? ? ? ? ? ? ·大大降低單片機開發難度,但是在不同芯片間不方便移植。
????????3. HAL庫(Hardware Abstraction Layer)
????????????????ST公司目前主力推的開發方式,新的芯片已經不再提供標準庫;
????????????????為了實現在不同芯片之間移植代碼;
????????????????為了兼容所有芯片,導致代碼量龐大,執行效率低下。
三,常見文件意義
????????startup_stm32f102xb.s
????????????????啟動文件,用于初始化硬件、設置堆棧和中斷向量表,然后跳轉到 C/C++ 的主程序入口點( main 函數)。
????????stm32f1xx_it.c
????????????????中斷服務例程文件,它包含了處理各種中斷的 C 語言函數實現,例如定時器中斷、外部中斷等
????????system_stm32f1xx.c
????????????????定義了系統初始化函數 SystemInit 和系統時鐘更新函數SystemCoreClockUpdate
????????sm32f1xx_hal.c
????????????????HAL庫初始化、系統滴答、HAL庫延時等相關函數
????????stm32f1xx_hal_cortex.c
????????????????內核通用函數定義和聲明,如NVIC、MPU、系統軟復位、Systick等,其實主要是對core_cm3.h 文件的相關函數再次封裝。
????????stm32f1xx.h
????????????????是所有F1系列的頂層頭文件,通過條件編譯來包含某個芯片的頭文件,定義通用的枚舉類型,定義通用的宏定義
????????stm32f103xb.h
????????????????包含:中斷編號定義、外設寄存器結構體類型定義、寄存器映射、寄存器位定義、外設判定
????????stm32f1xx_hal_conf.h
????????????????HAL庫的用戶配置文件,用于裁剪HAL庫、配置晶振參數等
????????stm32hxx_hal_def.h
????????????????包含HAL庫通用的枚舉類型數據和宏定義
????????stm32f1xx_hal_ppp.c
????????????????某任意外設驅動源碼,PPP表示任意外設
????????stm32f1xx_hal_ppp_ex.c
????????????????主要是存放外設的擴展(特殊)功能的驅動源碼,PPP表示任意外設