1.寫在前面
首先,你要知道STM32啟動(dòng)文件中啟動(dòng)流程,你就需要掌握一點(diǎn)匯編基礎(chǔ)知識(shí)。
匯編語言屬于機(jī)器語言,或者說低級(jí)語言,C語言屬于高級(jí)語言,所以,匯編和C語言在語法上差異很大。
如果你學(xué)底層開發(fā),匯編的一些基礎(chǔ)知識(shí)需要掌握。不需要精通,但需要看懂常見的匯編代碼。
2.說明
STM32的啟動(dòng)文件與編譯器有關(guān),不同編譯器,它的啟動(dòng)文件不同。
雖然啟動(dòng)文件(匯編)代碼各有不同,但它們?cè)眍愃?,都屬于匯編程序。
我們拿基于MDK-ARM的啟動(dòng)文件來舉例,說一下要點(diǎn)內(nèi)容。
3.分配堆棧
在基于MDK的啟動(dòng)文件開始,有一段匯編代碼是分配堆棧大小的。

這里重點(diǎn)知道堆棧數(shù)值大小就行。還有一段AREA(區(qū)域),表示分配一段堆棧數(shù)據(jù)段。
數(shù)值大小可以自己修改,也可以使用STM32CubeMX數(shù)值大小配置:

在IAR中,是通過工程配置堆棧大小:

4.向量表
相信大家都知道向量表,先看匯編代碼:

這個(gè)向量表就是對(duì)應(yīng)手冊(cè)中的那些內(nèi)容:

我們需要知道這個(gè)地方中的復(fù)位,程序上電之后,是跳到Reset_Handler這個(gè)位置。
5.執(zhí)行代碼
上面知道代碼是從Reset_Handler開始執(zhí)行,我們看Reset_Handler匯編代碼:

在啟動(dòng)的時(shí)候,執(zhí)行了SystemInit這個(gè)函數(shù)。
之前標(biāo)準(zhǔn)外設(shè)庫在SystemInit這個(gè)函數(shù)初始化了系統(tǒng)時(shí)鐘,后面HAL庫單獨(dú)把那部分代碼提出來了。
執(zhí)行完SystemInit函數(shù),就跳轉(zhuǎn)到我們的main函數(shù)執(zhí)行了。
-
STM32
+關(guān)注
關(guān)注
2305文章
11118瀏覽量
370931 -
編譯器
+關(guān)注
關(guān)注
1文章
1669瀏覽量
51057 -
復(fù)位
+關(guān)注
關(guān)注
0文章
179瀏覽量
24961 -
啟動(dòng)流程
+關(guān)注
關(guān)注
0文章
14瀏覽量
6655
發(fā)布評(píng)論請(qǐng)先 登錄
關(guān)于stm32f4zgt6和mspm0g3507串口通信問題
STM32串口發(fā)送數(shù)據(jù),USART_FLAG_TC無法置位怎么解決?
ESP32用作經(jīng)典藍(lán)牙串口透?jìng)髂K與手機(jī)進(jìn)行串口通信
PID管道儀表流程圖識(shí)讀方法【推薦下載】
STM32串口通信,上電和斷電串口助手會(huì)返回?cái)?shù)是怎么回事?
使用Labview做一個(gè)485串口電子秤程序
用Labview寫一個(gè)電子稱的485串口程序
3.5英寸高清智能串口屏 8位MCU并口通信的COG裸屏 或帶驅(qū)動(dòng)板232串口通信的智能屏

stm32串口通信流程圖
評(píng)論