硬件介紹
今天開始,學習比52更復雜的STM32系列單片機:
軟件介紹?
1. Keil 5 及其 固件包
使用之前的Keil4寫STM32代碼其實也可以,但需要比較復雜的設置,而如果用Keil5會比較方便。
(這里在打開POJIE軟件的時候總是會報錯“?無法成功完成操作 因為文件包含病毒或潛在的垃圾軟件",因此參考了這篇博文解決Win11“無法成功完成操作,因為文件包含病毒或潛在的垃圾軟件“_'零'Bug的博客-CSDN博客)
另外安裝的路徑不要有中文!
安裝完keil5和固件包之后打開keil5的界面:
小插曲:Keil怎樣顯示中文注釋(簡單 有圖)_keil中文注釋_小碼1111的博客-CSDN博客
其實要Keil4一毛一樣,只不過,對于32的編程不能像51那么簡單,簡單創(chuàng)建一個工程寫個main就可以跑起來,STM32的模板工程:
?在Keil5中長這樣:
?mian中一些示例程序,將他編譯之后,接下來就是燒錄的方法了:
燒錄其實有很多種方法,包括串口,J-Link,U-Link,ST-Link等,在這里我使用的燒錄工具是ST-Link:
主要接的就是三根線,GND,SWCLK和SWDIO。打開STM32最小系統(tǒng)的PCB圖,查找SWCLK和SWDIO就可以連接:
如圖,即單片機的A13和A14分別和ST-Link的SWCLK和SWDIO連接:
然后將ST-Link插入電腦的USB口之后,安裝ST-Link的驅動:
右鍵STM32 STlink并選擇“更新驅動程序”,并在電腦中找到驅動程序:
圖標顯示正常,說明安裝成功!
?接下來回到Keil5進行下一步的配置:
點擊這個圖標:
選擇“Debug”,選擇“ST-Link Debugger":
選擇“Output”,勾選上“Create HEX file”:
這就完成了設置,之后就可以進行程序的燒寫:
1. 點擊Load,就可以把程序燒寫進入STM32:
2. 沒有報錯之后,點擊單片機右下角最左側的“復位按鈕”:
3. 此時程序已經成功燒寫,可以觀察到代碼使得LED燈交替閃爍:
2. STM32CubeMX
?CubeMX可以通過界面的方式快速的生成工程文件,首先安裝并打開:(其實這里推薦將固件包的位置改到除了C盤之外的其他盤,但是我就一個C盤沒有分盤,所以就跳過了這一步)
使用STM32CubeMX生成工程文件:
1. 點擊“ACCESS TO MCU SELECTOR”
2.? 點擊之后,在新生成頁面的左上角輸入具體的芯片型號并雙擊:
然后CubeMX就會基于這個芯片生成一個新的界面:
接下來就可以通過在這個界面的操作,自動生成對應的代碼,比如我要進行一個點燈的操作:
1. 同樣,先通過STM32最小系統(tǒng)的PCB圖,查找LED燈對應的電路:
?
可見LED1,2 分別接到了B8和B9并且低電平燈亮,高電平燈滅
2. 在CubeMX界面找到PB8和PB9的引腳,并左鍵點擊:
?這其實就是引腳的復用,此處我希望點燈,那需要這個引腳行使“GPIO_Output”的功能:
此時,再點擊左邊的GPIO選項,就可以看到設置的引腳,并且CubeMX已經自動進行了一些初始化的配置了
?此時再點擊PB8或PB9就可以進行進一步的設置:
?例如,可以設置
輸出的是高電平還是低電平;
輸出的模式是“推挽輸出”還是“開漏輸出”;
是否要拉高或者拉低;
最大傳輸速度;
用戶給的標簽
3. 點擊左側的“SYS”選項,在“Debug”中選擇“Serial Wire”?(串口)
?
?如此一來,就可以進行一些重復的修改。
4. 點擊上側偏右的“Project Manager”大選項進行設置:
注意,項目的路徑不能有中文?。?/span>這里我在C盤創(chuàng)建了一個新的‘?mjm_CubeMX_proj ’文件夾用于保存Cube的項目文件:(Toolchain/IDE別忘了設置成MDK-ARM,這樣在項目生成之后會自動調用Keil)
5. 同樣在“Project Manager”大選項下,左側的“Code Generator”中這樣設置:
6. 最后,點擊右上角的“GENERATE CODE”?:
7. 生成完成之后,點擊中間的“Open Project”:
此時就會自動調用Keil5打開:
8. 注意,先進行編譯:
9.?按照STM32的燒寫步驟,先點擊LOAD,再點擊單片機的復位:
可見LED1,2對應的D3,D5兩盞燈常亮,說明CubeMX生成的代碼沒有問題!
既然代碼沒問題,那么現在可以回過頭來看一下Cube到底生成了啥代碼:
主要觀察main函數:
發(fā)現就是在初始化,如果選中并右鍵點擊這些調用的初始化函數,就可以跳轉到這些函數定義的地方:
?
?其中下圖這條語句就是亮燈的關鍵:
通過再次跳轉這個函數查找定義之后就可以知道,這是一個寫數據的函數,上圖中是往GPIO口的8和9口寫“0”,而經過剛剛的分析,LED燈低電平亮燈,所以這句話可以點燈。
那么既然知道了這個函數的作用,那就可以把這句話稍微修改然后復制到main函數的while 1循環(huán)中:
while (1) { /* USER CODE END WHILE */ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET); //8口對應的LED亮 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET); //9口對應的LED滅 HAL_Delay(1000);//HAL_Delay函數以毫秒為單位,這里delay 1 秒 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET); //8口對應的LED滅 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET); //9口對應的LED亮 HAL_Delay(1000);//HAL_Delay函數以毫秒為單位,這里delay 1 秒 /* USER CODE BEGIN 3 */ }
將代碼燒錄:
這就是最簡單的,通過Cube代碼進行二次開發(fā),實現跑馬燈的嘗試。文章來源:http://www.zghlxwxcb.cn/news/detail-738013.html
同時,通過這個示例也可以看到CubeMX不是萬能的,Cube只能生成初始化的代碼,至于具體項目中main函數中具體的實現,還是要自己敲的!文章來源地址http://www.zghlxwxcb.cn/news/detail-738013.html
到了這里,關于STM32初識---Keil5和CubeMX的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!