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

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

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

CH32V103系列MCU內(nèi)部FLASH讀寫操作方式

CHANBAEK ? 來源:CSDN-借過風(fēng)景 ? 作者:CSDN-借過風(fēng)景 ? 2023-01-31 15:02 ? 次閱讀

簡介

CH32V103系列是以青稞V3A處理器為核心的32位通用MCU,該處理器是基于RISC-V開源指令集設(shè)計(jì)。片上集成了時(shí)鐘安全機(jī)制、多級電源管理、通用DMA控制器。此系列具有1路USB2.0主機(jī)/設(shè)備接口、多通道12位ADC轉(zhuǎn)換模塊、多通道TouchKey、多組定時(shí)器、多路IIC/USART/SPI接口等豐富的外設(shè)資源。

本章教程將通過程序代碼進(jìn)行內(nèi)部FLASH讀寫操作。

1、CH32V103內(nèi)部FLASH簡介及相關(guān)函數(shù)介紹

CH32V103芯片含有一個(gè)內(nèi)部FLASH,其存儲數(shù)據(jù)在掉電后不會丟失,主要用于存儲程序代碼。芯片在重新上電并復(fù)位后,可通過加載讀取內(nèi)部FLASH中程序代碼運(yùn)行。

通常,我們可通過兩種方式對內(nèi)部FLASH進(jìn)行讀寫:一是通過下載器等外部工具讀寫內(nèi)部FLASH,二是通過芯片運(yùn)行程序代碼讀取自身內(nèi)部FLASH。本章即通過第二種方法進(jìn)行內(nèi)部FLASH讀寫。此外,就讀寫速度而言,讀寫內(nèi)部FLASH比外部FLASH快的多,且由于內(nèi)部FLASH掉電后數(shù)據(jù)不會丟失,因此內(nèi)部FLASH剩余空間可用于存儲重要數(shù)據(jù)和關(guān)鍵記錄。

由于內(nèi)部FLASH可被通過外部工具或程序代碼讀寫,為了防止內(nèi)部FLASH中存儲數(shù)據(jù)被獲取,某些應(yīng)用會禁止讀寫內(nèi)部FLASH內(nèi)容,或在第一次運(yùn)行時(shí)計(jì)算加密信息并記錄到某些區(qū)域,然后刪除自身的部分加密代碼,這些應(yīng)用都涉及到內(nèi)部FLASH的操作。

CH32V103內(nèi)部FLASH主要包含主存儲器和信息塊兩塊區(qū)域,其中信息塊又可被分為兩塊系統(tǒng)引導(dǎo)代碼存儲區(qū)域、用戶選擇字和廠商配置字區(qū)域。其中,主存儲器區(qū)域主要用于用戶的應(yīng)用程序存儲,以4K字節(jié)(32 頁)單位進(jìn)行寫保護(hù)劃分;除了“廠商配置字”區(qū)域出廠鎖定,用戶不可訪問,其他區(qū)域在一定條件下用戶可操作。

CH32V103內(nèi)部FLASH具有2種編程/擦除方式,具體如下:

標(biāo)準(zhǔn)編程:此方式是默認(rèn)編程方式(兼容方式)。這種模式下CPU以單次2字節(jié)方式執(zhí)行編程,單次1K字節(jié)執(zhí)行擦除及整片擦除操作。

快速編程:此方式采用頁操作方式(推薦)。經(jīng)過特定序列解鎖后,執(zhí)行單次128字節(jié)的編程及128字節(jié)擦除。

關(guān)于CH32V103內(nèi)部FLASH具體信息,可參考CH32V103應(yīng)用手冊。CH32V103內(nèi)部FLASH標(biāo)準(zhǔn)庫函數(shù)具體內(nèi)容如下:

pYYBAGPYvGGAXycRAAGJp1PCa9E193.png

poYBAGPYvGGAGjwiAABGDg5mAYU175.png

2、硬件設(shè)計(jì)

本章教程主要通過程序代碼進(jìn)行內(nèi)部FLASH讀寫操作,使用CH32V103內(nèi)部資源,無需進(jìn)行硬件連接。

3、軟件設(shè)計(jì)

CH32V103內(nèi)部FLASH編程/擦除方式有兩種,一種是標(biāo)準(zhǔn)編程,一種是快速編程,本章即使用上述這兩種方式分別進(jìn)行內(nèi)部FLASH讀寫操作,程序編程主要分3個(gè)步驟:

1、對內(nèi)部FLASH進(jìn)行解鎖;

2、對內(nèi)部FLASH進(jìn)行頁擦除;

3、對內(nèi)部FLASH進(jìn)行讀寫操作。

根據(jù)上述操作步驟,編寫具體程序,具體程序如下:

flash.h文件

pYYBAGPYvGGAdvLSAABfaQay0UE292.png

flash.h文件主要包含相關(guān)定義和函數(shù)聲明;

flash.c文件

pYYBAGPYvGGAcaLJAACwSoJAY1c353.png

poYBAGPYvGGAPjwYAAEd09RflpQ140.png

pYYBAGPYvGGAM3tTAAFJDsHP4C0650.png

poYBAGPYvGGAS1MPAAB0sVd7dE8825.png

flash.c文件主要包含兩個(gè)函數(shù),一個(gè)是內(nèi)部FLASH標(biāo)準(zhǔn)編程函數(shù)Flash_Test,一個(gè)是內(nèi)部FLASH快速編程函數(shù)Flash_Test_Fast,這兩個(gè)函數(shù)具體執(zhí)行過程如下:

內(nèi)部FLASH標(biāo)準(zhǔn)編程函數(shù)Flash_Test執(zhí)行過程:

(1)調(diào)用FLASH_Unlock函數(shù)進(jìn)行解鎖;

(2) 根據(jù)起始地址及結(jié)束地址計(jì)算需要擦除頁數(shù);

(3) 調(diào)用FLASH_ClearFlag函數(shù)清除各種標(biāo)志位;

(4) 使用for循環(huán)以及調(diào)用FLASH_ErasePage函數(shù)擦除頁數(shù),每次擦除一頁;

(5) 使用while循環(huán)并調(diào)用FLASH_ProgramWord函數(shù)向起始地址至結(jié)束地址的存儲區(qū)域都寫入變量“Data”存儲的數(shù)值數(shù)值;

(6) 調(diào)用FLASH_Lock函數(shù)進(jìn)行上鎖;

(7) 使用指針讀取寫入的數(shù)據(jù)內(nèi)容并校驗(yàn)。

內(nèi)部FLASH快速編程函數(shù)Flash_Test_Fast執(zhí)行過程與標(biāo)準(zhǔn)編程執(zhí)行過程類似,具體如下:

(1)調(diào)用FLASH_Unlock_Fast函數(shù)進(jìn)行解鎖;

(2) 調(diào)用FLASH_ErasePage_Fast函數(shù)擦除指定閃存頁;

(3) 調(diào)用FLASH_BufReset函數(shù)復(fù)位閃存緩沖區(qū),執(zhí)行清除內(nèi)部128字節(jié)緩存區(qū)操作;

(4) 調(diào)用FLASH_BufLoad函數(shù)向指定地址開始連續(xù)寫入16字節(jié)數(shù)據(jù)(4字節(jié)/次操作,寫的地址每次偏移量為4),然后執(zhí)行加載到緩沖區(qū);

(5) 調(diào)用FLASH_ProgramPage_Fast函數(shù)啟動(dòng)一次快速頁編程動(dòng)作,編程指定的閃存頁;

(6) 調(diào)用FLASH_Lock_Fast函數(shù)進(jìn)行上鎖;

(7) 使用for循環(huán)讀取編程地址進(jìn)行數(shù)據(jù)校驗(yàn)并返回校驗(yàn)值。

以上兩個(gè)函數(shù)執(zhí)行過程可對照CH32V103應(yīng)用手冊第24章閃存操作流程進(jìn)行程序編寫,更有助于理解編程。

main.c函數(shù)

pYYBAGPYvGGAWHS7AACUoI2Oii8917.png

main.c函數(shù)主要進(jìn)行函數(shù)初始化以及根據(jù)flash.c文件兩個(gè)函數(shù)返回值輸出相應(yīng)信息。

4、下載驗(yàn)證

將編譯好的程序下載到開發(fā)板并復(fù)位,串口打印情況具體如下:

poYBAGPYvGGAMUe2AACIfTVMoeM163.png

根據(jù)串口打印信息可知,內(nèi)部FLASH標(biāo)準(zhǔn)編程和快速編程測試成功。

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

    關(guān)注

    68

    文章

    19286

    瀏覽量

    229841
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17148

    瀏覽量

    351195
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1635

    瀏覽量

    148023
  • RISC-V
    +關(guān)注

    關(guān)注

    45

    文章

    2277

    瀏覽量

    46159
  • CH32V103
    +關(guān)注

    關(guān)注

    1

    文章

    13

    瀏覽量

    1015
  • ch32
    +關(guān)注

    關(guān)注

    0

    文章

    73

    瀏覽量

    647
收藏 人收藏

    評論

    相關(guān)推薦

    基于CH32V103系列MCU的ADC采樣設(shè)計(jì)

    CH32V103系列是以青稞V3A處理器為核心的32位通用RISC-V MCU,該處理器是基于RISC-
    的頭像 發(fā)表于 01-31 14:21 ?4167次閱讀
    基于<b class='flag-5'>CH32V103</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b>的ADC采樣設(shè)計(jì)

    CH32V103數(shù)據(jù)手冊

    教程基于沁恒32位通用增強(qiáng)型RISC-V架構(gòu)MCU CH32V103,力爭全面分析CH32V103的每個(gè)外設(shè)功能及使用方法,手把手教大家玩轉(zhuǎn)RISC-
    發(fā)表于 07-19 07:55

    系列比如103系列,CH32V103系列CH32F103有哪些區(qū)別?

    系列比如103系列,CH32V103系列CH32F103有哪些區(qū)別?
    發(fā)表于 03-09 10:05

    CH32V103基礎(chǔ)教程15-SPI讀寫FLASH

    本章教程將使用CH32V103的SPI讀寫FLASH,并通過串口調(diào)試助手將讀寫結(jié)果打印顯示。1、SPI簡介及相關(guān)函數(shù)介紹SPI是串行外設(shè)接口(Serial Peripheral Int
    發(fā)表于 04-17 15:30

    CH32V103基礎(chǔ)教程23-讀寫內(nèi)部FLASH

    本章教程將通過程序代碼進(jìn)行內(nèi)部FLASH讀寫操作。1、CH32V103內(nèi)部
    發(fā)表于 04-19 16:14

    CH32V103基礎(chǔ)教程24-設(shè)置FLASH讀寫保護(hù)及解除

    本章教程將使用CH32V103內(nèi)部FLASH進(jìn)行FLASH讀寫保護(hù)及解除設(shè)置。1、用戶選擇字簡介及相關(guān)函數(shù)介紹用戶選擇字固化在
    發(fā)表于 04-19 16:22

    CH32V103基礎(chǔ)教程89-FLASH編程

    本章主要使用CH32V103進(jìn)行FLASH的擦/讀/寫,以及快速編程。 1、FLASH簡介及相關(guān)函數(shù)介紹關(guān)于CH2V103的FLSAH,其支持2種編程/擦除
    發(fā)表于 05-10 16:20

    RISC-V MCU應(yīng)用開發(fā)教程之CH32V103

    教程基于沁恒32位通用增強(qiáng)型RISC-V架構(gòu)MCU CH32V103,力爭全面分析CH32V103的每個(gè)外設(shè)功能及使用方法,手把手教大家玩轉(zhuǎn)RISC-
    發(fā)表于 11-18 16:21 ?18次下載
    RISC-<b class='flag-5'>V</b> <b class='flag-5'>MCU</b>應(yīng)用開發(fā)教程之<b class='flag-5'>CH32V103</b>

    基于CH32V103系列MCU點(diǎn)亮LED

    CH32V103系列是以青稞V3A處理器為核心的32位通用MCU,該處理器是基于RISC-V開源指令集設(shè)計(jì)。 片上集成了時(shí)鐘安全機(jī)制、多級電
    的頭像 發(fā)表于 01-31 12:01 ?2157次閱讀
    基于<b class='flag-5'>CH32V103</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b>點(diǎn)亮LED

    如何控制CH32V103進(jìn)入待機(jī)模式以及對其進(jìn)行喚醒操作

    CH32V103系列是以青稞V3A處理器為核心的32位通用MCU,該處理器是基于RISC-V開源指令集設(shè)計(jì)。片上集成了時(shí)鐘安全機(jī)制、多級電源
    的頭像 發(fā)表于 01-31 14:47 ?2213次閱讀
    如何控制<b class='flag-5'>CH32V103</b>進(jìn)入待機(jī)模式以及對其進(jìn)行喚醒<b class='flag-5'>操作</b>

    如何控制CH32V103進(jìn)入停止模式以及對其進(jìn)行喚醒操作

    CH32V103系列是以青稞V3A處理器為核心的32位通用MCU,該處理器是基于RISC-V開源指令集設(shè)計(jì)。片上集成了時(shí)鐘安全機(jī)制、多級電源
    的頭像 發(fā)表于 01-31 14:48 ?1874次閱讀
    如何控制<b class='flag-5'>CH32V103</b>進(jìn)入停止模式以及對其進(jìn)行喚醒<b class='flag-5'>操作</b>

    基于CH32V103系列MCU的觸摸按鍵檢測

    CH32V103系列是以青稞V3A處理器為核心的32位通用MCU,該處理器是基于RISC-V開源指令集設(shè)計(jì)。片上集成了時(shí)鐘安全機(jī)制、多級電源
    的頭像 發(fā)表于 01-31 14:53 ?4261次閱讀
    基于<b class='flag-5'>CH32V103</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b>的觸摸按鍵檢測

    ch32v103應(yīng)用教程 ch32v103c8t6兼容 ch32v103c8t6燒錄器

    、低成本的單片機(jī),廣泛應(yīng)用于工業(yè)自動(dòng)化、通信、汽車電子、醫(yī)療儀器等領(lǐng)域。它采用的是ARM Cortex-M3內(nèi)核,具有豐富的外設(shè),支持多種通信協(xié)議,操作靈活、功能強(qiáng)大。本文主要介紹CH32V103
    的頭像 發(fā)表于 08-22 15:19 ?1931次閱讀

    ch32v103和stm32的區(qū)別

    和stm32。雖然它們共同作為微處理器的代表,但是它們之間還是有很多不同的。下面就詳細(xì)地對這兩種芯片進(jìn)行比較和解析。 1、基本介紹 CH32V103是一款以ARM結(jié)構(gòu)為基礎(chǔ),具有射頻控制功能,能提供所有常規(guī)的數(shù)字接口的單片機(jī)芯片。其中包含有多種與ARM控制器及AC55XX系列
    的頭像 發(fā)表于 08-22 15:48 ?1503次閱讀

    ch32v103與stm32f103的區(qū)別

    ch32v103與stm32f103的區(qū)別? Ch32v103與STM32f103是兩種不同的芯片,雖然它們都是基于ARM Cortex-M3內(nèi)核的32位微控制器,但它們在硬件配置、功
    的頭像 發(fā)表于 08-22 15:49 ?2537次閱讀