最近這段時間因為成謎於物聯網中無法自拔,所以獨自在網際網路的世界中汲取著為數不多的知識,雖然教程有很多,但是實際的可以從最基礎的開始寫的教程並不常見,所以在自己經過很長時間的學習,在這裡記錄一下自己從0開始到點亮STM32F103C8T6這塊小板上LED的過程。
基礎環境介紹
安裝java環境
sudo apt install default-jre
下載STM32CubeMX,下載連結看底部
下載的zip壓縮包中,有linux和exe的版本,自行選擇安裝,如果碰到安裝linux報錯,有可能是64位系統不兼容32位程序庫,安裝sudo apt install libc6-i386
給linux文件執行權限sudo chmod a+x SetupSTM32CubeMX-6.0.1.linux
執行安裝: sudo ./SetupSTM32CubeMX-6.0.1.linux
2.stlink驅動安裝3.gcc-arm-none-eabi所有前置步驟完成後,下面開始軟體的使用及項目配置環節
STM32CubeMX
配置代理:
打開軟體首先配置proxy,有代理的最好先掛上代理,之後庫文件下載會比較快,不然會很慢,沒有代理的需要將類型設置為使用系統代理。
下載庫文件:
接下來開始下載目標板所對應的庫文件,這裡我的板子是STM32F1系列的,所以下載對應的庫文件
創建工程:
點擊file,選擇new project,然後等待下載一系列文件後,進入到下面的界面
按照架構,系列,具體名稱選擇模板,點擊右上角Start Project進入到下面界面
在這裡有幾個地方是需要提前配置的,一個是RCC時鐘配置,這些都需要一點晶片的基礎知識,這裡只要照做就可以了,將HSE高速時鐘配置成Crystal/Ceramic Resonator,LSE低速時鐘不做配置
緊接著配置GPIO口,查看目標板的數據手冊,可以知道PC13即C13口是直接控制主板一個LED燈的通斷的,所以這裡將PC13口設置為GPIO-Output
然後點擊Clock Configuration標籤,進入時鐘配置頁面,將中間HCLK的值從8改為72,即最高頻率,遇到如下界面點擊yes
配置完成後如下所示
最後進入這個軟體最後配置的環節
點擊Project Manager標籤頁,填上相關的空位,在Code Generator下的Toolchain/IDE 下,選擇Makefile,這裡方便之後使用make直接編譯成hex/bin文件,從而不需要藉助keil5或者IAR等軟體
最後點擊右上角GENERATE CODE,在你指定目錄則會生成對應的項目文件夾。
添加代碼並編譯:
使用vscode打開Core/Src/main.c 文件,在while循環中添加如下代碼,作用是將13號口,進行設置/復位操作,並進行1s的延遲。
while (1) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); HAL_Delay(1000); }保存代碼後,打開Terminal,定位到項目目錄下,和Makefile同級,然後執行:
最後會在當前目錄下生成一個build文件夾,裡面有產生的中間文件、hex文件、和bin文件,最後將目標板連接上stlink。
上傳代碼:
在Terminal中執行:
st-flash write ./build/BasicLED.bin 0x8000000最後點擊一下板子上的復位按鈕,則板載的LED就會間隔1s開始閃爍
建議每次寫入前先執行一個擦除操作: st-flash erase
總結:
至此,整個入門項目就結束了,起初一直在糾結於到底是用什麼軟體進行開發,是KD5好還是IAR好,最後發現,還是最適合自己的才是最好的,我就喜歡使用Vscode,我就是喜歡最簡單的Terminal進行代碼的上傳,然後剛開始不了解一些STM的原理的時候很糾結STM32CubeMX到底怎麼使用,後來發現,STM32CubeMX根據你項目的複雜程度進行項目的配置,比如這個項目中只需要配置GPIO13口,和高速時鐘,所以在繼續進行STM32的學習中,還需要學習一些基礎的知識,不會讓你在學習開發的過程中像只無頭蒼蠅。
最後,希望大家可以堅持自己所堅持的,喜歡自己所喜歡的!
STM32CubeMX連結:
https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-configurators-and-code-generators/stm32cubemx.html