龍祖連
(廣西水利電力職業技術學院,廣西南寧,530023)
在電子信息專業人才培養方案中提到,學生通過專業學習后,具備電子信息產品研發、生產管理、售后服務等崗位能力。STM32課程作為電子信息專業的一門專業核心課,學生掌握STM32編程的程度,決定學生以后就業的崗位的情況;在高職中如何能讓學生學習好STM32編程成為老師的一個難題。傳統的STM32實驗教學編程都是使用寄存器編程或是函數庫編程的,這兩種實驗編程的方法對我們高職的學生來說都是很難學和理解的,首先寄存器的編程方法比較熟悉STM32單片機的寄存器,而單片機的型號不一樣,寄存器的類型也不一樣,這樣一來學生就得去記很多的寄存器;其次庫函數的編程方法,雖然ST公司做有很多的標準函數庫,但去查找也是很難的,同時不同的公司也會做自己的函數庫,這樣學生在使用的時候很難分清函數庫的調用情況。那有沒有有一種能讓我們高職的學生容易上手、容易理解的方法去學生STM32單片機呢?這就是本文將要闡述的STM32CubeMX圖形化編程。
STM32CubeMX 是ST 意法半導體近幾年來大力推薦的STM32 芯片圖形化配置工具[5],直接由圖形界面簡單配置下,生成初始化代碼,并對外設做了進一步的抽象,讓開發人員更只專注應用的開發,可以大大減輕開發工作時間和費用,提高開發效率[1]。STM32CubeMX幾乎覆蓋了STM32全系列芯片。在CubeMX上,通過傻瓜化的操作便能實現相關配置,最終能夠生成C語言代碼,支持多種工具鏈,比如MDK、IAR For ARM、TrueStudio等,省去了我們配置各種外設的時間,大大的節省了時間。
在當前高校的電子類的專業高級的單片機編程基本上都是使用STM32單片機,因為它是32位的單片機,在做系統或產品上它具有工作效率高、運行速度快、成本低等特點,都得到廣大師生的使用[3]。而目前多數的高校對STM32單片機的教學基本上使用寄存器編程教學或庫函數編程教學。
進行具體的項目開發前,做好項目創建工作,通常包括如下步驟:
(1)新建工程項目的文件夾和子文件夾(如user、output、listing等);
(2)使用MDK新建(或打開項目),選擇目標CPU、添加CMSIS核心、STM32啟動代碼和外設驅動程序,構成運行環境;
(3)添加包含main()函數的主程序文件;
(4)配置目標選項。
(1)函數庫編寫閃爍LED部分函數,如圖1所示。

圖1 函數庫編寫閃爍LED部分函數
(2)寄存器編寫閃爍LED部分函數,如圖2所示。

圖2 寄存器編寫閃爍LED部分函數
STM32庫函數本質上是對外設寄存器直接編程,只是為了方便應用封裝成了函數。所以用戶的應用程序也可以繞過庫函數,直接對寄存器編程。直接對寄存器編程的代碼效率最高。不過,需要花費較多的時間學習和查閱STM32數據手冊,這個過程繁瑣、易錯,難以移植。
使用STM32CUberMX開發流程如下:
(1)在STM32CubeMX中直觀的配置MCU;
(2)生成開發工程;
(3)編寫功能代碼;
(4)配置目標選項。
(1)打開STM32CubeMX軟件,選擇ACCESS TO MCU SELECTOR新建工程,如圖3所示。

圖3 STM32CubeMX軟件界面
(2)選擇開發板的芯片及芯片的封裝類型,如圖4所示。

圖4 軟件界面芯片選擇
(3)選擇Pinout&Configuration菜單,點擊Categorier/System Core/SYS,在Mode下面對應的選擇,完成之后在右邊的芯片就出現對應的標識,如圖5所示。

圖5 SYS配置選項
(4)配置時鐘選項,如圖6所示。
(5)配置芯片引腳輸入/輸出及其他特性(及LED2的連接引腳),如圖7所示。

圖6 時鐘選項

圖7 芯片引腳配置
(6)點擊Clock Configuration(時鐘源配置選項),對時鐘源進行配置,如圖8所示。

圖8 時鐘源配置
(7)點擊Projiect Manager(工程管理)進行配置,首先在界面選擇Project選項,如圖9所示。

圖9 工程管理配置
其次,點擊Code Generator(代碼生成器)進一步配置(重點),如圖10所示。

圖10 代碼生成器配置
(8)點擊GENERATE CODE創建工程,如圖11所示。

圖11 代碼生成界面
(9)點擊Open Projiect(打開工程),就自動的關聯打開MDK-ARM V5軟件并創建工程保存在文件夾里,如圖12所示。

圖12 打開工程文件
(10)在MDK-ARM軟件里面找到main.c文件中主函數里的while循環語句添加兩句語句就可以實現閃爍的LED了,如圖13所示。

圖13 代碼修改界面
注意:所有自己編寫的代碼請放在/* USER CODE BEGIN XXX */ /* USER CODE END XXX */ 之間,這樣我們修改工程的時候你自己寫的代碼就不會被刪除。
本文以STM32單片機控制閃爍的LED實驗為例,分別以寄存器、庫函數和STM32CubeMX 三種編程開發模式去實現閃爍的LED控制。從編程過程我們發現寄存器和庫函數編程中都需要導入很多都文件,特別是IO口的初始化和時鐘的配置都是需要花費很多的時間去理解;而使用STM32CubeMX圖形化編程,我們只需要簡單的圖形化配置就可以完成代碼的生成及實現。通過多年的教學實驗,對三種STM32編程特點進行了總結和對比,如表1所示。

表1 三種編程特點對比表
總之,在實踐教學中,我們使用STM32CubeMX圖形化編程開發做設計,簡單、易懂,學生的接受情況也比較好,相對之前的寄存器和庫函數編程教學,取得了良好的效果。使用STM32CubeMX圖形化進行配置,及使用HAL庫進行開發,這樣極大的縮短了新建工程的時間,而且時鐘配置和中斷配置都更加簡單方便,更適合我們高職學生的學習。