野火stm32呼吸燈程序_說一說STM32啟動過程

998361537d20e44f9aee34e54bbcf6e4.png

STM32上電后是怎么啟動的?

main函數之前單片機都做了些什么?

帶著這些疑問我們開始進入游戲。。。。。

首先,開局一張圖,過程全靠編,如有說錯的地方望能指正

7b826b7509b08600141f881aa8ce1029.png

啟動大致流程

1- 上電啟動或者硬件復位

2- 單片機從0x00地址開始執行程序,在執行程序前,單片機會根據BOOT引腳設置,將對應的存儲器重映射到0x00處,如設置為BOOT0 = 0 ,BOOT1 = X 時,單片機將內部FLASH映射到0x00處,即將0X8000 0000地址映射到0X00處,單片機從FLASH中的程序啟動,其他啟動方式原理類似,相應的BOOT引腳設置如圖

b68f7e00e2848228f9fa4f16b317b326.png

3- 跳轉到存儲有代碼的存儲介質(如FLASH)以后,單片機首先找到的是一個中斷向量表(向量表如下圖所示),向量表第一個值是復位函數指針,它是用來初始化PC指針寄存器的,當PC指針寄存器初始化完成后,單片機會去執行復位函數

d31cf93f7dccdf615125355d4626fb0c.png
來自《Cortex M3與M4權威指南》

4- 復位函數如下圖,在復位函數中,首先執行系統時鐘初始化函數初始化系統時鐘,然后跳轉到__main(當然,在__main之前也可以再初始化其他外設,如初始化FSMC配置外部SRAM等)

95ea2308853cf4c26aca307efe6a97c0.png

5- 在__main函數中,會初始化內核的寄存器,如R0-R15,劃分堆空間(如果使用到的話)和棧空間(棧空間是C語言程序能運行的必要條件,沒有棧,C程序就無法運行),同時初始化程序數據,即將用戶代碼中的數據從FLASH中搬運到SRAM中,簡單理解就是初始化全局變量(這也就是全局變量在C語言中不初始化也不會出現隨機值的原因了)

相應加載過程如下圖

6de6d0a2b953767b1066a0a4aaccad58.png
來自《野火零死角玩轉STM32》

d5627e59e4d62394c98e30cf695a3d1a.png
來自《野火零死角玩轉STM32》

6-以上步驟執行完畢后,系統將會進入main函數,進入C語言的世界。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533651.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533651.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533651.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linuxpython升級3.5_linux升級python3.5到3.6

在ubuntu里,zlib叫zlib1g,相應的zlib-devel叫zlib1g.dev。默認的安裝源里沒有zlib1g.dev。要在packages.ubuntu.com上找。$sudo apt-get install ruby然后再裝zlib1g-dev就可以了$sudo apt-get install zlib1g-dev1. 安裝必備的軟件包centos: yum -y gro…

apache啟動失敗_請檢查相關配置.√mysql5.1已啟動._1、Apache啟動失敗,請檢查相關配置-百度經驗...

前幾天電腦系統崩潰了,后邊到服務中心重新恢復了系統,但是回來使用APMServ 5.2.6發現:1、Apache啟動失敗,請檢查相關配置。√MySQL5.1已啟動。系統的各種服務我都檢查過了,都是正常開啟的,百思不得其解,后邊在百度上搜索一篇文章有個例子照做了以后結果成功了。---------------…

職業規劃縱向橫向_收下這份《職業規劃喂飯式指南》

果不其然!上篇文章發布后,我收到了被拿來舉反例的網友小哥的抗議~~~講道理,最后他拿到的Offer還是十分不錯的,從此以后我的朋友圈又多了一位第一手保真瓜主,他好我也好~那么本期《職業規劃喂飯式指南》來嘍&#xff01…

mysql通過集合查詢_MySQL使用集合函數進行查詢操作實例詳解

本文實例講述了MySQL使用集合函數進行查詢操作。分享給大家供大家參考,具體如下:COUNT函數SELECT COUNT(*) AS cust_num from customers;SELECT COUNT(c_email) AS email_num FROM customers;SELECT o_num, COUNT(f_id) FROM orderitems GROUP BY o_num;…

javascript字典中添加數組_如何在 JavaScript 中更好地使用數組

在 freeCodeCamp 社區閱讀原文。本文短小精悍,我保證。在過去的數個月里,我注意到在我審閱的 pull request 中有四個(關于數組使用的)錯誤經常出現。同時,我自己也會犯這些錯誤,因此有了這篇文章。讓我們一…

mysql join圖解_MySQL中Join算法實現原理分析[多圖]

在MySQL 中,只有一種 Join 算法,就是大名鼎鼎的 Nested Loop Join,他沒有其他很多數據庫所提供的 Hash Join,也沒有 Sort Merge Join。顧名思義,Nested Loop Join 實際上就是通過驅動表的結果集作為循環基礎數據&#…

mysql多線程使用一個鏈接_探索多線程使用同一個數據庫connection的后果

在項目中看到有用到數據庫的連接池,心里就思考著為什么需要數據庫連接池,只用一個連接會造成什么影響?(只用一個connection)?1 猜想:jdbc的事務是基于connection的,如果多線程共用一個connection,會造成多線程之間的事務相互干…

vs中四點畫矩形的算法_中考熱點,初高中銜接之倒角利器四點共圓

初中數學課程標準修改后,教材中四點共圓知識已經刪除掉了,但這樣一件強悍且使用簡單的武器,我們還是有必要去了解的,近年來對于壓軸題以幾何為核心的考區來說,有時用到解題更為簡潔方便,由此應該理解掌握。…

phpnow mysql字符集_使用PHPnow搭建本地PHP環境+創建MySQL數據庫

要想學習WordPress建站,在本地搭建PHP環境是十分必要的,在以后的建站日子里,你可以使用這個環境來進行wordpress的程序學習、調試等工作,等你熟悉了wordpress以后,再購買域名和空間,真正開始你的建站之旅。…

用python慶祝生日_python, 實現朋友家人年歷生日自動提醒

為了方便提醒自己,今天有哪位朋友過生日(年歷生日)。測試環境:fedora25桌面版。建立一個生日配置文件,注意:按日期排好序vi /etc/birthday.txt朋友A 1-4朋友C 2-3朋友B 3-8創建腳本文件創建腳本文件 /usr/bin/check_birthday&…

wps如何保存最終狀態_如何使得打開word文件顯示最終的修改狀態

展開全部 在日常工作中,經常為了保護文檔而將其設置成最e68a84e8a2ad3231313335323631343130323136353331333363376366終狀態,設置文檔為最終狀態,則是表示已完成這篇文檔的編輯,這是文檔的最終版本。如果文檔被標記為最終狀態,則狀態屬性將設置為“最終狀態”,并且將禁用…

python整數反轉_敲代碼學Python:力扣簡單算法之整數反轉

學習重點:整數逆序算法力扣(LeetCode)原題?leetcode-cn.com 功能:整數反轉 來源:https://leetcode-cn.com/explore/featured/card/top-interview-questions-easy/5/strings/33/ 重點:整數逆序算法 作者&am…

前端累加nan怎么解決_前端面試,你有必要知道的一些JavaScript 面試題(上)

1.使用 typeof bar “object” 判斷 bar 是不是一個對象有神馬潛在的弊端?如何避免這種弊端?使用 typeof 的弊端是顯而易見的(這種弊端同使用 instanceof):let obj {};let arr [];console.log(typeof obj object); //trueconsole.log(typ…

tidb 配置mysql數據源_安裝tidb數據庫

1.下載壓縮包安裝tar包路徑命令:wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz命令:wget http://download.pingcap.org/tidb-latest-linux-amd64.sha2562.檢查文件完整性命令:sha256sum -c tidb-latest-linux-amd64.sha2…

linuxos或sv獨立客戶端不支持應用程序打開方式_搞不明白為什么大家都在學習 k8s

作者 | 小明菜市場來源 | 小明菜市場(ID:fileGeek)頭圖 | CSDN 下載自東方IC前言都2020年了,你還不知道kubernetes就真的真的真的out啦。(販賣焦慮體) 什么是k8s,k8s這個詞來自于希臘語,有主管,舵手,船長的…

mysql實現程序的動態鏈接_程序的鏈接和裝入及Linux下動態鏈接的實現

鏈接器和裝入器的基本工作原理一個程序要想在內存中運行,除了編譯之外還要經過鏈接和裝入這兩個步驟。從程序員的角度來看,引入這兩個步驟帶來的好處就是可以直接在程序中使用printf和errno這種有意義的函數名和變量名,而不用明確指明printf和…

python 二進制流_Python中對字節流/二進制流的操作:struct模塊簡易使用教程

前言前段時間使用Python解析IDX文件格式的MNIST數據集,需要對二進制文件進行讀取操作,其中我使用的是struct模塊。查了網上挺多教程都寫的挺好的,不過對新手不是很友好,所以我重新整理了一些筆記以供快速上手。注:教程…

react 圖片放在src里面還是public_手寫Webpack從0編譯Vue/React項目

當前前端開發,90%的項目都是Vue和React,然而70%的同學都基于腳手架創建項目,因為腳手架會包含項目基本框架、webpack配置、scss/sass/less解析、babel配置、DevServer、JSX/Vue文件解析、CSS前綴等,我們要做的就是開發功能模塊&am…

python union函數_如何掌握Python union()方法及怎么用?

不斷學習python的過程里,總能遇到各種形形色色的函數或者方法,本章給大家帶來python union的用法,具體內容如下:union()方法描述:union() 取并集,效果等同于 | ,重復元素只會出現一次&#xff0…

輸入分鐘輸出小時python_輸出鍵,值對如何使1小時內的時間在使用Python的MapReduce中的reducer中結束?...

這是一個策略:來自Mapper的:發出每個記錄的三個副本并使用二級排序:((復合鍵),值)((消息小時 - 一小時,當前消息的精確時間),消息)((消息小時,消息的準確時間),消息)((消息小時1小時…