chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

STM32中使用快速編程時有哪些需要注意的地方?

Q4MP_gh_c472c21 ? 來源:STM32 ? 作者:STM32 ? 2021-02-02 10:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在一些新的 STM32 系列中,比如 STM32L4、STM32G0、STM32G4 等,除了 Flash 標準編程之外,還可以支持 Flash 的快速編程。那么對于 STM32G0 來說,在使用快速編程時,有哪些需要注意之處?

難點

某STM32用戶在其產(chǎn)品設(shè)計中,采用了 STM32G070RBT6,開發(fā)工程師希望在進行代碼升級的時候使用快速編程來提高編程速度,但是寫代碼時遇到很多問題。而在目前的 STM32G0 的 Cube 庫中并沒有 FLASH_FastProgram 例程,所以客戶希望得到一個參考例程來快速實現(xiàn)設(shè)計。

調(diào)研

1

了解問題

檢查最新版本的STM32Cube_FW_G0_V1.3.0/Projects/STM32CubeProjectsList.html 文件,確實可以看到現(xiàn)有的 STM32G0Cube 庫中并沒有 FLASH_FastProgram 例程,根據(jù)參考手冊,參考STM32Cube_FW_L4_V1.16.0ProjectsNUCLEO-L452REExamplesFLASHFLASH_FastProgram 例程,對 STM32Cube_FW_G0_V1.2.0ProjectsNUCLEO-G070RBExamplesFLASHFLASH_EraseProgram 進行修改以移植代碼。以下就撰寫例程代碼時,需要注意的問題簡單地介紹一下。

2

分析問題

首先,先來看一下 STM32L4 中 FLASH_FastProgram 例程中 readme.txt 對本示例的解釋,可以看到這是一個演示如何配置和使用 API 函數(shù)對內(nèi)部 Flash 存儲器進行擦除和快速編程的示例。

先來看一下 FastProgram 最核心的函數(shù) FLASH_Program_Fast()。

在 STM32L4Cube 中的 stm32l4xx_hal_flash,它是這么定義的:

static void FLASH_Program_Fast(uint32_t Address, uint32_t DataAddress)

而在 STM32G0Cube 中的 stm32g0xx_hal_flash,其定義是:

static __RAM_FUNC void FLASH_Program_Fast(uint32_t Address, uint32_t DataAddress)

這兩者有什么區(qū)別呢?就是在 STM32G0Cube 庫中使用了__RAM_FUNC 指明了這個函數(shù)是位于 RAM 區(qū)域的。為什么呢?

第一個要點:對 Flash 進行快速編程的時候不允許對 Flash 進行讀取,所以需要將這個快速編程的代碼放置于 RAM 中運行,以避免對 Flash 進行命令讀取。

那么,大家可能又有疑問了,那為什么 STM32L4Cube 中并沒有使用__RAM_FUNC 關(guān)鍵字,STM32L452 的 Flash 是 single bank,難道它就不需要放到RAM 里?如果大家細心的話,可以看到STM32L4這個例程中的鏈接文件是 stm32l452xx_sram.icf,在icf 文件中定義了ROM的地址為 0x20000000~0x20015FFF,也就是說這個示例代碼是跑在 RAM的,所以就不需要在這邊使用__RAM_FUNC 關(guān)鍵字了。還可以在 STM32L4 示例代碼中看到對整片 Flash 進行擦除而猜到這一點。從 STM32G0Cube 庫中 FLASH_Program_Fast() 這個函數(shù)的定義,可以看出它是可以直接使用 stm32l452xx_flash.icf 將快速編程核心代碼以外的其他代碼都放在 Flash 上面跑的,這個可能更符合用戶做 IAP 升級的習(xí)慣,當然,在這個情況下,我們就可能需要在程序中使用頁擦除而不是整片擦除了。

第二個要點:因為 Flash 進行快速編程的時候不允許對 Flash 進行讀取,所以還需要注意快速編程的源數(shù)據(jù)應(yīng)該位于 RAM 而非 Flash,以避免對 Flash 進行數(shù)據(jù)讀取。

因為在 Flash 快速編程的時候,需要將 64 個 word 一個行 (256 Bytes) 的數(shù)據(jù)寫到目標地址中,所以也就是說快速編程時,還會去訪問源數(shù)據(jù),如果源數(shù)據(jù)放在Flash就會導(dǎo)致問題產(chǎn)生。下面,我們解答一個移植中常見問題。

在從 STM32L4 到 STM32G0 的移植中,直接將 STM32L4 示例代碼中定義的源數(shù)據(jù)的數(shù)組代碼:

/* Table used for fast programming */ static const uint64_t Data64_To_Prog[FLASH_ROW_SIZE] = {0x0000000000000000, 0x1111111111111111, 0x2222222222222222, 0x3333333333333333, 0x4444444444444444, 0x5555555555555555, 0x6666666666666666, 0x7777777777777777, 0x8888888888888888,0x9999999999999999, 0xAAAAAAAAAAAAAAAA,0xBBBBBBBBBBBBBBBB,0xCCCCCCCCCCCCCCCC,0xDDDDDDDDDDDDDDDD, 0xEEEEEEEEEEEEEEEE, 0xFFFFFFFFFFFFFFFF, 0x0011001100110011, 0x2233223322332233, 0x4455445544554455, 0x6677667766776677, 0x8899889988998899,0xAABBAABBAABBAABB, 0xCCDDCCDDCCDDCCDD,0xEEFFEEFFEEFFEEFF, 0x2200220022002200, 0x3311331133113311, 0x6644664466446644, 0x7755775577557755, 0xAA88AA88AA88AA88,0xBB99BB99BB99BB99, 0xEECCEECCEECCEECC, 0xFFDDFFDDFFDDFFDD};

原封不動地拷貝到 STM32G0 的項目中,在測試的時候,總是會發(fā)現(xiàn)程序會死在快速編程的過程中。最后檢查才發(fā)現(xiàn)問題出現(xiàn)在這個數(shù)組的定義上。STM32L4 使用 stm32l452xx_sram.icf 定義了 ROM 的地址為 0x20000000~0x20015FFF,因此這個 const 關(guān)鍵字的數(shù)據(jù)實際上也是位于 RAM 中的。但是將這個數(shù)組搬到 STM32G0 的項目時,因為使用的是stm32l452xx_flash.icf,導(dǎo)致這個數(shù)組位于 Flash 中,在快速編程的時候程序就會去訪問 Flash 讀取源數(shù)據(jù),就導(dǎo)致程序死在快速編程過程。所以,需要將數(shù)組修改為:

/* Table used for fast programming */ uint64_t Data64_To_Prog[FLASH_ROW_SIZE] = { 0x0000000000000000, 0x1111111111111111, 0x2222222222222222, 0x3333333333333333, 0x4444444444444444, 0x5555555555555555, 0x6666666666666666, 0x7777777777777777, 0x8888888888888888,0x9999999999999999, 0xAAAAAAAAAAAAAAAA,0xBBBBBBBBBBBBBBBB, 0xCCCCCCCCCCCCCCCC,0xDDDDDDDDDDDDDDDD, 0xEEEEEEEEEEEEEEEE,0xFFFFFFFFFFFFFFFF,0x0011001100110011,0x2233223322332233, 0x4455445544554455, 0x6677667766776677, 0x8899889988998899,0xAABBAABBAABBAABB, 0xCCDDCCDDCCDDCCDD,0xEEFFEEFFEEFFEEFF, 0x2200220022002200, 0x3311331133113311, 0x6644664466446644, 0x7755775577557755, 0xAA88AA88AA88AA88,0xBB99BB99BB99BB99, 0xEECCEECCEECCEECC, 0xFFDDFFDDFFDDFFDD};

這樣程序就可以正常運行。

第三個要點:使用在 Flash 上跑 IAP 代碼進行快速編程的話,建議看一下參考手冊里快速編程的步驟,在步驟中的第一步時使用 Page Erase 對當前頁進行擦除后對當前頁進行快速編程,每次一頁,也就是“擦除當前頁→快速編程當前頁→擦除下一頁→快速編程下一頁→……”。

下面來仔細閱讀參考手冊,關(guān)注一下另外幾個要點。

第四要點:關(guān)于時鐘,在快速編程的過程中,CPU 的時鐘頻率(HCLK)不得低于 8MHz。這個在大家的應(yīng)用中一般都是滿足的,所以還好。另外,在“注”里邊說明,F(xiàn)STPG 位置 1 時,內(nèi)部振蕩器 HSI16 會自動使能,在 FSTPG 位清零時自動禁止,但 HSI16 之前已經(jīng)通過 HSION 使能的情況除外。

第五要點:這一行 32 個雙字必須連續(xù)寫入,兩個雙字寫入請求的最大時間間隔大約為 20us。如果后面的寫入請求時間超出了這個范圍,那么將導(dǎo)致 MISSERR 錯誤產(chǎn)生。一般來說,只要您使用的是庫文件的函數(shù),不用擔(dān)心這個問題。

第六要點:在兩次擦除之間,每一行的寫入,高壓持續(xù)時間不能大于8ms。一般來說,只要HCLK 的時鐘保證在8MHz以上,對32個雙字的連續(xù)寫序列,時間上還是沒問題的。如果真的程序沒寫好,導(dǎo)致存在這種情況,那么在芯片內(nèi)部有個7ms 的檢測機制,超時就會自動停止編程,并置位 FASTERR。

第七要點:關(guān)中斷。至于為什么?大家都知道,就不多說了。如果大家使用 Cube 庫,也可以看到在 FLASH_Program_Fast() 在進行關(guān)中斷,但是示例中并沒有恢復(fù)打開中斷,所以大家在實際應(yīng)用中根據(jù)情況看是否需要將中斷打開。

3

問題解決

上面幾個要點,如果軟件工程師使用的是 STM32Cube 庫,那么在撰寫代碼上最主要是檢查一下前面三個要點的情況。后面幾個要點稍微了解就可以了。

結(jié)論

Flash的快速編程可以節(jié)省編程的時間,但是在使用上因為有不少限制因素,使得它的軟件設(shè)計比標準編程復(fù)雜,需要工程師細心調(diào)試。

建議

軟件工程師在撰寫Flash快速編程時,仔細閱讀下參考手冊,并參考本文中的各個要點,然后根據(jù)自己的實際應(yīng)用情況,理清邏輯,來撰寫完整的 Flash 編程代碼。

原文標題:被STM32G0快速編程難倒的,看這里

文章出處:【微信公眾號:嵌入式ARM】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

責(zé)任編輯:haq

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

    關(guān)注

    2301

    文章

    11094

    瀏覽量

    369921
  • 編程
    +關(guān)注

    關(guān)注

    89

    文章

    3704

    瀏覽量

    96391

原文標題:被STM32G0快速編程難倒的,看這里

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

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

    用戶在使用GPIO反跳功能時需要注意哪些限制?

    用戶在使用GPIO反跳功能時需要注意哪些限制?
    發(fā)表于 08-26 06:32

    在NUC505選擇從內(nèi)部SPI閃存模式啟動時,電路設(shè)計需要注意什么呢?

    在NUC505選擇從內(nèi)部SPI閃存模式啟動時,電路設(shè)計需要注意什么?
    發(fā)表于 08-21 08:21

    振弦式土體沉降計鉆孔埋設(shè)需要注意什么?

    、確保長期監(jiān)測穩(wěn)定性的前提。振弦式土體沉降計鉆孔埋設(shè)需要注意什么?關(guān)鍵注意事項規(guī)避施工風(fēng)險工程實踐需重點管控四類風(fēng)險:鉆孔質(zhì)量控制:傾斜度偏差需≤2°,防止儀器偏斜
    的頭像 發(fā)表于 08-19 13:56 ?415次閱讀
    振弦式土體沉降計鉆孔埋設(shè)<b class='flag-5'>需要注意</b>什么?

    企業(yè)選擇SDWAN方案時,需要注意哪些?

    ##企業(yè)選擇SDWAN方案時,需要注意哪些?在數(shù)字化轉(zhuǎn)型浪潮,企業(yè)廣域網(wǎng)正經(jīng)歷從“連通即可”向“智能、安全、云原生”的深刻變革。SD-WAN技術(shù)憑借其顛覆性的架構(gòu)理念,成為企業(yè)優(yōu)化網(wǎng)絡(luò)性能
    的頭像 發(fā)表于 08-15 10:03 ?1132次閱讀
    企業(yè)選擇SDWAN方案時,<b class='flag-5'>需要注意</b>哪些?

    請問工程移植都有哪些需要注意地方?

    ST的固件庫還是挺豐富的,有時候我們直接移植工程還是挺方便的,不過總是會有各種各樣的報錯存在,在移植的時候有哪些需要注意的嗎?或者一些常見的報錯如何解決?
    發(fā)表于 07-11 06:50

    使用STM32CubeMX進行配置USB的時候,有哪些小的需要注意的細節(jié)?

    在使用STM32CubeMX進行配置USB的時候,是參照例程進行的配置,自己配置的就是沒有成功,例程就滅有問題,總感覺哪里沒有打開?有人遇到過需要注意的小細節(jié)嗎?
    發(fā)表于 04-23 06:54

    穩(wěn)壓器在安裝接線前需要注意哪些

    穩(wěn)壓器是一種非常重要的電氣設(shè)備,它可以有效地解決電壓不穩(wěn)定、波動過大等問題,保證設(shè)備的正常運行,然而,穩(wěn)壓器接線并非簡單地將線接好就行,而是需要注意一些事項,以確保其能夠安全、有效地發(fā)揮應(yīng)有的作用,下面小編來說說穩(wěn)壓器在安裝接線前需要注意哪些。
    的頭像 發(fā)表于 04-03 15:20 ?493次閱讀
    穩(wěn)壓器在安裝接線前<b class='flag-5'>需要注意</b>哪些

    AD轉(zhuǎn)換需要注意電流的回流路徑,這個電流的回流路徑具體指的是什么呢?

    AD轉(zhuǎn)換需要注意 電流的回流路徑 這個電流的回流路徑具體指的是什么呢 是不是單片機和AD轉(zhuǎn)換芯片之間的數(shù)據(jù)線和DGND線構(gòu)成一個回路輸入信號和AGND構(gòu)成一個回路
    發(fā)表于 02-14 07:53

    速度探頭在使用過程需要注意哪些問題呢

    速度探頭在使用過程需要注意安裝與維護、參數(shù)設(shè)置與校準、使用注意事項以及安全注意事項等多個方面。只有做好這些工作,才能確保探頭的正常工作、測量精度和安全性。
    的頭像 發(fā)表于 02-06 15:11 ?686次閱讀

    ADS1274 CLK的輸入有什么要注意地方

    時鐘輸入。這個芯片CLK的輸入有什么要注意地方?另外,SPI模式下,SCLK/CLK的關(guān)系一定要是1:1 1:2 1:4。。。這樣的嗎,在采樣率很低的時候,SCLK能否高于CLK?
    發(fā)表于 01-16 08:08

    請問在使用ADS1262采集數(shù)據(jù)的時候有什么需要注意地方嗎?

    START1命令之后將CS引腳置高,在發(fā)送讀數(shù)命令之前再將CS引腳置低,但是實際采集出來的數(shù)據(jù)完全不對。請問在使用ADS1262采集數(shù)據(jù)的時候有什么需要注意地方嗎?
    發(fā)表于 12-27 06:30

    做16位AD轉(zhuǎn)換,在PCB布線時候需要注意哪些事項?

    在做16位AD轉(zhuǎn)換 在PCB布線時候需要注意哪些事項
    發(fā)表于 12-12 06:37

    測試光伏逆變器需要注意哪些地方呢?

    在進行光伏逆變器測試時,需要注意以下幾個關(guān)鍵方面:1.電氣安全測試:包括輸入端口絕緣電阻測試、漏電測試、接地連接測試等,以確保逆變器在電氣方面的安全性。2.性能參數(shù)測試:測試包括額定功率、極大
    的頭像 發(fā)表于 11-13 17:17 ?1242次閱讀
    測試光伏逆變器<b class='flag-5'>需要注意</b>哪些<b class='flag-5'>地方</b>呢?

    LMX2595EVM在使用時應(yīng)該如何確保其進入鎖定狀態(tài),以及操作時有什么需要注意的嗎?

    在使用lmx2595evm時有時很難進入鎖定狀態(tài),如果已鎖定,插拔線時鎖定指示燈也會閃爍,請問在使用時應(yīng)該如何確保其進入鎖定狀態(tài),以及操作時有什么需要注意的嗎
    發(fā)表于 11-08 06:42

    位置開關(guān)與接近開關(guān)IB50-P80T-D2-GY531需要注意哪些問題

    位置開關(guān)與接近開關(guān)在應(yīng)用需要注意的問題涉及多個方面,包括安裝、使用、維護以及環(huán)境適應(yīng)性等。為了確保開關(guān)的正常工作和延長使用壽命,必須嚴格遵守相關(guān)規(guī)定和操作規(guī)程。
    的頭像 發(fā)表于 11-07 11:12 ?867次閱讀