本教程含有較多專業(yè)詞匯,大部分時候,不完全理解并不影響繼續(xù)往下閱讀,大家只需要了解大致的概念即可。當(dāng)然,也鼓勵大家多查百度和多問chatgpt,讓自己學(xué)會的更多。
什么是單片機?
單片機,就是把中央處理器CPU、存儲器、等計算機的功能部件,和定時器、I/0(輸入輸出接口)、串口等外設(shè)集成在一塊集成電路芯片上的微型計算機。
單片機的特點:
1.體積小,集成度高,電源功耗低
2.控制功能強,易拓展外設(shè)
3.價格便宜,性價比高
STM32是意法半導(dǎo)體(ST)推出一款32位的單片機。STM32具有超低的價格、超多的外設(shè)、豐富的型號、優(yōu)異的實時性、極低的開發(fā)成本等優(yōu)勢。
既然大家已經(jīng)了解單片機了(bushi) ,那我們就一起走進STM32的世界吧!
如下圖,是STM32的系統(tǒng)結(jié)構(gòu)原理圖,是不是一臉懵,那就別看下面這個先
讓我們簡化并翻譯一下:
各部分功能如下:
-
CPU:包含運算器,控制器及若干寄存器,是單片機的控制和指揮中心。
-
ROM(STM32中稱為FLASH):用于存放程序和數(shù)據(jù),為只讀儲存器。更改(擦除)和寫入程序都較為麻煩,需要遵守FLASH相關(guān)的協(xié)議??梢哉J為是計算機的硬盤。
-
RAM(STM32中稱為SRAM):用于存放運算的中間結(jié)果、數(shù)據(jù)暫存及數(shù)據(jù)緩沖等??梢噪S機讀入或讀出,讀寫速度快,讀寫方便;但是斷電或復(fù)位會丟失數(shù)據(jù)。可以認為是計算機的內(nèi)存。
-
總線矩陣:總線矩陣用于主控總線之間的訪問仲裁管理,提高了各部件交流的效率。
-
寄存器:雖然圖里面沒有寄存器,但是后續(xù)會經(jīng)常提到它。寄存器可以看成儲存0和1的一個指定名字和功能的地址。如果我們要在某個引腳輸出一個低電平,我們只要往相的引腳對應(yīng)的寄存器寫一個1,即可實現(xiàn).
-
GPIO:通用型輸入輸出(接口),意思是你可以隨意使用它輸出或輸入0和1,甚至以115200次每秒的速度翻轉(zhuǎn)或接收0和1。
-
注意:上面的所有東西,都集成在了單片機的芯片上,因此說單片機集成度高,是真的很高。
雖然大家大致了解了STM32單片機的結(jié)構(gòu),但肯定還不清楚自己將要如何操控這個精妙裝置。接下來,讓我們一起了解一個程序如何實現(xiàn)整個運算過程。
一. 假設(shè)一個客戶需求
1. x=3???y=x+5?
2. 先計算出y的值,若y大于0則點亮位于GPIO_ PA0(也就是單片機上的A0接口)處的LED
看起來很簡單,但這是了解單片機運行原理的一個非常重要的案例:
二.?配置初始化文件
什么?你說你想直接把代碼寫了跑起來?
單片機還在睡覺呢,或者他腦袋里還想著上一個程序。
你輸入單片機的每一個程序,都必須要用很多很多的篇幅告訴它,腦干怎么指揮全身(各種CPU指令)、心臟該怎么跳動(配置時鐘樹)、血液該怎么流動(定義各種宏以方便數(shù)據(jù)傳輸),因為每次輸入新程序進去都完全擦除ROM再重寫,所以每個程序都必須包含初始化的內(nèi)容。不然,它當(dāng)場給你表演一個原地睡覺(卡死)。
配置初始化文件的方法有兩種:
1. 基于STM32庫函數(shù)的開發(fā)
STM32庫函數(shù)的開發(fā),可以避免大家對著數(shù)據(jù)手冊查并操作各種寄存器,而是直接用庫的函數(shù)來實現(xiàn)各種參數(shù)的初始化和功能。
如果你想點亮一個led。你需要準(zhǔn)備好一個包含整個單片機初始化的內(nèi)容的源代碼,如下圖所示(不用細看,我也也不熟)。
然后再復(fù)制粘貼一個GPIO_init(初始化GPIO接口)的函數(shù)進去,然后再改成相應(yīng)的序號。當(dāng)然,如果你想啟動串口、定時器、ADC等其他功能,也需要把相應(yīng)的初始化代碼塊一個個塞進去,如下圖所示(不用細看,不是重點)。
(上圖:GPIO,PB5和PE5的初始化代碼塊)
然后再在主函數(shù)中輸入相應(yīng)的代碼(見下一節(jié)),我們的程序才能完成。
使用標(biāo)準(zhǔn)庫開發(fā)有助于大家更了解底層的代碼和寄存器的使用,可以保證基礎(chǔ)更加的扎實。但是對新手來說不夠友好。
2.?基于STM32Cubemx(下面那個藍藍的軟件,你們的好幫手)的HAL庫開發(fā)
如果按照上面的方法,那當(dāng)我們遇到下面問題的時候,可能就有些棘手:
我們手上有STM32f103c8t6單片機的啟動文件,但是此次項目要求我們用STM32f427IIH單片機,且要求你打開CAN1、CAN2、USART1、USART2、TIM23456、和十路的PWM,并按照需求配置參數(shù)。那我們可要忙的屁股著火螺旋起飛啰,而且不好檢查參數(shù)是否正確。
因此,我們需要有更加高效、準(zhǔn)確的方法:使用STM32Cubemx配置文件
打開STM32Cubemx,并經(jīng)過操作,可以看到如下界面:
你可以直接生成相應(yīng)芯片(此時為F427iih)的初始化和配置文件,非常的舒服。
接下來,直接用圖形化界面即可設(shè)置好各種參數(shù)(可以跟著詳細的文檔做,一套做下來就能用了)
(上圖:左邊為希望使用的功能,中間為功能的參數(shù)配置,右邊為圖形化的功能展示)
當(dāng)然,我也是從萌新走過來的,第一次看到上圖也很害怕,感覺自己根本駕馭不了這個恐怖的機器。
下圖是做出遙控小車的STM32f103c8t6和引腳圖(僅供參考)。是不是感覺不算特別復(fù)雜?
什么?看起來還復(fù)雜。那我們只能通過我們自己的努力,慢慢熟悉這個軟件。我也盡我的力把教程寫的有趣一點,讓大家愿意跟著一步一步走,收獲更多的知識。
跑題了,當(dāng)我們按下這個按鈕
?我們就直接得到了一份結(jié)構(gòu)規(guī)范的啟動和初始化代碼。(如下)
點幾下鼠標(biāo),我們給單片機寫的腦干、血液、心臟的程序就全部完成啦!
因此可以看出,STM32CubeMx是一個很便捷的圖形化配置軟件,可以快速配置、維護、修改工程。后續(xù)所有教程都將基于STM32Cubemx的開發(fā)。
三. 寫代碼
直接上干貨
需求如下:
x=3???y=x+5
計算出y的值,若大于0則點亮位于GPIO_ PA0(也就是單片機上的A0接口)處的LED
代碼是這個(基于HAL庫編程)要寫在主函數(shù)的無限循環(huán)中(為什么是無限循環(huán)呢,我們可以假設(shè)一個智能家居設(shè)備,即使你沒按下按鈕,他也會一直運行著,一直判斷你是否按下按鈕,或者監(jiān)測一些其他的數(shù)據(jù))
uint8_t x=3;
uint8_t y=0;
while(1)
{
y=x+5;
if(y>0)
GPIO_Writepin(GPIOA,GPIO_PIN_0,0);
}
代碼很好讀懂,定義x,y兩個unsigned int類型的變量(HAL庫有對數(shù)據(jù)類型單獨進行宏定義,感興趣的可以右擊uint8_t并進入definition)
?然后做加法,然后判斷,若y>0,輸出低電平,電流從LED的正極流進PA0,LED點亮。
四. 編譯代碼
STM32是機器,他只聽得懂機器語言(匯編語言),因此我們需要把我們上面寫的給人看的代碼變成匯編語言,大概是下面的效果(別細看 不考)
因此我們寫完代碼,要點一下編譯按鈕。
此時的內(nèi)容不只是程序,而更應(yīng)該稱為 指令。
五. 燒錄代碼
我們用專門的燒錄器將代碼直接燒寫至單片機的FLASH內(nèi),即完成了代碼的燒錄。注:一般燒錄后需要按一下復(fù)位的按鈕單片機才會開始運行。
Keil這個軟件等于說自帶燒錄的環(huán)境,只需要按照教程選好型號即可將編譯好的代碼燒錄進單片機。
六.?代碼如何變成現(xiàn)實(略微介紹一下微機原理,感興趣可以看)
匯編語言的代碼燒寫至FLASH內(nèi)。
復(fù)位單片機!
單片機開始運行!
PC(程序計數(shù)器)從零開始累加,執(zhí)行以下循環(huán)
-
它數(shù)到n,F(xiàn)LASH里的n號指令被取出,拿去CPU執(zhí)行。
-
指令會涉及到一個地址,某個數(shù)字住在內(nèi)存的一個房間里,房間的號碼叫做地址。這一步只會將地址送去地址寄存器,并解出住在那的數(shù)字。
-
那個數(shù)字被拿去CPU,進行計算,計算結(jié)果將以變量放在某處
這三步,每步的時間,在STM32f103c8t6單片機中,大約為一至兩個機器周期,也就是10——40納秒。
在第n=114514時,CPU收到指令,將一個1塞進一個叫GPIOA->BRR寄存器的某一位中
隨著一個1塞進了那個位置,寄存器的電路所連接的一個三極管轟然導(dǎo)通,電流如泉涌一般沿著三極管導(dǎo)向了GND(可以理解為負極),如此,那個名為PA0的引腳變?yōu)榱说碗娖?,LED也隨之點亮。
七. 總結(jié)
這就是我們?nèi)绾吸c亮一個led的全過程,寫的挺粗糙的。希望這篇教程能起到拋磚引玉的效果,讓大家能通過此教程了解到單片機工作的原理,并有興趣更進一步的深入學(xué)習(xí),在之后的學(xué)習(xí)中事半功倍。
其他的教程,由于CSDN插入圖片較為麻煩,因此我直接將生成的PDF文檔放入免費的資源中,可以進入我的主頁查找。
如下,包含IO、PWM控制舵機、電路搭建、電機控制的教程,代碼和演示視頻,都置于其中。
(80條消息) 基于STM32的機械臂遙控麥輪小車-之超級適合新手的教程-嵌入式文檔類資源-CSDN文庫文章來源:http://www.zghlxwxcb.cn/news/detail-469214.html
祝大家學(xué)業(yè)有成。文章來源地址http://www.zghlxwxcb.cn/news/detail-469214.html
到了這里,關(guān)于初學(xué)者入門:認識STM32單片機的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!