理論上,CM3中規定上電后CPU是從0地址開始執行,但是這里中斷向量表卻被燒寫在0x0800 0000地址里(Flash memory啟動方式),那啟動時不就找不到中斷向量表了?既然CM3定下的規矩是從0地址啟動,SMT32當然不能破壞ARM定下的“規矩”,所以它做了一個啟動映射的過程,就是和芯片上總能見到的BOOT0和BOOT1有關了,當選擇從主Flash啟動模式后,芯片一上電,Flash的0x0800 0000地址被映射到0地址處,不影響CM3內核的讀取,所以這時的CM3既可以在0地址處訪問中斷向量表,也可以在0x0800 0000地址處訪問中斷向量表,而代碼還是在0x0800 0000地址處存儲的。
關於flash死鎖的解決辦法(Flash memory啟動方式):
開發調試過程中,由於某種原因導致內部Flash鎖死,無法連接SWD以及Jtag調試,無法讀到設備,可以通過修改BOOT模式重新刷寫代碼。
修改為BOOT0=1,BOOT1=0即可從系統存儲器啟動,ST出廠時自帶Bootloader程序,SWD以及JTAG調試接口都是專用的。重 新燒寫程序后,可將BOOT模式重新更換到BOOT0=0,BOOT1=X即可正常使用。

