一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

在一些新的 STM32 系列中,比如 STM32L4、STM32G0、STM32G4 等,除了 Flash 標(biāo)準(zhǔn)編程之外,還可以支持 Flash 的快速編程。那么對(duì)于 STM32G0 來(lái)說(shuō),在使用快速編程時(shí),有哪些需要注意之處?

難點(diǎn)

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

調(diào)研

1

了解問(wèn)題

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

2

分析問(wèn)題

首先,先來(lái)看一下 STM32L4 中 FLASH_FastProgram 例程中 readme.txt 對(duì)本示例的解釋?zhuān)梢钥吹竭@是一個(gè)演示如何配置和使用 API 函數(shù)對(duì)內(nèi)部 Flash 存儲(chǔ)器進(jìn)行擦除和快速編程的示例。

先來(lái)看一下 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 庫(kù)中使用了__RAM_FUNC 指明了這個(gè)函數(shù)是位于 RAM 區(qū)域的。為什么呢?

第一個(gè)要點(diǎn):對(duì) Flash 進(jìn)行快速編程的時(shí)候不允許對(duì) Flash 進(jìn)行讀取,所以需要將這個(gè)快速編程的代碼放置于 RAM 中運(yùn)行,以避免對(duì) Flash 進(jìn)行命令讀取。

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

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

因?yàn)樵?Flash 快速編程的時(shí)候,需要將 64 個(gè) word 一個(gè)行 (256 Bytes) 的數(shù)據(jù)寫(xiě)到目標(biāo)地址中,所以也就是說(shuō)快速編程時(shí),還會(huì)去訪問(wèn)源數(shù)據(jù),如果源數(shù)據(jù)放在Flash就會(huì)導(dǎo)致問(wèn)題產(chǎn)生。下面,我們解答一個(gè)移植中常見(jiàn)問(wè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};

原封不動(dòng)地拷貝到 STM32G0 的項(xiàng)目中,在測(cè)試的時(shí)候,總是會(huì)發(fā)現(xiàn)程序會(huì)死在快速編程的過(guò)程中。最后檢查才發(fā)現(xiàn)問(wèn)題出現(xiàn)在這個(gè)數(shù)組的定義上。STM32L4 使用 stm32l452xx_sram.icf 定義了 ROM 的地址為 0x20000000~0x20015FFF,因此這個(gè) const 關(guān)鍵字的數(shù)據(jù)實(shí)際上也是位于 RAM 中的。但是將這個(gè)數(shù)組搬到 STM32G0 的項(xiàng)目時(shí),因?yàn)槭褂玫氖莝tm32l452xx_flash.icf,導(dǎo)致這個(gè)數(shù)組位于 Flash 中,在快速編程的時(shí)候程序就會(huì)去訪問(wèn) Flash 讀取源數(shù)據(jù),就導(dǎo)致程序死在快速編程過(guò)程。所以,需要將數(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};

這樣程序就可以正常運(yùn)行。

第三個(gè)要點(diǎn):使用在 Flash 上跑 IAP 代碼進(jìn)行快速編程的話,建議看一下參考手冊(cè)里快速編程的步驟,在步驟中的第一步時(shí)使用 Page Erase 對(duì)當(dāng)前頁(yè)進(jìn)行擦除后對(duì)當(dāng)前頁(yè)進(jìn)行快速編程,每次一頁(yè),也就是“擦除當(dāng)前頁(yè)→快速編程當(dāng)前頁(yè)→擦除下一頁(yè)→快速編程下一頁(yè)→……”。

下面來(lái)仔細(xì)閱讀參考手冊(cè),關(guān)注一下另外幾個(gè)要點(diǎn)。

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

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

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

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

3

問(wèn)題解決

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

結(jié)論

Flash的快速編程可以節(jié)省編程的時(shí)間,但是在使用上因?yàn)橛胁簧傧拗埔蛩?,使得它的軟件設(shè)計(jì)比標(biāo)準(zhǔn)編程復(fù)雜,需要工程師細(xì)心調(diào)試。

建議

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

原文標(biāo)題:被STM32G0快速編程難倒的,看這里

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

責(zé)任編輯:haq

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

    關(guān)注

    2293

    文章

    11032

    瀏覽量

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

    關(guān)注

    88

    文章

    3689

    瀏覽量

    95271

原文標(biāo)題:被STM32G0快速編程難倒的,看這里

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    請(qǐng)問(wèn)工程移植都有哪些需要注意地方?

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

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

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

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

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

    速度探頭在使用過(guò)程需要注意哪些問(wèn)題呢

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

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

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

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

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

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

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

    TLV320aic33進(jìn)行ADC的使用時(shí),為什么沒(méi)有輸出?ADC使用時(shí)有什么要注意地方嗎?

    您好!在使用貴司TLV320aic33 進(jìn)行ADC的使用時(shí),LINE1LP接輸入信號(hào),LINE1LM接地,根據(jù)用戶(hù)指南上進(jìn)行ADC的配置,測(cè)量PGA輸出正常,BCLK,WCLK正常,但ADC始終無(wú)輸出,請(qǐng)問(wèn)ADC使用時(shí)有什么要注意
    發(fā)表于 10-22 08:10

    請(qǐng)問(wèn)啟用AIC3104本身降噪功能,有什么需要注意地方

    希望能夠驗(yàn)證下AIC3104本身自帶的降噪功能,自己根據(jù)芯片文檔改了0x1c,0x1f寄存器的值,發(fā)現(xiàn)效果很不好。 請(qǐng)問(wèn)啟用AIC3104本身降噪功能,有什么需要注意地方?
    發(fā)表于 10-15 08:28

    THS4001在設(shè)計(jì)電路上有什么特別需要注意地方嗎?

    為了放大DDS出來(lái)的信號(hào)(f=1MHz,Vpp=1V),前段時(shí)間買(mǎi)了THS4001這個(gè)芯片??墒前凑帐謨?cè)簡(jiǎn)單地搭了一個(gè)閉環(huán)增益為6的同相比例放大器,卻發(fā)現(xiàn)輸出的波形Vpp連1V都不到。請(qǐng)教這款運(yùn)放在設(shè)計(jì)電路上有什么特別需要注意地方
    發(fā)表于 08-27 06:49

    bnc公頭注塑需要注意什么

    德索工程師說(shuō)道在BNC公頭注塑過(guò)程需要注意多個(gè)方面以確保產(chǎn)品的質(zhì)量和生產(chǎn)效率。以下是對(duì)這一過(guò)程關(guān)鍵注意事項(xiàng)的詳細(xì)闡述:   材料選擇:根據(jù)BNC公頭的使用環(huán)境和性能要求,選
    的頭像 發(fā)表于 08-22 08:53 ?545次閱讀
    bnc公頭注塑<b class='flag-5'>需要注意</b>什么

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

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

    請(qǐng)問(wèn)下LM239N替代LM339N, 在應(yīng)用時(shí)有什么需要注意的嗎?

    你好,請(qǐng)問(wèn)下LM239N 替代LM339N, 在應(yīng)用時(shí)有什么需要注意的嗎?周邊器件是否需要做些調(diào)整?謝謝!
    發(fā)表于 08-07 07:31

    在用運(yùn)算放大器做比較器使用時(shí)有什么需要注意哪些參數(shù)呢?

    在用運(yùn)算放大器做比較器使用時(shí)有什么需要注意哪些參數(shù)呢?我測(cè)試和仿真了LM358做滯回比較器,設(shè)計(jì)電路如下圖,當(dāng)反相輸入端比較信號(hào)是50Hz時(shí)是可以的,當(dāng)反相輸入端比較信號(hào)是20k時(shí)輸出跟不上了,感覺(jué)應(yīng)該是壓擺率的問(wèn)題,所以想問(wèn)一下在用運(yùn)算放大器設(shè)計(jì)做為比較器
    發(fā)表于 08-06 08:01

    共模電感選型參數(shù)需要注意哪些

    電子發(fā)燒友網(wǎng)站提供《共模電感選型參數(shù)需要注意哪些.docx》資料免費(fèi)下載
    發(fā)表于 07-30 14:23 ?0次下載