本帖最后由 xuchaopan 于 2020-10-30 15:38 編輯
一、 介紹 STM32Fxx系列單片機(jī)在CubeMX軟件的加持下,大大的提高了開(kāi)發(fā)效率并縮短前期開(kāi)發(fā)時(shí)間。 CubeMX軟件支持意法半導(dǎo)體的所有32位單片機(jī),它可以幫助開(kāi)發(fā)人員新建項(xiàng)目、設(shè)置芯片時(shí)鐘、配置IO功能、定時(shí)器、設(shè)置諸如SPI/UART/I2C等等硬件端口,并且可對(duì)所有的基本參數(shù)進(jìn)行配置,并且CubeMX還可以生成FreeRTOS嵌入式系統(tǒng)。 CubeMX支持Keil、IAR等主流程序編譯環(huán)境的工程生產(chǎn),生成的文件可以用編譯軟件直接打開(kāi)并編譯。 CubeMX包含了STM單片機(jī)的HAL庫(kù),會(huì)根據(jù)開(kāi)發(fā)人員配置的功能自動(dòng)加載HAL庫(kù)文件。 二、 新建工程 1. 打開(kāi)軟件,并開(kāi)始工程及芯片選擇,如下圖 點(diǎn)擊第一個(gè)選項(xiàng),從MCU選擇開(kāi)始。 2. 選擇芯片,如下圖 在搜索框中輸入芯片型號(hào)后,在右下側(cè)會(huì)出現(xiàn)該型號(hào)包含的芯片及封裝,選擇自己使用的封裝后雙擊,則會(huì)進(jìn)入下面這個(gè)界面,此時(shí)就可以開(kāi)始配置芯片功能等參數(shù)了。 3. 芯片時(shí)鐘設(shè)置 我們首先對(duì)芯片的時(shí)鐘源進(jìn)行配置,如下圖 按照序號(hào)選項(xiàng),在③處選擇晶體振蕩器。然后按照下圖設(shè)置 按照序號(hào)順序進(jìn)行操作,在④處設(shè)置想要的系統(tǒng)時(shí)鐘頻率。 4. 工程保存,如下圖 按照序號(hào)順序操作,在②處輸入工程名,③處選擇工程保存的路徑,④處選擇要使用的編譯軟件及版本。然后如下圖配置選擇庫(kù)和生產(chǎn)文件屬性。 5. 生成工程 如下圖,點(diǎn)擊①后會(huì)彈出②處的進(jìn)度條,這時(shí)等待其完成即可。 完成后會(huì)彈出下圖的選項(xiàng),這時(shí)可以選擇直接打開(kāi)工程。 6. 開(kāi)始編寫(xiě)程序 如圖,這就是CubeMX生產(chǎn)的一個(gè)最基本的工程,main.c在User文件夾下,之后就可以在main函數(shù)下開(kāi)始編寫(xiě)程序,在添加程序時(shí),請(qǐng)需注意:如上圖的方框內(nèi)的備注,添加的代碼需要在BEGIN 之后 END之前,這樣在下次CubeMX再生成文件的時(shí)候就不會(huì)被刪除,否則CubeMX會(huì)將你寫(xiě)的代碼全部刪除,這樣就功虧一簣了。 三、 GPIO的使用 1. 配置一個(gè)輸出IO,這里用PA0作演示,如下圖 如圖,按序號(hào)順序選擇①處,我們回到pinout & configuration,在④處用電機(jī)PA0這個(gè)引腳后會(huì)彈出右邊的功能選項(xiàng)表,這里就能看出這個(gè)IO端口支持的功能,這里我們選擇Output(輸出功能)。然后可以對(duì)這個(gè)IO口直接配置。 上圖中①處選擇要設(shè)置的IO口,在下面有5個(gè)選項(xiàng),可以對(duì)其進(jìn)行配置, 在⑥處可以數(shù)額如IO的名稱,在生成后的main.h,就能找到這個(gè)名稱的IO口,之后對(duì)其進(jìn)行調(diào)用即可。 2. 程序編寫(xiě) 按上圖順序打開(kāi)main.h,在④處添加控制宏,之后在main函數(shù)下添加IO控制程序即可,如下圖 由①處可見(jiàn),CubeMX再生成工程后,會(huì)自動(dòng)添加GPIO初始化代碼,不用開(kāi)發(fā)人員自己再去做初始化,CubeMX會(huì)根據(jù)在軟件上的配置進(jìn)行代碼生成, 在②處添加控制代碼即可。 四、 定時(shí)器的使用 1. 設(shè)置一個(gè)定時(shí)器,定時(shí)時(shí)間為1ms,軟件上配置如下圖: 這里是啟用的Tim2作為定時(shí)器源,上圖按照順序進(jìn)行選項(xiàng)設(shè)置, 圖中第④處為設(shè)置定時(shí)器分頻系數(shù),第⑤處設(shè)置的是計(jì)數(shù)器周期,第⑥處啟用自動(dòng)重裝。 2. 然后在后面選項(xiàng)打開(kāi)定時(shí)器中斷,如下圖: 3. 程序編寫(xiě),在程序上打開(kāi)定時(shí),代碼(HAL_TIM_Base_Start(&htim2);)。然后在stm32f1xx_it.c里面找到定時(shí)器2的中斷服務(wù)器程序(TIM2_IRQHandler),在里面添加定時(shí)器中斷標(biāo)志即可。 五、 PWM的使用 1. 舉例配置一個(gè)頻率1kHz的PWM脈沖輸出信號(hào),如下圖: 按照上圖順序選擇,第③處為PWM輸出通道選擇,這里選擇后,在芯片IO圖中第④處可以看到就自動(dòng)生成了一個(gè)PWM-CH1端口。然后⑤、⑥處設(shè)置分頻系數(shù)、定時(shí)器值,⑦處設(shè)置裝填的初始值,其占空比就是⑥/⑦的數(shù)值,也就是二分之一。 2. 程序編寫(xiě):同樣使用庫(kù)函數(shù)(HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);)打開(kāi)定時(shí)器3的第1路PWM輸出;然后可以通過(guò)庫(kù)函數(shù)修改PWM占空比(__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 500);)紅字就是PWM輸出占空比的比例值。 六、 SPI的使用 待補(bǔ)充 七、 I2C的使用 待補(bǔ)充 八、 UART的使用 待補(bǔ)充 九、 ADC的使用 待補(bǔ)充 十、 FreeRTOS的使用 待補(bǔ)充 |