在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32F091空片編程后怎樣直接運行用戶代碼

STM32單片機 ? 來源:未知 ? 作者:佚名 ? 2017-08-31 14:16 ? 次閱讀

問題
某客戶在其產(chǎn)品的設計中,使用了STM32F091RCT6。客戶使用ST-Link 對STM32F091RCT6 進行編程,發(fā)現(xiàn)對空片進行編程之后,必須要重新上電才能運行用戶代碼;但是如果不是空片,則編程后就可以直接運行用戶代碼。由于客戶的測試系統(tǒng)是直接燒寫完芯片后在不斷電的情況直接進入測試模式,如果空片燒寫需要斷電的話,帶來一定的麻煩。客戶希望搞明白這件事,并希望找到辦法,能在空片編程后也可以直接運行用戶代碼。


調(diào)研
1.還原問題
在這里,使用帶有STM32F091RCT6 的NUCLEO-F091RC 板來進行問題還原,將此Nucleo 板通過USB 線連接到電腦。打開STM32 ST-LINK Utility,點擊“Connect to the target”按鈕進行芯片連接,連接后打開一個準備好的LED 燈閃爍的.hex 文件代碼,點擊“Program verify”按鈕準備進行編程。

在這里,我們勾選了“Reset after programming”,目的在于編程后對芯片進行復位,可以運行用戶代碼。然后點擊“Start”按鈕開始進行編程。
編程之后,按道理可以看到LED 燈閃爍的,但是并沒有出現(xiàn)。需要給MCU進行斷電后,重新上電才能看到LED 燈閃爍。也就是說需要一次上電復位才能運行用戶代碼。

2.分析問題
先來回顧一下STM32F091 的參考手冊RM0091 對于Empty Check 的描述:

首先,芯片內(nèi)部存在一個查空標志,用來標志芯片是否為空片。這個標志位是在BOOT0 腳被定義到從Main Flash memory 啟動的時候使用。當這個標志位被置“1”的時候,此芯片被認為是空的,系統(tǒng)將從Systemmemory 中啟動Bootloader,以允許用戶進行代碼下載,即使現(xiàn)在BOOT0腳定義的是從Main Flash memory 啟動。此標志位只在載入Option bytes 時更新:當?shù)刂?x0800 0000 讀出的內(nèi)容為0xFFFF FFFF 時,此標志位置“1”,否則為“0”。這意味著當燒寫完一個空片后需要在系統(tǒng)復位后執(zhí)行用戶代碼的話,是必須要重新上電以產(chǎn)生或者在FLASH_CR寄存器中置位OBL_LAUNCH 來啟動Optionbyteloader reset,以清除此查空標志。

現(xiàn)在就可以來分析目前所遇到的情況了:


當空片通過SWD 連接到ST-Link 進行燒寫的情況下,由于上電時空片檢測檢測到此芯片為空片,查空標志被置位,所以系統(tǒng)此時從System memory 中啟動Bootloader 開始運行。通過簡單的SWD 接口對芯片進行編程,勾選的“Reset afterprogramming”將在編程結(jié)束后在RESET引腳上產(chǎn)生一個復位信號,但是不幸的是這個復位并不能清除查空標志,導致復位后仍然從System memory 中啟動Bootloader,而沒有運行用戶代碼,也就是我們之前遇到的現(xiàn)象。

一般情況下,我們都可以通過重新上電來產(chǎn)生POR 以清除查空標志,從MainFlash memory 啟動運行用戶代碼。但是,客戶目前的這種特殊需求就會帶來一定的麻煩。還有一種應用也會比較麻煩,也就是使用鋰電池的產(chǎn)品,而且這個電池直接焊接到用戶板上,無法方便地進行斷電上電。此時,若是空片是焊接在板子上進行在線編程,那么,問題來了。空片編程之后,由于不方便進行斷電,而無法完成POR的動作,不能運行用戶代碼也就無法實現(xiàn)一個Option byte loader reset。查空標志無法清除,程序運行將鎖死在System memory 的Bootloader。

3.問題解決
這種問題呢,解決方法當然有很多種,下面來大概地探討一下:
1) 從生產(chǎn)上來解決:芯片在編程器上進行單獨編程,之后再上板子,避開空片燒寫后沒有POR。
2) 從硬件上來解決:使用一個跳線,或者使用其他方式,比如在夾具上想辦法,以達到通過人工的斷電再連通上電,實現(xiàn)一個POR。需要在PCB 板上預留。大家可自行選擇對策。但是這會增加生產(chǎn)上的麻煩,降低效率。
3) 從編程方法來解決:不使用ST-Link 進行編程,直接使用Bootloader 進行串口升級,升級后跳轉(zhuǎn)到Main Flashmemory 去運行用戶代碼。需要在用戶代碼中加入將MainFlash memory 映射到0x0000 0000 的代碼。

4) 前面幾種方式大家一看就明白如果去解決了。但是,如果一定要使用ST-Link 通過SWD 進行燒寫的話,就另當別論,我們下面來探討這種方式。
一般看到這種問題,直觀思維就是思考是否有辦法,可以在ST-LINK 燒寫后通過一定的ST-LINK命令跳轉(zhuǎn)到用戶代碼去運行用戶代碼。方法看起來可行,但是有點復雜。第一,STM32 ST-LINKUtility 沒有提供類似的功能,需要用戶自行使用ST-LINK_CLI 命令;第二,需要在用戶代碼中加入別忘了將MainFlash memory 映射到0x0000 0000 的代碼;第三,由于查空標志未清除,需擔心意外的復位信號或干擾,導致復位后又跑回SystemMemory,還需要在用戶代碼中加入“每次運行都判斷是否為OptionBytes Loader reset,如果不是,就直接執(zhí)行一次Option BytesLoader reset以清除查空標志”。


我們的直觀思維都是出現(xiàn)問題解決問題,但是看了上面的描述,這樣的解決辦法還真有點麻煩。那有沒有什么其他簡單的辦法呢?答案是有的,我們不要把思維停留在出現(xiàn)問題解決問題上,而是如何去避免產(chǎn)生問題。下面來理一理思路:

這個問題的根源在于查空標志的存在,所以需要思考的是怎么避免查空標志的影響?
來看一下查空標志產(chǎn)生的條件

a) 使用了BOOT0 引腳;
b) BOOT0 引腳為低電平,啟動區(qū)域指向MainFlash memory;
c) 讀取0x0800 0000 地址的值為0xFFFF FFFF;


由于是空片編程,所以第三種條件是肯定是成立的;由于硬件設計,BOOT0 引腳的電平也不方便改來改去;所以需要把關(guān)注點放在第一個條件上——“使用了BOOT0 引腳”。由于STM32F091的特性,剛好有機會可以不使用BOOT0 引腳,而是直接使用選項字節(jié),所以解決的辦法有了。

步驟如下:
i. 打開STM32 ST-LINK Utility,點擊“Connect to the target”按鈕進行連接;
ii. 從菜單“Target → Option Bytes”調(diào)出選項字節(jié)對話

將“nBoot0_SW_Cfg”的打勾去掉,點擊“Apply”,改成使用選項字節(jié)中的nBoot0 和nBoot1 來控制啟動區(qū)域
iii. 再打開需要燒寫的代碼文件,點擊“Program Verify”按鈕,對話框中勾選“Reset after programming”,點擊“Start”完成燒寫動作就可以了。

這樣就可以看到用戶代碼已經(jīng)在運行了,是不是很簡單。
如果,希望更簡單的完成,可以使用ST-LINK_CLI,寫一個批處理文件,包含以下動作:

ST-LINK_CLI -c SWD UR

ST-LINK_CLI -ME

ST-LINK_CLI -p xxxxxxxx.hex-v “while_programming”

ST-LINK_CLI -OBnBOOT0_SW_Cfg=0

ST-LINK_CLI –Rst

ST-LINK_CLI.exe位于STM32 ST-LINK Utility 安裝目錄里,關(guān)于命令請參考《ST-LINKUtility UM.pdf》。

結(jié)論
由于查空檢測機制,導致STM32F091 空片在使用ST-LINK編程后,不斷電的情況下復位將回到System Memory,無法進入MainFlash memory 去運行用戶代碼。所以,在特殊應用中,如果無法進行斷電再上電,需要使用辦法對這種機制進行破壞。

處理

Boot 啟動配置為用選項字節(jié)進行控制,而不是使用Boot0引腳,以此來破壞查空機制的影響。


建議
對于問題的解決,一般從兩個方向進行思考:一是出現(xiàn)了問題再來找解決問題的辦法;二是如何避免出現(xiàn)問題。很多時候,由于思維慣性,很多工程師可能會更喜歡直接從第一種方向去思考問題;然而,事實上,如果能從第二種方向思考,阻止問題的產(chǎn)生,那才是最好的辦法。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2290

    文章

    11017

    瀏覽量

    362482
  • STM32F091
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    3390

原文標題:STM32F091空片編程后不能直接運行用戶代碼

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    請問引腳數(shù)相同的STM32F2的程序可以直接運行STM32F4的上嗎?

    引腳數(shù)相同的STM32F2的程序可以直接運行STM32F4的芯片上嗎?手冊上說F4全兼容F2的軟件
    發(fā)表于 03-27 07:43

    如何配置能夠同時使用STM32F205,STM32F091,STM32F030支持的最大串口數(shù)?

    如何配置,能夠同時使用STM32F205,STM32F091,STM32F030支持的最大的串口數(shù)?GPIO_AFR配置,無法利用最多的串口數(shù)
    發(fā)表于 03-28 07:55

    基于stm32f051的工程在stm32f091上不能運行

    基于stm32f051的工程在stm32f091上不能運行,不知道有什么辦法可以解決?在stm32f051上的ucosii在091上執(zhí)行會出
    發(fā)表于 09-05 14:41

    新手學STM32 kEIL軟件安裝沒驅(qū)動

    剛?cè)胧至艘粔KSTM32f091,可kEIL軟件安裝沒驅(qū)動,求大神指導
    發(fā)表于 09-11 09:31

    請問有STM32F091資料分享嗎

    哪位朋友有STM32F091的數(shù)據(jù)手冊,中文的。有的可以分享給我可以嗎?
    發(fā)表于 09-11 10:58

    STM32F091 寫數(shù)據(jù)重啟

    程序中,對STM32F091進行數(shù)據(jù)寫入操作時,會引起復位重啟,請問有誰遇到過類似的問題,有什么解決辦法嗎,謝謝指教
    發(fā)表于 03-26 08:53

    STM32F091下載問題

    哪位用過STM32F091我最近在用,用JLINK下載不了,可能是工程問題,下載出現(xiàn)以下問題請問是咋回事
    發(fā)表于 11-01 08:57

    如何通過UART使用內(nèi)部引導加載程序?qū)?b class='flag-5'>STM32F091進行編程

    我想通過 UART (AN2606) 使用內(nèi)部引導加載程序?qū)?STM32F091 進行編程。我的特殊情況是我必須不從 PC 進行編程,它是另一個控制 STM32F091
    發(fā)表于 12-01 07:11

    STM32F091備份域是什么?

    我正在閱讀 STM32F091 的參考手冊,尤其是 RTC 章節(jié)。然后我查看了 CubeIDE 生成的(全部設置為 LL,而不是 HAL)初始化代碼的作用。因此它具有此函數(shù)
    發(fā)表于 01-13 06:04

    STM32F091使用System Bootloader下載

    STM32F091使用System Bootloader下載代碼
    發(fā)表于 12-07 18:17 ?0次下載

    proteus 調(diào)試MDK生成的HEX時不能直接運行的方法

    proteus 調(diào)試MDK生成的HEX時不能直接運行的方法
    發(fā)表于 09-22 15:16 ?4次下載
    proteus 調(diào)試MDK生成的HEX時不能<b class='flag-5'>直接運行</b>的方法

    直接運行圖像壓縮的處理代碼

    圖像壓縮的處理代碼,可直接運行
    發(fā)表于 02-05 14:36 ?0次下載

    解密運行外Flash中的app代碼

    STM32L5的新特性 OTFDEC OnTheFlyDECrypt硬件可以實時解密外置OSPI Flash中的數(shù)據(jù)和代碼,從而CPU能夠直接運行外Flash上的加密
    的頭像 發(fā)表于 09-09 13:54 ?2961次閱讀

    DS10312_STM32F091xB STM32F091xC單片機數(shù)據(jù)手冊

    DS10312_STM32F091xB STM32F091xC單片機數(shù)據(jù)手冊
    發(fā)表于 11-23 20:24 ?1次下載
    DS10312_<b class='flag-5'>STM32F091</b>xB <b class='flag-5'>STM32F091</b>xC單片機數(shù)據(jù)手冊

    ES0282_STM32F091xB和STM32F091xC單片機的局限性

    ES0282_STM32F091xB和STM32F091xC單片機的局限性
    發(fā)表于 11-23 20:38 ?0次下載
    ES0282_<b class='flag-5'>STM32F091</b>xB和<b class='flag-5'>STM32F091</b>xC單片機的局限性
    主站蜘蛛池模板: 日本三区四区免费高清不卡 | 日日爽天天干 | 国产日韩一区二区三区 | 国产一级特黄aa大片免费 | 九九免费久久这里有精品23 | 男女一进一出抽搐免费视频 | 涩涩涩综合在线亚洲第一 | 免费黄色一级毛片 | 国产日本三级在线播放线观看 | 久久mimi色| 在线观看免费午夜大片 | 免费在线看a| 加勒比精品久久一区二区三区 | 天天爽夜夜爽夜夜爽精品视频 | 天天在线干| 最新国产厕所 | 高清色黄毛片一级毛片 | 四虎国产精品永久在线播放 | 俺去啦网婷婷 | 日本一区二区视频在线观看 | 亚洲乱亚洲乱妇41p国产成人 | tdg58在线观看 | 日本不卡在线视频高清免费 | 在线成人精品国产区免费 | 午夜精品福利视频 | 边做边爱在线观看视频免费 | 国产欧美日韩综合精品无毒 | 国产伦精品一区二区三区女 | 日本三级视频在线播放 | 婷婷六月激情在线综合激情 | 日日噜噜夜夜狠狠tv视频免费 | 男人j进女人j的视频一进一出 | 美女被啪到哭网站在线观看 | 国产成人精品男人的天堂538 | 国产亚洲精品久久久久久午夜 | 亚洲插插 | 6080伦理久久精品亚洲 | 久久性妇女精品免费 | 日本色图网站 | 成人三级在线播放线观看 | 国产伦子系列视频6 |