一、啟動文件的作用是:
1.初始化堆棧指針SP;
2.初始化程序計數器指針PC;
3.設置堆、棧的大小;
4.設置異常向量表的入口地址;
5.配置外部SRAM作為數據存儲器(這個由用戶配置,一般的開發板可沒
有外部SRAM);
6.設置C庫的分支入口__main(最終用來調用main函數);
7.在3.5版的啟動文件還調用了在system_stm32f10x.c文件中的
SystemInit()函數配置系統時鐘,在舊版本的工程中要用戶進入
main函數自己調用SystemInit()函數。
至此可以總結一下STM32的啟動文件和啟動過程。首先對棧和堆的大小進行定義,并在代碼區的起始處建立中斷向量表,其第一個表項是棧頂地址,第二個表項是復位中斷服務入口地址。然后在復位中斷服務程序中跳轉??C/C++標準實時庫的__main函數,完成用戶堆棧等的初始化后,跳轉.c文件中的main函數開始執行C程序。假設STM32被設置為從內部FLASH啟動(這也是最常見的一種情況),中斷向量表起始地位為0x8000000,則棧頂地址存放于0x8000000處,而復位中斷服務入口地址存放于0x8000004處。當STM32遇到復位信號后,則從0x80000004處取出復位中斷服務入口地址,繼而執行復位中斷服務程序,然后跳轉__main函數,最后進入main函數,來到C的世界。
二、bootloader文件的作用。
1、可以參考《嵌入式系統bootloader技術內幕》
鏈接:http://blog.csdn.net/phunxm/article/details/6897541
bootloader 分為boot 和loader,更多的時候是針對于linux系統,windows系統里的bios也是這個功能。就是boot 的功能是初始化堆棧、中斷向量表等參數,loader就是跳轉到main函數里,加載用戶程序。從這個層面來理解的話,其實STM32的啟動文件就相當于是一個bootloader程序。
2、在做STM32在線升級的時候,常常可以聽到要自己寫一個bootloader程序。這個就很容易造成誤解,比如,升級的時候要寫bootloader程序,那不升級的時候,bootloader難道就不需要了嗎?如果需要是在哪一個文件中,完成這個功能的呢?
其實,在IAP的時候,我們寫的只是相當于一個跳轉并下載的功能的程序,這個程序實現的就是IAP的功能,或者說是軟的IAP功能。這個不是bootloader。在iap程序里,我們是用C語言實現的,也只是一個main函數,里面可能會根據需要有定時器、串口、led驅動等功能。但是真正開始執行這個main函數,還是由啟動文件完成,也就是bootloader完成。
三、51單片機為什么沒聽說bootloader
四、STM32的啟動方式
STM32的啟動選擇,通過設置BOOT1、BOOT0的引腳的高低電平即可選擇。
其中主閃存啟動是將程序下載到內置的Flash進行啟動(該flash可運行程序),該程序可以掉電保存,下次開機可自動啟動;
系統存儲器啟動是將程序寫入到一快特定的區域,一般由廠家直接寫入,不能被隨意更改或擦除。Boot0設置為1,Boot1設置為0,代碼將從ROM區啟動,這上電啟動都會運行Bootloader,在此過程中可以實現IAP程序更新,這一般是通過USART 進行更新,此時如果USART或者是SPI端口沒有接收到數據信號,那么MCU將會一直程序等待下去,不會自動跳到FLash主代碼區。所以一般這作為個體產品想實現代碼更新的工作。這需要你那邊是否要考慮以后產品升級,如若升級,可以在Boot0引腳接入一個拔碼開關實現對Boot0電平的控制,從而可以實現 IAP更新功能。
內置SRAM啟動,由于SRAM掉電丟失,不能保存程序,一般只用于程序的調試。
五、STM32啟動過程
STM32的內部閃存(FLASH)地址起始于0x08000000,一般情況下,程序文件就從此地
址開始寫入。此外STM32是基于Cortex-M3內核的微控制器,其內部通過一張“中斷向量表”來響應中斷,程序啟動后,將首先從“中斷向量表”取出復位中斷向量執行復位中斷程序完成啟動,而這張“中斷向量表”的起始地址是0x08000004(0x8003000的程序中,中斷向量表的地址是0x8003000),當中斷來臨,STM32的內部硬件機制亦會自動將PC指針定位到“中斷向量表”處,并根據中斷源取出對應的中斷向量執行中斷服務程序。
在圖53.1.1中,STM32在復位后,先從0X08000004地址取出復位中斷向量的地址,并跳轉到復位中斷服務程序,如圖標號①所示;在復位中斷服務程序執行完之后,會跳轉到我們的main函數,如圖標號②所示;而我們的main函數一般都是一個死循環,在main函數執行過程中,如果收到中斷請求(發生重中斷),此時STM32強制將PC指針指回中斷向量表處,如圖標號③所示;然后,根據中斷源進入相應的中斷服務程序,如圖標號④所示;在執行完中斷服務程序以后,程序再次返回main函數執行,如圖標號⑤所示。
上一篇:基于STM32的八種GPIO輸入輸出模式解析
下一篇:STM32單片機UART發送配置的步驟及方法
推薦閱讀
史海拾趣
為了進一步拓展市場,Adam Tech開始實施全球化戰略。公司在北美、歐洲和亞洲等地設立了多個代表處,以便更好地服務全球客戶。這些代表處不僅為公司帶來了更多的業務機會,也提升了公司在國際市場上的知名度。同時,公司還積極與各地合作伙伴建立緊密的合作關系,共同推動電子連接器行業的發展。
弘凱光電股份有限公司,自2001年成立以來,便以光電半導體封裝與解決方案提供商的身份,開始在電子行業中嶄露頭角。早期,公司以臺灣為基地,憑借對技術的不斷追求和對市場的敏銳洞察,逐步在光電半導體領域積累了寶貴的經驗。通過持續的研發和創新,弘凱光電逐漸形成了自己的核心競爭力,為后續的快速發展奠定了堅實基礎。
富捷電子在積極拓展國內外市場的同時,也注重品牌建設和市場推廣。公司建立了遍及全球的銷售網絡,產品廣泛應用于微電子、計算機、光伏、新能源、車載等眾多新興和高科技領域。通過參加國內外知名展會、舉辦技術交流會等方式,富捷電子不斷提升品牌知名度和影響力。此外,公司還積極與上下游企業建立戰略合作關系,共同推動產業鏈協同發展。
隨著國際市場的不斷開拓,CONTEC公司于2012年在美國成立了分公司。這一舉措使公司能夠更好地了解國際市場需求,提高品牌知名度,并進一步擴大市場份額。美國分公司的成立標志著公司開始走向國際化發展道路,為公司的長遠發展奠定了堅實基礎。
為了適應市場的快速變化和公司業務的不斷擴張,Altech公司決定將深圳工廠整體搬遷至廣州南沙。這一搬遷不僅優化了公司的生產布局,還為公司提供了更加廣闊的市場發展空間。搬遷后的工廠引進了先進的生產設備和技術,進一步提升了公司的生產效率和產品質量。
目錄: 第一章 6502微處理器 第二章 Apple界面 第三章 輸入/輸入界面 第四章 旗號與決策 第五章 Apple之面包板 第六章 Apple界面試驗 第七章 再談巴士 第八章 馬達、燈泡、電鈴與汽笛… 查看全部問答∨ |
Mitsubishi - New Products Intelligent Power Modules with High Output Power (V1-Series) Mitsubishi Electric has launched the new V1-Series as part of the IPM (Intelligent Power Module) line-up. V1-Series is a new intelligent power ...… 查看全部問答∨ |
采用freescale的m8270為處理器,配置fcc1為HDLC nibble 模式,時鐘為brg5。配置完成后,將/CTS管腳拉低電平,用示波器測輸出管腳(txd0~txd3)有波形輸出,為0x7E(HDLC flag)。 當有數據發送時,給發送BD置上數據長度、地址,最后給狀態寄存器置上 ...… 查看全部問答∨ |
|
ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3); ChangeClockDivider(key, 12); cal_cpu_bus_clk(); 這三個函數分別什么作用,具體如何使用… 查看全部問答∨ |
|
首先聲明這篇文章我不是來參加DSP征文的啦,看到EE上的DSP活動勾起了我對這篇文章的記憶,如果沒記錯是二年級的時候在網上找的,非常適合入門。 1。TI DSP的選型 主要考慮處理速度、功耗、程序存儲器和數據存儲器的容量、片內的資源,如定時器的 ...… 查看全部問答∨ |