国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【問題】STM32G0芯片擦除flash失敗,發(fā)現(xiàn)死在FLASH_SR_CFGBSY一直為1(已解決)

這篇具有很好參考價(jià)值的文章主要介紹了【問題】STM32G0芯片擦除flash失敗,發(fā)現(xiàn)死在FLASH_SR_CFGBSY一直為1(已解決)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

本人開發(fā)stm32g030和g070都遇到過擦除flash失敗的問題,HAL庫中按照例程方式擦除存在擦除失敗問題。例程基本流程如下:

HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_ALL_ERRORS) ;
HAL_FLASHEx_Erase(&pEraseInit,&PageError);
HAL_FLASH_Lock() ;

按照這種方式其實(shí)很容易擦除失敗。網(wǎng)上多數(shù)是說中斷問題等,還有些是看門狗喂狗問題。

以上問題之外,本人遇到的是FLASH_FLAG_CFGBSY一直被置位,導(dǎo)致擦除函數(shù)里判斷等待超時(shí)以后就略過去了。

【問題】STM32G0芯片擦除flash失敗,發(fā)現(xiàn)死在FLASH_SR_CFGBSY一直為1(已解決)

嘗試注釋掉這一部分的話,會(huì)在執(zhí)行擦除時(shí)之后觸發(fā)硬件錯(cuò)誤中斷。所以該方法不可取。作者開始尋找在擦除前通過某些操作把FLASH_SR_CFGBSY標(biāo)志位給置0,由于該標(biāo)志位是硬件置位的,軟件沒法置0,因此只能通過其他方式。

作者在嘗試了諸多方法都沒法把FLASH_SR_CFGBSY標(biāo)志置0,想換個(gè)方式解決,就是找到發(fā)生該標(biāo)志被置1的原因,結(jié)果發(fā)現(xiàn)本人的項(xiàng)目是因?yàn)榇?的發(fā)送執(zhí)行之后,F(xiàn)LASH_SR_CFGBSY就被置1了。

調(diào)用串口1發(fā)送前下圖:

【問題】STM32G0芯片擦除flash失敗,發(fā)現(xiàn)死在FLASH_SR_CFGBSY一直為1(已解決)

調(diào)用串口1發(fā)送后下圖:

【問題】STM32G0芯片擦除flash失敗,發(fā)現(xiàn)死在FLASH_SR_CFGBSY一直為1(已解決)

本人項(xiàng)目對(duì)打印日志的需求還是很需要的,所以不可能將就不使用打印的,于是又是在網(wǎng)上漫長(zhǎng)地尋找答案。某些論壇上也遇到同病相憐的開發(fā)者發(fā)表了一樣CFGBSY標(biāo)志置1不恢復(fù)的問題,沒人給出合適的答案。

偶然間自己嘗試通過iar的debug強(qiáng)制修改字符結(jié)果神奇的事情發(fā)生。

【問題】STM32G0芯片擦除flash失敗,發(fā)現(xiàn)死在FLASH_SR_CFGBSY一直為1(已解決)

隨便寫個(gè)‘1’

?【問題】STM32G0芯片擦除flash失敗,發(fā)現(xiàn)死在FLASH_SR_CFGBSY一直為1(已解決)

按下回車鍵確定,發(fā)生如下圖的結(jié)果:

【問題】STM32G0芯片擦除flash失敗,發(fā)現(xiàn)死在FLASH_SR_CFGBSY一直為1(已解決)

?CFGBSY置0了,同時(shí)報(bào)了3個(gè)錯(cuò)誤標(biāo)志來。

作者由此得來靈感,在unlock前,判斷CFGBSY是否置位1,如果在flash代碼區(qū)域中在自己覺得沒用的區(qū)域執(zhí)行寫入操作,就能夠把CFGBSY置0,同時(shí)報(bào)其他flash錯(cuò)誤標(biāo)記,然后通過清除這些標(biāo)記的手段實(shí)現(xiàn)擦除動(dòng)作。具體代碼參考如下:

#define FLASH_FLAG_ALL_ERRORS           (FLASH_FLAG_OPERR   | FLASH_FLAG_PROGERR | FLASH_FLAG_WRPERR | \
                                         FLASH_FLAG_PGAERR  | FLASH_FLAG_SIZERR  | FLASH_FLAG_PGSERR | \
                                         FLASH_FLAG_MISERR  | FLASH_FLAG_FASTERR | \
                                         FLASH_FLAG_OPTVERR | FLASH_FLAG_ECCC    | FLASH_FLAG_ECCD)
uint8_t lc_flash_ram_to_rom(void)
{
    FLASH_EraseInitTypeDef pEraseInit ;

    uint32_t PageError = 0;
    pEraseInit.TypeErase = FLASH_TYPEERASE_PAGES ;
    pEraseInit.Page = WORK_STORE_TABLE_PAGE ;
    pEraseInit.NbPages = 1 ;
    // pEraseInit.Banks = FLASH_BANK_1 ;

again:

    if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_CFGBSY) != 0x00U)
    {
        *(uint32_t *)(WORK_STORE_TABLE_ADDR+240) = 12323;//flash隨意寫入一個(gè)值,使flash觸發(fā)錯(cuò)誤
        __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_ALL_ERRORS) ;
    }
    if(HAL_FLASH_Unlock() != HAL_OK)
    {
        goto again ;
    }
    FLASH_WaitForLastOperation(10) ;//等待一下,提升擦除成功率

    HAL_FLASHEx_Erase(&pEraseInit,&PageError);
    
    if(PageError != 0xFFFFFFFF) {
        DEBUG_printf("\r\nerase fail\r\n") ;
        goto again ;//失敗時(shí)重新執(zhí)行
    }

    uint32_t flash_unit_n = (sizeof(work_store_table) / FLASH_UNIT_VALUE) + 1 ;
    uint64_t * flash_pdata = (uint64_t *)(&work_store_table) ;
    for(uint32_t i = 0 ; i < flash_unit_n ; ++i) {
        HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD,WORK_STORE_TABLE_ADDR+i*8,*(flash_pdata+i)) ;
    }
    HAL_FLASH_Lock() ;

    return 1 ;
}

? ? ? 關(guān)鍵代碼:

??*(uint32_t *)(WORK_STORE_TABLE_ADDR+240) = 12323

該方法只是隨意在flash塊中在自己想要擦除的地方隨意寫一個(gè)值。

通過多次測(cè)試,成功率100%,認(rèn)為已經(jīng)解決該問題,至于該工程的串口1為什么會(huì)觸發(fā)CFGBSY置位,已經(jīng)不用關(guān)系。雖然找不到根本原因,但是只要能解決問題的話作者已經(jīng)不在深究。文章來源地址http://www.zghlxwxcb.cn/news/detail-499654.html

到了這里,關(guān)于【問題】STM32G0芯片擦除flash失敗,發(fā)現(xiàn)死在FLASH_SR_CFGBSY一直為1(已解決)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32單片機(jī)Flash不擦除直寫案例分析

    STM32單片機(jī)Flash不擦除直寫案例分析

    產(chǎn)品跳閘前需保存致使產(chǎn)品動(dòng)作的故障類型和具體的故障分析數(shù)據(jù),并在產(chǎn)品二次上電后讀取故障類型,進(jìn)行相應(yīng)指示;之后清除故障類型的相關(guān)Flash,但故障分析數(shù)據(jù)仍保存,以便后續(xù)讀出分析。然而,F(xiàn)lash扇區(qū)擦除時(shí)間較長(zhǎng),會(huì)影響程序正常運(yùn)行、判斷。 Flash的編程原理都

    2024年02月16日
    瀏覽(24)
  • STM32G473VET6 FlashDB數(shù)據(jù)庫移植(裸機(jī)、片內(nèi)Flash)

    STM32G473VET6 FlashDB數(shù)據(jù)庫移植(裸機(jī)、片內(nèi)Flash)

    此文檔也適用于STM32G070 此處使用FlashDB官方最新源碼 FlashDB: 一款支持 KV 數(shù)據(jù)和時(shí)序數(shù)據(jù)的超輕量級(jí)數(shù)據(jù)庫 (gitee.com) 克隆源碼后目錄如下 紅框中幾個(gè)為移植必要文件與參考 根據(jù)FlashDB官方文檔可知,F(xiàn)lashDB底層依賴于RT-Thread的FAL組件,所以需要先移植FAL FlashDB源碼中port目錄下即

    2024年01月21日
    瀏覽(56)
  • STM32G030F6P6 芯片實(shí)驗(yàn) (一)

    STM32G030F6P6 芯片實(shí)驗(yàn) (一)

    淘寶搞了幾片, 沒試過 G系列, 試試感覺. 先搞片小系統(tǒng)版: 套 STM32F103C8T6小系統(tǒng)板格式. (1) Ref 有點(diǎn)跳, 從 STM32F103C8T6 系統(tǒng)板改的, 沒重編號(hào). (2) Type-C 純給電, 砍了 16pin的, 直接換 6pin的。 (3) 測(cè)試LED放 B2。 (4) 測(cè)試底板用原來 STM32F103C8T6的。 直接用嘉立創(chuàng)EDA畫了板, EDA用起來還可以

    2024年02月08日
    瀏覽(24)
  • STM32G030F6 (SOP-20)Cortex ? -M0+, 32KB Flash, 8KB RAM, 17 GPIOs

    STM32G030F6 (SOP-20)Cortex ? -M0+, 32KB Flash, 8KB RAM, 17 GPIOs

    淘寶淘了一批 STM32G030F6P6 SOP20.先備注一下, 還沒想到能干嘛用. 手上的 STM32F103C6T6還剩一些. 一堆 “淘寶原廠STM32F103C8T6”, 還燙著手. 理解信息: ( 逐步補(bǔ)充 ) System Clock GPIOs USART Timer ADC I2C STM32G030F6 (SOP-20) Arm ? Cortex ? -M0+ 32-bit MCU, 32 KB Flash, 8 KB RAM, 2x USART, timers, ADC, comm. I/Fs

    2024年02月10日
    瀏覽(20)
  • STM32使用QSPI控制FLASH(FLASH芯片型號(hào):MX25L25645G)

    STM32使用QSPI控制FLASH(FLASH芯片型號(hào):MX25L25645G)

    ?????????本篇詳細(xì)的記錄了如何使用STM32CubeMX配置STM32H723ZGT6的QSPI外設(shè)與 SPI Flash 通信(MX25L25645G)。 1、MX25L25645G引腳示意如圖: 手冊(cè)上的各個(gè)引腳的定義如圖: ????????由以上可知,該芯片可以使用SPI/QSPI控制,SPI模式使用SO、SI,SCLK,以及CS角,此狀態(tài)下WP角被作為

    2024年04月22日
    瀏覽(35)
  • stm32同芯片但不同flash工程更換Device出現(xiàn)報(bào)錯(cuò)

    stm32同芯片但不同flash工程更換Device出現(xiàn)報(bào)錯(cuò)

    stm32同芯片但不同flash工程更換Device出現(xiàn)報(bào)錯(cuò) 更換Device,我是從ZE換為C8: 把這個(gè)從HD更換為MD 解決!

    2024年02月09日
    瀏覽(25)
  • (超詳細(xì))STM32芯片F(xiàn)lash讀寫操作講解和代碼(寄存器版本)

    (超詳細(xì))STM32芯片F(xiàn)lash讀寫操作講解和代碼(寄存器版本)

    關(guān)于Flash,官方的解釋為:Flash為32位寬的存儲(chǔ)單元,可用于存儲(chǔ)代碼和數(shù)據(jù)常量。Flash模塊位于微控制器內(nèi)存映射中的特定基址……。而對(duì)于我們來說,只要知道Flash閃存區(qū)是一個(gè)掉電后也不會(huì)清除的數(shù)據(jù)存儲(chǔ)地。(相信大家對(duì)于Flash閃存也有著一定 的了解了,我也不多說廢話

    2023年04月19日
    瀏覽(23)
  • 解決stm32芯片鎖死 出現(xiàn)Error:Flash Download Failed-“Cortex-M3“

    解決stm32芯片鎖死 出現(xiàn)Error:Flash Download Failed-“Cortex-M3“

    打開MDK軟件使用SW當(dāng)時(shí)連接單片機(jī)發(fā)現(xiàn)能連接到板子 顯示已經(jīng)連接上 但是再下載的時(shí)候出現(xiàn)Error:Flash Download Failed-\\\"Cortex-M3\\\"下載錯(cuò)誤 首先排除硬件連接問題,能夠連接到stm32說明硬件連接沒有問題,再排除軟件編譯錯(cuò)誤,最后預(yù)估可能是硬件stm32芯片由于脈沖電平的干擾導(dǎo)致芯

    2024年02月15日
    瀏覽(27)
  • STM32芯片flash被鎖導(dǎo)致Error Flash Download failed Cortex-M4,解決辦法(全)親測(cè)有效

    STM32芯片flash被鎖導(dǎo)致Error Flash Download failed Cortex-M4,解決辦法(全)親測(cè)有效

    STM32芯片flash被鎖導(dǎo)致Error: Flash Download failed - \\\"Cortex-M4\\\",解決辦法(全)親測(cè)有效??! 方法1:由于Keil 中debug的仿真器配置出錯(cuò)導(dǎo)致的下載失敗(這種問題雖然是低級(jí)錯(cuò)誤,但我還是覺得非常有必要確認(rèn)一下自己的配置有沒有出錯(cuò)) 方法2:使用第三方燒錄軟件,通過串口燒錄

    2024年02月12日
    瀏覽(37)
  • 解決STM32G431輸出PWM掃頻消失問題

    解決STM32G431輸出PWM掃頻消失問題

    ????????最近練習(xí)藍(lán)橋杯嵌入式的題目,需要輸出一個(gè)PWM掃頻的信號(hào),遇到了PWM變頻率時(shí)有幾率消失的問題,?下面來研究下原因和解決方案。 ?????????由于Keil怎么改設(shè)置都不肯給我看外設(shè)寄存器,下面用CubeIDE復(fù)現(xiàn)下PWM消失的情況,用ST-Link調(diào)試。 ? ? ? ? 時(shí)鐘倍頻

    2024年04月10日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包