1. 程式人生 > >STM32CubeMX軟體工程描述_USART配置過程

STM32CubeMX軟體工程描述_USART配置過程

學習本文之前可以檢視我前面的文章:

本文接著前面STM32CubeMX文章結合USART例項,講述關於STM32CubeMX新建USART工程,以及新建好完成的軟體工程。最終通過STM32CubeMX工具配置完成實現USART串列埠通訊的軟體工程。

本文使用Keil(MDK-ARM) V5軟體為編譯環境,如果你沒有安裝最新版本的軟體,請安裝Keil(MDK-ARM) V5版本的軟體,具體過程可以參考我的一篇文章:

關於本文的更多詳情請往下看。

Ⅱ、STM32CubeMX新建USART工程

在上一篇文章簡單講述了基於IO新建一個工程的步驟,本文基於USART簡單講述一下STM32CubeMX新建UART串列埠傳送工程。

(我們還是以STM32F103E為例來講述,如果你的板子是STM32其他型號晶片,在選擇晶片時對應即可)

1.新建工程基本步驟

STM32CubeMX新建工程前面的基本步驟大致如下幾步(具體請看我上一篇文章):

1.開啟STM32CubeMX軟體,點選“新建工程”

2.選擇MCU 或 選擇(ST官方)開發板

3.工程配置

2.Pinout配置

這裡我們配置IO(定義PF11引腳為LED)、RCC(使用HSE)、USART(串列埠)。

A.配置PF11引腳為輸出模式

第一步:放大晶片圖示,找到PF11(可以通過Find查詢)

第二步:配置為輸出選中PF11 -> 左鍵 -> 彈出列表 -> 選中“GPIO_Output”

B.配置RCC

PCC配置有三項,我們這裡只配置HSE高速外部時鐘,其他兩項LSE外部低速時鐘MCO時鐘輸出預設配置。

選擇HSE高速外部時鐘為“Crystal”,對應的引腳自動改變,如下圖:

C.配置USART(串列埠)

USART的配置有好幾種,本文就以最基礎,也是最常見的一種”UART非同步序列通訊”配置來講述。

選擇USART1模式為“asynchronous”對應的引腳自動轉換為USART。

3.Clock配置

對於系統時鐘應該都知道它的作用,就是驅動整個晶片工作的心臟,如果沒有了它,就等於人沒有了心跳。時鐘的快慢也就決定了程式的快慢。

STM32的時鐘樹功能比較強大,分頻、倍頻可以根據你的需求配置出多種時鐘。STM32CubeMX這個工具在這一塊也是做的比較人性化的,可以直觀的看見具體配置,而且有錯誤提示(注意:不同型號晶片的時鐘樹可能不同,但大同小異),我們配置為HSE,如下圖:

4.“綜合”配置

這裡的配置相當於初始化一些配置,集齊了前面的引腳對應的初始化配置,所以叫“綜合配置”。

由於我們主要配置了IO 和 USART,所以在這個選項裡面,重點關心的就是這兩項。

A.IO(PF11)配置

B.USART配置

5.最後生成程式碼、編譯下載

這些步驟不是今天的重點,詳細過程可以參看上一篇文章。

生成的原始程式碼“STM32CubeMX_USART配置(原始版)”可到我360雲盤下載:

6.新增程式碼

在main.c檔案中新增“延時函式”:

voidTestDelay(uint32_t cnt)

{

  while(cnt–);

}

在主函式中新增下圖程式碼:

新增以上程式碼就能實現:間隔(約0.5S)LED亮滅變化一次,且串列埠列印資料。

STM32CubeMX_USART配置(修改版),提供給大家下載地址(360雲盤):

Ⅲ、軟體工程說明

接下來講述一下使用STM32CubeMX新建的軟體工程(MDK-ARM版本)。

1.目錄結構

在MDK-ARM工程中,可以看到四個目錄,分別是:

HAL庫:這個庫類似於標準外設庫(在Drivers目錄下)

啟動檔案startup_stm32f103xe.s:這個檔案也和標準外設庫裡面檔案startup_stm32f10x_hd.s類似。

User使用者應用:這個目錄下是使用者新增原始碼檔案的目錄,如果要新增新檔案可以在這裡新增。

CMSIS微控制器軟體介面標準:這個目錄也是屬於底層的程式碼(和我之前使用標準外設庫建立的軟體工程類似,也是位於Drivers目錄下)。

2.新增使用者程式碼區域

開啟使用STM32CubeMX新建的軟體工程可以看見很多地方有成對的註釋程式碼“USER CODE BEGIN”和“USERCODE END”,這兩個註釋之間就是使用者新增自己程式碼的區域。如main.c檔案下就有多處使用者程式設計區域:

3.初始化配置程式碼描述

當我們使用STM32CubeMX新建軟體工程後,開啟軟體可以看見裡面有很多程式碼就是通過STM32CubeMX工具自動生成的(是STM32CubeMX的特性),下面大概講述一下本文生成的程式碼。

A.四個主初始化程式碼:

SystemClock_Config();     時鐘配置

MX_GPIO_Init();          IO初始化(使用者需求)

MX_USART1_UART_Init(); USART初始化(使用者需求)

這四個主初始化配置程式碼中,前面兩個基本上是使用STM32CubeMX工具生成都有的程式碼,後面兩個才是使用者根據自己需求配置的程式碼。

這個屬於軟體工程的標配,主要對初始化(預設)FLASH和NVIC等。

這個函式會使程式不能訪問FLASH,也就是為什麼我們程式在執行的時候不能下載程式碼的原因,解決的辦法:1.不呼叫該函式; 2.使MCU處於復位狀態下載程式碼。

當你使用以前標準外設庫開發過STM32,知道時鐘初始化程式碼,那麼這個函式應該很熟悉。其實這裡的配置就是上面說的RCC配置(時鐘樹),引數就是時鐘樹對應的值。看時鐘樹就很容易理解。

位於main.c檔案。

D. MX_GPIO_Init();

這個函式是我們配置的IO函式(對PF11引腳初始化,很簡單),位於main.c檔案。

和以前使用標準外設庫開發類似,其中的引數就是上面“綜合配置” 裡設定的。

E. MX_USART1_UART_Init();

這個函式是我們配置的USART,位於main.c檔案。

和以前使用標準外設庫開發類似,其中的引數就是上面“綜合配置” 裡設定的,波特率、資料位數、停止位等。

、說明

以上簡單講述了使用STM32CubeMX生成的軟體工程,後續會定期更新使用STM32CubeMX新建各種外設資源工程的文章,敬請等待。

如果是STM32初學者的話,不建議立刻使用這個工具來開發,建議先學習標準外設庫開發,因為這個工具生產的程式碼(HAL庫)相比以前標準外設庫理解起來相對困難一點。

以上總結僅供參考,若有不對之處,敬請諒解。

Ⅴ、最後

更多精彩文章我將第一時間在微信公眾號裡面分享,對本文有什麼疑問可微信留言。

本著免費分享的原則,方便大家手機學習知識,定期在微信平臺分享技術知識。如果你覺得分享的內容對你有用,又想了解更多相關的文章,請用微信搜尋“EmbeddDeveloper” 或者掃描下面二維碼、關注,將有更多精彩內容等著你。

        </div>
            </div>
        </article>