Ⅰ、寫在前面
學習本文之前可以查看我前面的文章:
STM32CubeMX使用方法及功能介紹
STM32CubeMX新建工程+基本IO配置過程
本文接著前面STM32CubeMX文章結合USART實例,講述關于STM32CubeMX新建USART工程,以及新建好完成的軟件工程。最終通過STM32CubeMX工具配置完成實現USART串口通信的軟件工程。
本文使用Keil(MDK-ARM) V5軟件為編譯環境,如果你沒有安裝最新版本的軟件,請安裝Keil(MDK-ARM) V5版本的軟件,具體過程可以參考我的一篇文章:
MDK-ARM下載與安裝
關于本文的更多詳情請往下看。
Ⅱ、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云盤下載:
https://yunpan.cn/cMPy7AbArtxQ8 訪問密碼 e92f
6.添加代碼
在main.c文件中添加“延時函數”:
voidTestDelay(uint32_t cnt)
{
while(cnt--);
}
在主函數中添加下圖代碼:
添加以上代碼就能實現:間隔(約0.5S)LED亮滅變化一次,且串口打印數據。
STM32CubeMX_USART配置(修改版),提供給大家下載地址(360云盤):
https://yunpan.cn/cMPKPHVbJtNCB 訪問密碼 415b
Ⅲ、軟件工程說明
接下來講述一下使用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.四個主初始化代碼:
HAL_Init(); HAL庫底層初始化
SystemClock_Config(); 時鐘配置
MX_GPIO_Init(); IO初始化(用戶需求)
MX_USART1_UART_Init();USART初始化(用戶需求)
這四個主初始化配置代碼中,前面兩個基本上是使用STM32CubeMX工具生成都有的代碼,后面兩個才是用戶根據自己需求配置的代碼。
B. HAL_Init();
這個屬于軟件工程的標配,主要對初始化(默認)FLASH和NVIC等。
這個函數會使程序不能訪問FLASH,也就是為什么我們程序在運行的時候不能下載代碼的原因,解決的辦法:1.不調用該函數; 2.使MCU處于復位狀態下載代碼。
C. SystemClock_Config();
當你使用以前標準外設庫開發過STM32,知道時鐘初始化代碼,那么這個函數應該很熟悉。其實這里的配置就是上面說的RCC配置(時鐘樹),參數就是時鐘樹對應的值。看時鐘樹就很容易理解。
位于main.c文件。
D. MX_GPIO_Init();
這個函數是我們配置的IO函數(對PF11引腳初始化,很簡單),位于main.c文件。
和以前使用標準外設庫開發類似,其中的參數就是上面“綜合配置”里設置的。
E. MX_USART1_UART_Init();
這個函數是我們配置的USART,位于main.c文件。
和以前使用標準外設庫開發類似,其中的參數就是上面“綜合配置”里設置的,波特率、數據位數、停止位等。
Ⅳ、說明
以上簡單講述了使用STM32CubeMX生成的軟件工程,后續會定期更新使用STM32CubeMX新建各種外設資源工程的文章,敬請等待。
如果是STM32初學者的話,不建議立刻使用這個工具來開發,建議先學習標準外設庫開發,因為這個工具生產的代碼(HAL庫)相比以前標準外設庫理解起來相對困難一點。
以上總結僅供參考,若有不對之處,敬請諒解。
-
keil
+關注
關注
68文章
1214瀏覽量
167170 -
USART
+關注
關注
1文章
195瀏覽量
30934 -
stm32cubemx
+關注
關注
5文章
284瀏覽量
14915
發布評論請先 登錄
相關推薦
評論