STM32代碼的啟動過程

分享這篇文章瑟捣,談一下STM32啟動流程。如果讀者朋友已經(jīng)有過匯編相關(guān)基礎嚎卫,能夠夠好理解本文內(nèi)容嘉栓。匯編語言是比C語言更接近機器底層的編程語言,能讓我們更好的理解和操縱硬件底層拓诸。

STM32三種啟動模式

下好程序后侵佃,重啟芯片時,SYSCLK的第4個上升沿奠支,BOOT引腳的值將被鎖存馋辈,這就是所謂的啟動過程。

STM32上電或者復位后倍谜,代碼區(qū)始終從0x00000000開始迈螟,其實就是將存儲空間的地址映射到0x00000000中叉抡。三種啟動模式如下:

主閃存存儲器啟動,將主Flash地址0x08000000映射到0x00000000答毫,這樣代碼啟動之后就相當于從0x08000000開始褥民。主閃存存儲器是STM32內(nèi)置的Flash,作為芯片內(nèi)置的Flash洗搂,是正常的工作模式消返。一般我們使用JTAG或者SWD模式下載程序時,就是下載到這個里面蚕脏,重啟后也直接從這啟動程序侦副。

系統(tǒng)存儲器啟動。首先控制BOOT0驼鞭、BOOT1管腳,復位后尺碰,STM32與上述兩種方式類似挣棕,從系統(tǒng)存儲器地址0x1FFF F000開始執(zhí)行代碼。系統(tǒng)存儲器是芯片內(nèi)部一塊特定的區(qū)域亲桥,芯片出廠時在這個區(qū)域預置了一段Bootloader洛心,就是通常說的ISP程序。這個區(qū)域的內(nèi)容在芯片出廠后沒有人能夠修改或擦除题篷,即它是一個ROM區(qū)词身。啟動的程序功能由廠家設置。系統(tǒng)存儲器存儲的其實就是STM32自帶的bootloader代碼番枚。

內(nèi)置SRAM啟動法严,將SRAM地址0x20000000映射到0x00000000,這樣代碼啟動之后就相當于從0x20000000開始。內(nèi)置SRAM葫笼,也就是STM32的內(nèi)存深啤,既然是SRAM,自然也就沒有程序存儲的能力了路星,這個模式一般用于程序調(diào)試溯街。假如我只修改了代碼中一個小小的地方,然后就需要重新擦除整個Flash洋丐,比較的費時呈昔,可以考慮從這個模式啟動代碼,用于快速的程序調(diào)試友绝,等程序調(diào)試完成后堤尾,在將程序下載到SRAM中。

用戶可以通過設置BOOT1和BOOT0引腳的狀態(tài)九榔,來選擇在復位后的啟動模式哀峻。STM32三種啟動模式對應的存儲介質(zhì)均是芯片內(nèi)置的涡相,如下圖:

串口下載程序原理

從系統(tǒng)存儲器啟動,這種模式啟動的程序功能是由廠家設置的剩蟀。一般來說催蝗,這種啟動方式用的比較少。系統(tǒng)存儲器是芯片內(nèi)部一塊特定的區(qū)域育特,STM32在出廠時丙号,由ST在這個區(qū)域內(nèi)部預置了一段BootLoader,也就是我們常說的ISP程序缰冤,這是一塊ROM犬缨,出廠后無法修改。

一般來說棉浸,我們選用這種啟動模式時怀薛,是為了從串口下載程序,因為在廠家提供的BootLoader中迷郑,提供了串口下載程序的固件枝恋,可以通過這個BootLoader將程序下載到系統(tǒng)的Flash中。

這個下載方式需要以下步驟:

將BOOT0設置為1嗡害,BOOT1設置為0焚碌,然后按下復位鍵状婶,這樣才能從系統(tǒng)存儲器啟動BootLoader俱诸;

在BootLoader的幫助下,通過串口下載程序到Flash中肥橙;

程序下載完成后叹螟,又有需要將BOOT0設置為GND鹃骂,手動復位,這樣首妖,STM32才可以從Flash中啟動偎漫。

從匯編代碼分析STM32啟動過程

STM32的啟動文件與編譯器有關(guān),不同編譯器有缆,它的啟動文件不同象踊。雖然啟動文件(匯編)代碼各有不同,但它們原理類似棚壁,都屬于匯編程序杯矩。拿基于MDK-ARM的啟動文件來舉例,說一下要點內(nèi)容袖外。在基于MDK的啟動文件開始史隆,有一段匯編代碼是分配堆棧大小的。

這里重點知道堆棧數(shù)值大小就行曼验。還有一段AREA(區(qū)域)泌射,表示分配一段堆棧數(shù)據(jù)段粘姜。可以使用STM32CubeMX對上面的數(shù)值大小進行配置

在IAR中熔酷,是通過工程配置堆棧大泄陆簟:

看下面的匯編代碼,程序上電之后拒秘,是跳到Reset_Handler這個位置号显。

知道代碼是從Reset_Handler開始執(zhí)行,再來看如下Reset_Handler匯編代碼躺酒。在啟動的時候押蚤,執(zhí)行了SystemInit這個函數(shù)。

執(zhí)行完SystemInit函數(shù)羹应,初始化了系統(tǒng)時鐘揽碘,之后跳轉(zhuǎn)到main函數(shù)執(zhí)行。

全網(wǎng)最全資料免費分享?里面包含各種嵌入式园匹,物聯(lián)網(wǎng)钾菊,單片機的資料詳解,項目實戰(zhàn)偎肃,優(yōu)秀競賽作品等,需要的話浑此,點擊即可免費領取

http://makerschool.mikecrm.com/HmynTNs

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末累颂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凛俱,更是在濱河造成了極大的恐慌紊馏,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒲犬,死亡現(xiàn)場離奇詭異朱监,居然都是意外死亡,警方通過查閱死者的電腦和手機原叮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門赫编,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奋隶,你說我怎么就攤上這事擂送。” “怎么了唯欣?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵嘹吨,是天一觀的道長。 經(jīng)常有香客問我境氢,道長蟀拷,這世上最難降的妖魔是什么碰纬? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮问芬,結(jié)果婚禮上悦析,老公的妹妹穿的比我還像新娘。我一直安慰自己愈诚,他們只是感情好她按,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炕柔,像睡著了一般酌泰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上匕累,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天陵刹,我揣著相機與錄音,去河邊找鬼欢嘿。 笑死衰琐,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的炼蹦。 我是一名探鬼主播羡宙,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼掐隐!你這毒婦竟也來了狗热?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤虑省,失蹤者是張志新(化名)和其女友劉穎匿刮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體探颈,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡熟丸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了伪节。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片光羞。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖架馋,靈堂內(nèi)的尸體忽然破棺而出狞山,到底是詐尸還是另有隱情,我是刑警寧澤叉寂,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布萍启,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏勘纯。R本人自食惡果不足惜局服,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驳遵。 院中可真熱鬧淫奔,春花似錦、人聲如沸堤结。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竞穷。三九已至唐责,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瘾带,已是汗流浹背鼠哥。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留看政,地道東北人朴恳。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像允蚣,于是被迫代替她去往敵國和親于颖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容