龍祖連
(廣西水利電力職業(yè)技術(shù)學(xué)院,廣西南寧,530023)
在電子信息專業(yè)人才培養(yǎng)方案中提到,學(xué)生通過(guò)專業(yè)學(xué)習(xí)后,具備電子信息產(chǎn)品研發(fā)、生產(chǎn)管理、售后服務(wù)等崗位能力。STM32課程作為電子信息專業(yè)的一門專業(yè)核心課,學(xué)生掌握STM32編程的程度,決定學(xué)生以后就業(yè)的崗位的情況;在高職中如何能讓學(xué)生學(xué)習(xí)好STM32編程成為老師的一個(gè)難題。傳統(tǒng)的STM32實(shí)驗(yàn)教學(xué)編程都是使用寄存器編程或是函數(shù)庫(kù)編程的,這兩種實(shí)驗(yàn)編程的方法對(duì)我們高職的學(xué)生來(lái)說(shuō)都是很難學(xué)和理解的,首先寄存器的編程方法比較熟悉STM32單片機(jī)的寄存器,而單片機(jī)的型號(hào)不一樣,寄存器的類型也不一樣,這樣一來(lái)學(xué)生就得去記很多的寄存器;其次庫(kù)函數(shù)的編程方法,雖然ST公司做有很多的標(biāo)準(zhǔn)函數(shù)庫(kù),但去查找也是很難的,同時(shí)不同的公司也會(huì)做自己的函數(shù)庫(kù),這樣學(xué)生在使用的時(shí)候很難分清函數(shù)庫(kù)的調(diào)用情況。那有沒(méi)有有一種能讓我們高職的學(xué)生容易上手、容易理解的方法去學(xué)生STM32單片機(jī)呢?這就是本文將要闡述的STM32CubeMX圖形化編程。
STM32CubeMX 是ST 意法半導(dǎo)體近幾年來(lái)大力推薦的STM32 芯片圖形化配置工具[5],直接由圖形界面簡(jiǎn)單配置下,生成初始化代碼,并對(duì)外設(shè)做了進(jìn)一步的抽象,讓開發(fā)人員更只專注應(yīng)用的開發(fā),可以大大減輕開發(fā)工作時(shí)間和費(fèi)用,提高開發(fā)效率[1]。STM32CubeMX幾乎覆蓋了STM32全系列芯片。在CubeMX上,通過(guò)傻瓜化的操作便能實(shí)現(xiàn)相關(guān)配置,最終能夠生成C語(yǔ)言代碼,支持多種工具鏈,比如MDK、IAR For ARM、TrueStudio等,省去了我們配置各種外設(shè)的時(shí)間,大大的節(jié)省了時(shí)間。
在當(dāng)前高校的電子類的專業(yè)高級(jí)的單片機(jī)編程基本上都是使用STM32單片機(jī),因?yàn)樗?2位的單片機(jī),在做系統(tǒng)或產(chǎn)品上它具有工作效率高、運(yùn)行速度快、成本低等特點(diǎn),都得到廣大師生的使用[3]。而目前多數(shù)的高校對(duì)STM32單片機(jī)的教學(xué)基本上使用寄存器編程教學(xué)或庫(kù)函數(shù)編程教學(xué)。
進(jìn)行具體的項(xiàng)目開發(fā)前,做好項(xiàng)目創(chuàng)建工作,通常包括如下步驟:
(1)新建工程項(xiàng)目的文件夾和子文件夾(如user、output、listing等);
(2)使用MDK新建(或打開項(xiàng)目),選擇目標(biāo)CPU、添加CMSIS核心、STM32啟動(dòng)代碼和外設(shè)驅(qū)動(dòng)程序,構(gòu)成運(yùn)行環(huán)境;
(3)添加包含main()函數(shù)的主程序文件;
(4)配置目標(biāo)選項(xiàng)。
(1)函數(shù)庫(kù)編寫閃爍LED部分函數(shù),如圖1所示。
圖1 函數(shù)庫(kù)編寫閃爍LED部分函數(shù)
(2)寄存器編寫閃爍LED部分函數(shù),如圖2所示。
圖2 寄存器編寫閃爍LED部分函數(shù)
STM32庫(kù)函數(shù)本質(zhì)上是對(duì)外設(shè)寄存器直接編程,只是為了方便應(yīng)用封裝成了函數(shù)。所以用戶的應(yīng)用程序也可以繞過(guò)庫(kù)函數(shù),直接對(duì)寄存器編程。直接對(duì)寄存器編程的代碼效率最高。不過(guò),需要花費(fèi)較多的時(shí)間學(xué)習(xí)和查閱STM32數(shù)據(jù)手冊(cè),這個(gè)過(guò)程繁瑣、易錯(cuò),難以移植。
使用STM32CUberMX開發(fā)流程如下:
(1)在STM32CubeMX中直觀的配置MCU;
(2)生成開發(fā)工程;
(3)編寫功能代碼;
(4)配置目標(biāo)選項(xiàng)。
(1)打開STM32CubeMX軟件,選擇ACCESS TO MCU SELECTOR新建工程,如圖3所示。
圖3 STM32CubeMX軟件界面
(2)選擇開發(fā)板的芯片及芯片的封裝類型,如圖4所示。
圖4 軟件界面芯片選擇
(3)選擇Pinout&Configuration菜單,點(diǎn)擊Categorier/System Core/SYS,在Mode下面對(duì)應(yīng)的選擇,完成之后在右邊的芯片就出現(xiàn)對(duì)應(yīng)的標(biāo)識(shí),如圖5所示。
圖5 SYS配置選項(xiàng)
(4)配置時(shí)鐘選項(xiàng),如圖6所示。
(5)配置芯片引腳輸入/輸出及其他特性(及LED2的連接引腳),如圖7所示。
圖6 時(shí)鐘選項(xiàng)
圖7 芯片引腳配置
(6)點(diǎn)擊Clock Configuration(時(shí)鐘源配置選項(xiàng)),對(duì)時(shí)鐘源進(jìn)行配置,如圖8所示。
圖8 時(shí)鐘源配置
(7)點(diǎn)擊Projiect Manager(工程管理)進(jìn)行配置,首先在界面選擇Project選項(xiàng),如圖9所示。
圖9 工程管理配置
其次,點(diǎn)擊Code Generator(代碼生成器)進(jìn)一步配置(重點(diǎn)),如圖10所示。
圖10 代碼生成器配置
(8)點(diǎn)擊GENERATE CODE創(chuàng)建工程,如圖11所示。
圖11 代碼生成界面
(9)點(diǎn)擊Open Projiect(打開工程),就自動(dòng)的關(guān)聯(lián)打開MDK-ARM V5軟件并創(chuàng)建工程保存在文件夾里,如圖12所示。
圖12 打開工程文件
(10)在MDK-ARM軟件里面找到main.c文件中主函數(shù)里的while循環(huán)語(yǔ)句添加兩句語(yǔ)句就可以實(shí)現(xiàn)閃爍的LED了,如圖13所示。
圖13 代碼修改界面
注意:所有自己編寫的代碼請(qǐng)放在/* USER CODE BEGIN XXX */ /* USER CODE END XXX */ 之間,這樣我們修改工程的時(shí)候你自己寫的代碼就不會(huì)被刪除。
本文以STM32單片機(jī)控制閃爍的LED實(shí)驗(yàn)為例,分別以寄存器、庫(kù)函數(shù)和STM32CubeMX 三種編程開發(fā)模式去實(shí)現(xiàn)閃爍的LED控制。從編程過(guò)程我們發(fā)現(xiàn)寄存器和庫(kù)函數(shù)編程中都需要導(dǎo)入很多都文件,特別是IO口的初始化和時(shí)鐘的配置都是需要花費(fèi)很多的時(shí)間去理解;而使用STM32CubeMX圖形化編程,我們只需要簡(jiǎn)單的圖形化配置就可以完成代碼的生成及實(shí)現(xiàn)。通過(guò)多年的教學(xué)實(shí)驗(yàn),對(duì)三種STM32編程特點(diǎn)進(jìn)行了總結(jié)和對(duì)比,如表1所示。
表1 三種編程特點(diǎn)對(duì)比表
總之,在實(shí)踐教學(xué)中,我們使用STM32CubeMX圖形化編程開發(fā)做設(shè)計(jì),簡(jiǎn)單、易懂,學(xué)生的接受情況也比較好,相對(duì)之前的寄存器和庫(kù)函數(shù)編程教學(xué),取得了良好的效果。使用STM32CubeMX圖形化進(jìn)行配置,及使用HAL庫(kù)進(jìn)行開發(fā),這樣極大的縮短了新建工程的時(shí)間,而且時(shí)鐘配置和中斷配置都更加簡(jiǎn)單方便,更適合我們高職學(xué)生的學(xué)習(xí)。