日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于CMSIS创建典型STM32F4工程

發布時間:2025/4/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于CMSIS创建典型STM32F4工程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ?這次我們來聊聊CMSIS。之前在Kile環境下創建STM32工程的時候,對有些文件的加入總不是很了解,書上或網上建立工程的教程對于這些文件的加入也是一筆帶過,或者直接不說。對于類似名叫core_cm3.h,system_stm32f4xx.c的文件的作用感到比較困惑。在閱讀了《ARM Cortex-m3與Conrtex-m4權威指南》之后,對CMSIS才有了一個比較清楚的了解,也知道為什么工程中需要加入這些文件了。

? ? ? ?以下內容節選自《ARM Cortex-m3與Conrtex-m4權威指南》第三版,Joseph Yiu著,清華大學出版社出版。根據這些描述我將創建一個典型的STM32F4的工程,以便更好的來理解我們對CMSIS的闡述。如果你想深入了解Cortex-m3或Cortex-m4而不是停留在簡單的函數調用的話,我非常建議閱讀本書,它會很好的解答你在學習過程中遇到的很多問題。

1.CMSIS簡介

? ? ? ? CMSIS由ARM開發,它使得微控制器和軟件供應商可以使用一致的軟件結構來開發Cortex微控制器的軟件,許多Cortex-M微控制器的軟件產品都是符合CMSIS的。

? ? ? ? 由于當前龐大的生態系統,對軟件結構進行某種形式的標準化已經非常必要,這樣可以確保多種開發工具和不同軟件解決方案的兼容性。同時,嵌入式系統也變得越來越復雜,開發和軟件測試的工作量也顯著增加了。為了減少開發時間并且降低產品中存在缺陷的風險,軟件重用已經越來越普遍。另外,嵌入式系統的復雜度也增加了對第三方軟件解決方案的依賴。例如,一個嵌入式軟件工程可能會涉及各方面的軟件部件:

·內部開發者開發的軟件
·重用的其他項目的軟件
·微控制器供應商的設備驅動庫
·嵌入式OS
·通信協議棧等其他的第三方軟件產品

? ? ? ? 在這種情況下,各種軟件產品間的配合已經非常關鍵。由于所有這些原因,ARM同各家微控制器供應商、工具供應商和軟件解決方案提供商一道開發了CMSIS——一個涵蓋了大多數Cortex-M處理器和Cortex-M微控制器產品的軟件框架。CMSIS項目仍在不斷更新。

? ? ? ? CMSIS項目有CMSIS-Core、CMSIS-DSP、CMSIS-SVD、CMSIS-RTOS、CMSIS-DAP。我們最能直觀感受到的就是CMSIS-Core。這些項目所做的工作都是對Contex-M芯片的使用進行一個標準化。下面我們來看看CMSIS-Core進行了哪些標準化。

2.CMSIS-Core所做的標準化

(1)處理器外設的標準化定義。

? ? ? ?這里注意區分處理器外設和微控制器的外設的區別,微控制器就像STM32,處理器就像STM32中的Cortex-M,我們知道處理器也是有自己的私房外設的,其中包括嵌套向量中斷控制器(NVIC)中的寄存器、處理器中的系統節拍定時器(SysTick)、可選的存儲器保護單元(MPU)、系統控制塊(SCB)中的多個可編程寄存器以及一些和調試特性相關的軟件可編程寄存器。注意:有些Cortex-M4中的寄存器在Cortex-M3中是不可用的,類似地,Cortex-M3和Cortex-M4中的一些寄存器在Cortex-M0中也是不可用的。

(2)訪問處理器特性的標準化函數。

? ? ? ?其中包括使用NVIC進行中斷控制的多個函數以及訪問處理器中特殊寄存器的函數。若需要的話,也可以直接訪問寄存器,而使用這些函數(有時也被稱作應用編程接口,或者叫API)進行編程有助于提高軟件可移植性。實際上,你可以回憶在core_cm4.h中看到的很多“奇怪”的函數,這里的函數指的就是他們。你可以放心的使用他們而不必擔心這些代碼在其他cortex系列的處理上無法運行,當然前提是代碼得符合CMSIS標準。???????

(3)操作特殊指令的標準化函數。

? ? ? ? ? Cortex-M處理器支持幾個用于特殊目的的指令(例如,等待中斷WFI,用于進入休眠模式),這些指令無法用普通的IEC/ISOC語言生成。CMSIS實現了一組函數,C程序代碼可以利用這些函數實現特殊指令。若沒有這些函數,用戶必須得使用工具鏈相關的解決方案,如內在函數或內聯匯編,才能將特殊指令插入應用程序中,這樣會降低軟件的可重用性,而且為了避免出現錯誤,可能還需要對工具鏈的深入了解。CMSIS為這些特性提供了一種標準的API,這樣應用程序開發者就可以輕松使用了。它們也存在于類似core_cm4.h的文件中。

(4)系統異常處理的標準化命名。

? ? ? ?多個系統異常類型在Cortex-M處理器的架構中有所體現,通過賦予這些系統異常處理標準化的命名,開發適用于多種Cortex-M產品的軟件也就更加容易。這對嵌入式OS開發者尤其重要,因為嵌入式OS需要使用一些系統異常。???????

(5)系統初始化的標準函數。

? ? ? ? 對于多數具有豐富特性的現代微控制器產品,在應用程序開始前都需要配置時鐘電路和電源管理寄存器。在符合CMSIS的設備驅動庫中,這些配置過程由Systemlnit()實現。很顯然,該函數的實際實現是設備相關的,而且可能需要適應多種工程需求。不過,由于有了標準的函數名、函數的標準使用方式以及函數的標準位置,設計者就能很容易地開始使用Cortex-M微控制器。???????

(6)描述時鐘頻率的標準化的變量。

? ? ? ? 這個看起來必要性不是很大,不過有時應用程序代碼需要知道系統當前運行的時鐘頻率。例如,在設置UART波特率分頻器或初始化嵌人式OS使用的SysTick定時器時可能需要這種信息。CMSIS-Core中定義了一個軟件變量SystemCoreClock(用于CMSIS的1.3或者更新的版本,之前的版本為SystemFreq)。

另外,CMSIS-Core還提供了設備驅動庫的通用平臺。每個設備驅動庫看起來都是一樣的,這樣初學者使用設備就更加容易,而且軟件開發人員也可以很輕松地開發出用于多種Cortex-M微控制器產品的軟件。

3.CMSIS-Core的組織結構

? ? ? ? CMSIS文件被集成在微控制器供應商提供的設備驅動庫軟件包中,設備驅動庫中的有些文件是ARM準備的,對于各家微控制器供應商都是一樣的,其他文件則取決于供應商/設備。一般來說,可以將CMSIS定義為以下幾層:

1、內核外設訪問層。名稱定義、地址定義以及訪問內核寄存器和內核外設的輔助函數,這是處理器相關的,由ARM提供。
2、設備外設訪問層。名稱定義、外設寄存器的地址定義以及包括中斷分配、異常向量定義等的系統設計,這是設備相關的(注意:同一家供應商的多個設備可能會使用同一組文件)。
3、外設訪問函數。訪問外設的驅動代碼,這是供應商相關的,而且是可選的。在開發應用程序時,可以選擇使用微控制器供應商提供的外設驅動代碼,或者有必要,也可以直接訪問外設。

? ? ? ?對于外設訪問還提出了另外一層:中間件訪問層。該層在當前的CMSIS版本中不存在,現在的設想為,開發一組用于訪問UART、SPI以及以太網等常見外設的API。若該層存在,中間件開發人員可以基于該層開發自己的應用程序,這樣軟件在設備間移植也就更加容易。各層角色如下圖所示

? ? ? ? 注意在有些情況下,設備驅動庫中可能會包含用于微控制器供應商設計的NVIC的函數(例如可能大部分人都使用過的misc.c文件中的函數),它們是供應商定義的。CMSIS的目標為提供一個共同的起點,微控制器供應商也可以根據自己的意愿添加其他的函數。不過若軟件需要在另外一個微控制器產品上重用,就需要移植。

4、如何使用CMSIS-Core

? ? ? ? ?CMSIS文件位于微控制器供應商提供的設備驅動軟件包中,因此,在使用微控制器供應商提供的設備驅動庫時,就已經在使用CMSIS了。

? ? ? ? ?一般來說,需要做到以下幾點。

(1)將源文件添加到工程中,其中包括:
·設備相關,工具鏈相關的啟動代碼,C或匯編。
·設備相關的設備初始化代碼(如system_stm32f1xx.c)。
·用于外設訪問功能的其他供應商相關的源文件,這是可選的(如GPIO,USART等外設的.c文件)。
·對于CMSIS-Core庫的CMSIS2.00或者之前版本,為了訪問內核寄存器,可能還需要將一個處理器相關的C程序文件(如core_cm3.c)添加到工程中,從CMSIS-Core版本2.10開始就不再需要了(只需要添加core_cm3.h即可)。
(2)將頭文件添加到搜索路徑中,其中包括:
·用于外設寄存器定義和中斷分配定義的設備相關的頭文件(如stm32f1xx.h)。
·用于設備初始化代碼的設備相關的頭文件(如system_stm32f1xx.h)。
·多個處理器相關的頭文件(如core_cm3.h、core_cm4.h,它們對于所有的微控制器供應商都是相同的)。
·其他可選的用于外設訪問的供應商相關的頭文件(如GPIO,USART等外設的.h文件)。
·有些情況下,開發組件中可能會包含一些預安裝的CMSIS支持文件。

? ? ? ?有些情況下,在創建一個新的工程時,集成開發環境(IDE)會自動設置啟動代碼,要不然,還需要手動將設備驅動庫中的啟動代碼(如startup_stm32f401xx.s)添加到工程中。處理器的啟動流程需要啟動代碼,它包括中斷處理所需的異常向量表定義。

具體如下圖所示:


? ? ? ?下面我將利用我下載得到的STM32F4xx_DSP_StdPeriph_Lib_V1.8.0標準庫根據上面第4條如何使用CMSIS-Core的說明來構建一個基于標準庫的STM32F4開發環境。在STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS目錄下有一個叫index的html文件,對其中的CMSIS文件作用做了說明:

? ? ? ? 從中我們可以看出我們要使用的CMSIS-Core文件在Include文件夾中。我們可以看到這里還有CMSIS-DSP項目,日后如果要用微控制器進行DSP之類的,可以來使用這其中的文件,可以看到它甚至還為ARMCC和GCC開發工具做好了相應的庫,如GCC就是一個集成的.a文件,非常方便,也比較高效,那么下面就開始動手吧。

1、首先在桌面新建一個文件夾stm32f4_TestProject。
2、打開并在其中建立一個名叫CMSIS的文件夾,專門存放我們的CMSIS文件;建立MDK文件夾,用來存放工程文件;建立USER文件夾,用來存放應用代碼;建立StdPeriph_Lib文件夾,用來存放外設標準庫函數。
3、在CMSIS中建立Include目錄,加入core_cm4.h、core_cmSimd.h、core_cmInstr.h、core_cmFunc.h、stm32f4xx.h、stm32f4xx.h。繼續在CMSIS目錄中加入啟動文件startup_stm32f401xx.s。加入system_stm32f4xx.c文件
4、在StdPeriph_Lib目錄中視需要加入標準外設啟動庫函數,在USER目錄添加自己的工程文件,和一個stm32f4xx_conf.h控制引入的頭文件即可。
5、打開kile5,新建工程,設備選擇STM32F4RE,而后添加文件到工程,添加頭文件路徑就不再說了。
6,添加宏定義 USE_STDPERIPH_DRIVER,STM32F40XX
7,編譯運行, 0 Error(s), 0 Warning(s).

? ? ? ?實際上可以看到,這就是按照上圖的工程結構來進行搭建的,只有對每一個文件的加入理解了,才能更好的組織工程代碼,使我們的工作更有條理。

?

?

?

?

總結

以上是生活随笔為你收集整理的基于CMSIS创建典型STM32F4工程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。