前言
某客戶和我們反應(yīng)他們制作回來的板子,能下載程序但是程序執(zhí)行不了。
一、復(fù)現(xiàn)現(xiàn)象
硬件是:客戶自己設(shè)計制作的板子。上面是STM32F411CEUx的芯片軟件版本是Cube庫中的:基于問題是能下載程序,但是代碼執(zhí)行不了,所以自己用Cube生成了一個項(xiàng)目工程,主函數(shù)里面就是GPIO口的翻轉(zhuǎn),正好客戶的板子上有
LED燈,所以如果代碼被執(zhí)行了,就可以看到燈的閃爍。
二、程序解讀
連接好調(diào)試工具STLINK
2.1/ IAR編譯環(huán)境
程序能夠正常下載,而且能夠執(zhí)行,可以看到對應(yīng)的LED燈的閃爍。
使用Keil的編譯環(huán)境下載,確實(shí)能夠下載,但是入口的地址是如下黃色的那行顯示所示,如果單步執(zhí)行(F11)或全速運(yùn)行(F5),程序始終在原位置不動(0x1FFF4252),如果強(qiáng)制的將PC指針的值和SP的值修改為0x8000000與0x2000000,然后在點(diǎn)擊運(yùn)行,則能夠跑到main()函數(shù),再全速運(yùn)行,能夠看到客戶板子上的LED燈的閃爍。
但是如果不強(qiáng)制修改PC和SP指針的值,則程序不執(zhí)行。
所以問題就變成為什么程序下載進(jìn)去后的地址是0x1FFF4252?0x1FFF4252又是什么地址呢?查閱相應(yīng)的手冊,發(fā)現(xiàn)0x1FFF4252是處在了Systemmemory區(qū)域。
咨詢了客戶,他們設(shè)計的是程序從Flashmemory區(qū)域啟動的而且程序中沒有對Option Byte進(jìn)行配置,那問題就很清楚了,用
萬用表測量了客戶板上的Boot0引腳的電平,發(fā)現(xiàn)電平不對,達(dá)到1.6V,這么高的電平可以被視為高電平了。
對照客戶的原理圖,原來Boot有上拉和下拉的
電阻,焊接的時候?qū)⑦@兩個電阻都焊接上去了,去掉上拉電阻,使的BOOT0的引腳接地為低電平,再編譯下載進(jìn)入Keil的環(huán)境,程序能夠被正常執(zhí)行了。問題找到了。
對于最初的測試,硬件相同,軟件相同,然而IAR可以正常運(yùn)行,KEIL卻不能執(zhí)行,不解,可以IAR編譯環(huán)境的設(shè)置比較智能。
重要通知 - 請仔細(xì)閱讀
意法半導(dǎo)體公司及其子公司(“ST”)保留隨時對ST 產(chǎn)品和/ 或本文檔進(jìn)行變更、更正、增強(qiáng)、修改和改進(jìn)的權(quán)利,恕不另行通知。買方訂貨之前應(yīng)獲取關(guān)于ST 產(chǎn)品的最新信息。ST 產(chǎn)品的銷售依照訂單確認(rèn)時的相關(guān)ST 銷售條款。
買方自行負(fù)責(zé)對ST 產(chǎn)品的選擇和使用, ST 概不承擔(dān)與應(yīng)用協(xié)助或買方產(chǎn)品設(shè)計相關(guān)的任何責(zé)任。
ST 不對任何知識產(chǎn)權(quán)進(jìn)行任何明示或默示的授權(quán)或許可。
轉(zhuǎn)售的ST 產(chǎn)品如有不同于此處提供的信息的規(guī)定,將導(dǎo)致ST 針對該產(chǎn)品授予的任何保證失效。
ST 和ST 徽標(biāo)是ST 的商標(biāo)。所有其他產(chǎn)品或服務(wù)名稱均為其各自所有者的財產(chǎn)。
本文檔中的信息取代本文檔所有早期版本中提供的信息。
文章來源:微信公眾號 融創(chuàng)芯城