色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

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

Q4MP_gh_c472c21 ? 來源:STM32 ? 作者:STM32 ? 2021-02-02 10:26 ? 次閱讀

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

難點

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

調研

1

了解問題

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

2

分析問題

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

先來看一下 FastProgram 最核心的函數 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)

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

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

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

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

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

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

/* 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 的項目中,在測試的時候,總是會發現程序會死在快速編程的過程中。最后檢查才發現問題出現在這個數組的定義上。STM32L4 使用 stm32l452xx_sram.icf 定義了 ROM 的地址為 0x20000000~0x20015FFF,因此這個 const 關鍵字的數據實際上也是位于 RAM 中的。但是將這個數組搬到 STM32G0 的項目時,因為使用的是stm32l452xx_flash.icf,導致這個數組位于 Flash 中,在快速編程的時候程序就會去訪問 Flash 讀取源數據,就導致程序死在快速編程過程。所以,需要將數組修改為:

/* 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 對當前頁進行擦除后對當前頁進行快速編程,每次一頁,也就是“擦除當前頁→快速編程當前頁→擦除下一頁→快速編程下一頁→……”。

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

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

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

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

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

3

問題解決

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

結論

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

建議

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

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

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

責任編輯:haq

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

    關注

    2270

    文章

    10904

    瀏覽量

    356338
  • 編程
    +關注

    關注

    88

    文章

    3619

    瀏覽量

    93776

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

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

收藏 人收藏

    評論

    相關推薦

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

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

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

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

    TLV320aic33進行ADC的使用時,為什么沒有輸出?ADC使用時有什么要注意地方嗎?

    您好!在使用貴司TLV320aic33 進行ADC的使用時,LINE1LP接輸入信號,LINE1LM接地,根據用戶指南上進行ADC的配置,測量PGA輸出正常,BCLK,WCLK正常,但ADC始終無輸出,請問ADC使用時有什么要注意
    發表于 10-22 08:10

    THS4001在設計電路上有什么特別需要注意地方嗎?

    為了放大DDS出來的信號(f=1MHz,Vpp=1V),前段時間買了THS4001這個芯片。可是按照手冊簡單地搭了一個閉環增益為6的同相比例放大器,卻發現輸出的波形Vpp連1V都不到。請教這款運放在設計電路上有什么特別需要注意地方
    發表于 08-27 06:49

    使用THS3091有什么要注意地方嗎?

    THS3091好像燒了。引腳3和4或6和7是通的,不知道怎么回事。用的正負15V的電源。沒有放大,沒有輸入的輸入時,輸出就有一個直流,大概7到8V。測引腳,引腳6、7是通的,芯片還特燙。THS3091使用有什么要注意地方嗎?
    發表于 08-16 06:26

    請問下LM239N替代LM339N, 在應用時有什么需要注意的嗎?

    你好,請問下LM239N 替代LM339N, 在應用時有什么需要注意的嗎?周邊器件是否需要做些調整?謝謝!
    發表于 08-07 07:31

    在用運算放大器做比較器使用時有什么需要注意哪些參數呢?

    在用運算放大器做比較器使用時有什么需要注意哪些參數呢?我測試和仿真了LM358做滯回比較器,設計電路如下圖,當反相輸入端比較信號是50Hz時是可以的,當反相輸入端比較信號是20k時輸出跟不上了,感覺應該是壓擺率的問題,所以想問一下在用運算放大器設計做為比較器
    發表于 08-06 08:01

    應用PLC需要注意哪些問題

    PLC(可編程邏輯控制器)作為現代工業控制的核心設備,其應用的廣泛性和重要性不言而喻。然而,在應用PLC的過程,也需要注意一系列問題,以確保PLC系統的穩定運行和高效控制。本文將結合實際應用經驗,詳細探討應用PLC時
    的頭像 發表于 06-17 11:29 ?594次閱讀

    pcb電路板元件布局需要注意什么

    pcb電路板元件布局需要注意什么
    的頭像 發表于 03-14 15:24 ?895次閱讀

    TLE9853QX能不能使用fastlin進行燒寫程序,有沒有需要注意地方

    TLE9853QX芯片能不能使用fastlin進行燒寫程序,有沒有需要注意地方
    發表于 03-05 06:38

    激光焊接技術在焊接鋁合金時需要注意什么

    需要填充材料,減少了材料成本和加工時間。下面來看看激光焊接技術在焊接鋁合金時需要注意什么。 在激光焊接鋁合金時需要注意以下幾點: 1.清理焊縫表面:在焊接前,需要將焊縫表面的油污、氧
    的頭像 發表于 02-29 13:43 ?878次閱讀
    激光焊接技術在焊接鋁合金時<b class='flag-5'>需要注意</b>什么

    使用電容降壓時都需要注意哪些?

    的事項,以確保電路的安全運行和降壓效果的可靠性。下面將詳細介紹電容降壓時需要注意的各個方面。 第一,電容的選擇。在電容降壓電路,電容的選擇是非常重要的。首先需要確定所需降壓電壓范圍和輸出電流負載的大小,根據這
    的頭像 發表于 02-02 15:27 ?598次閱讀

    電源濾波器在接線時有哪些需要注意的事項?

    電源濾波器在接線時有哪些需要注意的事項?|維愛普電源濾波器
    的頭像 發表于 01-31 09:35 ?645次閱讀

    柔性電流探頭原理和測量需要注意的問題

    柔性電流探頭原理和測量需要注意的問題 柔性電流探頭是一種用于測量電流的傳感器,它采用了柔性材料,使其能夠適應不同形狀和尺寸的導線,從而實現了非侵入式測量。在本文中,我們將詳細介紹柔性電流探頭
    的頭像 發表于 01-05 15:08 ?980次閱讀

    面粉加工項目使用PLC要注意哪些事項呢?

    在面粉加工項目中使用PLC(可編程邏輯控制器)時,有幾個方面需要注意
    的頭像 發表于 01-05 09:27 ?717次閱讀
    主站蜘蛛池模板: 久草网国产自偷拍| 日本亚洲电影| 亚洲精品123区| 狠狠狠狠狠狠干| 在线观看成年人免费视频| 男人就爱吃这套下载| 动漫美女禁区| 亚洲视频精品| 3a丝袜论坛| 欧美日韩第一区| 国产精品日本一区二区在线播放 | 波多野结衣网站www| 午夜福利不卡片在线播放免费| 后入到高潮免费观看| 99精品欧美一区二区三区美图| 哇嘎在线精品视频在线观看| 久久久久综合网| 国产69精品9999XXXX| 中国人泡妞xxxxxxxx19| 日韩男明星| 麻豆久久国产亚洲精品超碰热| 疯狂小护士| 51精品国产AV无码久久久密桃| 色翁荡熄月月| 免费光看午夜请高视频| 国产人妻麻豆蜜桃色| 97视频在线观看免费播放| 午夜理论在线观看不卡大地影院| 妹妹好色网| 国语自产拍大学生在线观看| jizz非洲| 在线免费观看a视频| 无遮掩H黄纯肉动漫在线观看星| 美女久久久| 国产综合自拍 偷拍在线| 哺乳期妇女挤奶水36d| 又色又爽又黄gif动态视频| 甜性涩爱bt下载| 人驴交f ee欧美| 免费高清毛片| 久久久精品成人免费看|