簡(jiǎn)介
CH32V103系列是以青稞V3A處理器為核心的32位通用MCU,該處理器是基于RISC-V開(kāi)源指令集設(shè)計(jì)。片上集成了時(shí)鐘安全機(jī)制、多級(jí)電源管理、通用DMA控制器。此系列具有1路USB2.0主機(jī)/設(shè)備接口、多通道12位ADC轉(zhuǎn)換模塊、多通道TouchKey、多組定時(shí)器、多路IIC/USART/SPI接口等豐富的外設(shè)資源。
本章教程將通過(guò)程序代碼進(jìn)行內(nèi)部FLASH讀寫操作。
1、CH32V103內(nèi)部FLASH簡(jiǎn)介及相關(guān)函數(shù)介紹
CH32V103芯片含有一個(gè)內(nèi)部FLASH,其存儲(chǔ)數(shù)據(jù)在掉電后不會(huì)丟失,主要用于存儲(chǔ)程序代碼。芯片在重新上電并復(fù)位后,可通過(guò)加載讀取內(nèi)部FLASH中程序代碼運(yùn)行。
通常,我們可通過(guò)兩種方式對(duì)內(nèi)部FLASH進(jìn)行讀寫:一是通過(guò)下載器等外部工具讀寫內(nèi)部FLASH,二是通過(guò)芯片運(yùn)行程序代碼讀取自身內(nèi)部FLASH。本章即通過(guò)第二種方法進(jìn)行內(nèi)部FLASH讀寫。此外,就讀寫速度而言,讀寫內(nèi)部FLASH比外部FLASH快的多,且由于內(nèi)部FLASH掉電后數(shù)據(jù)不會(huì)丟失,因此內(nèi)部FLASH剩余空間可用于存儲(chǔ)重要數(shù)據(jù)和關(guān)鍵記錄。
由于內(nèi)部FLASH可被通過(guò)外部工具或程序代碼讀寫,為了防止內(nèi)部FLASH中存儲(chǔ)數(shù)據(jù)被獲取,某些應(yīng)用會(huì)禁止讀寫內(nèi)部FLASH內(nèi)容,或在第一次運(yùn)行時(shí)計(jì)算加密信息并記錄到某些區(qū)域,然后刪除自身的部分加密代碼,這些應(yīng)用都涉及到內(nèi)部FLASH的操作。
CH32V103內(nèi)部FLASH主要包含主存儲(chǔ)器和信息塊兩塊區(qū)域,其中信息塊又可被分為兩塊系統(tǒng)引導(dǎo)代碼存儲(chǔ)區(qū)域、用戶選擇字和廠商配置字區(qū)域。其中,主存儲(chǔ)器區(qū)域主要用于用戶的應(yīng)用程序存儲(chǔ),以4K字節(jié)(32 頁(yè))單位進(jìn)行寫保護(hù)劃分;除了“廠商配置字”區(qū)域出廠鎖定,用戶不可訪問(wèn),其他區(qū)域在一定條件下用戶可操作。
CH32V103內(nèi)部FLASH具有2種編程/擦除方式,具體如下:
標(biāo)準(zhǔn)編程:此方式是默認(rèn)編程方式(兼容方式)。這種模式下CPU以單次2字節(jié)方式執(zhí)行編程,單次1K字節(jié)執(zhí)行擦除及整片擦除操作。
快速編程:此方式采用頁(yè)操作方式(推薦)。經(jīng)過(guò)特定序列解鎖后,執(zhí)行單次128字節(jié)的編程及128字節(jié)擦除。
關(guān)于CH32V103內(nèi)部FLASH具體信息,可參考CH32V103應(yīng)用手冊(cè)。CH32V103內(nèi)部FLASH標(biāo)準(zhǔn)庫(kù)函數(shù)具體內(nèi)容如下:


2、硬件設(shè)計(jì)
本章教程主要通過(guò)程序代碼進(jìn)行內(nèi)部FLASH讀寫操作,使用CH32V103內(nèi)部資源,無(wú)需進(jìn)行硬件連接。
3、軟件設(shè)計(jì)
CH32V103內(nèi)部FLASH編程/擦除方式有兩種,一種是標(biāo)準(zhǔn)編程,一種是快速編程,本章即使用上述這兩種方式分別進(jìn)行內(nèi)部FLASH讀寫操作,程序編程主要分3個(gè)步驟:
1、對(duì)內(nèi)部FLASH進(jìn)行解鎖;
2、對(duì)內(nèi)部FLASH進(jìn)行頁(yè)擦除;
3、對(duì)內(nèi)部FLASH進(jìn)行讀寫操作。
根據(jù)上述操作步驟,編寫具體程序,具體程序如下:
flash.h文件

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




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í)行過(guò)程如下:
內(nèi)部FLASH標(biāo)準(zhǔn)編程函數(shù)Flash_Test執(zhí)行過(guò)程:
(1)調(diào)用FLASH_Unlock函數(shù)進(jìn)行解鎖;
(2) 根據(jù)起始地址及結(jié)束地址計(jì)算需要擦除頁(yè)數(shù);
(3) 調(diào)用FLASH_ClearFlag函數(shù)清除各種標(biāo)志位;
(4) 使用for循環(huán)以及調(diào)用FLASH_ErasePage函數(shù)擦除頁(yè)數(shù),每次擦除一頁(yè);
(5) 使用while循環(huán)并調(diào)用FLASH_ProgramWord函數(shù)向起始地址至結(jié)束地址的存儲(chǔ)區(qū)域都寫入變量“Data”存儲(chǔ)的數(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í)行過(guò)程與標(biāo)準(zhǔn)編程執(zhí)行過(guò)程類似,具體如下:
(1)調(diào)用FLASH_Unlock_Fast函數(shù)進(jìn)行解鎖;
(2) 調(diào)用FLASH_ErasePage_Fast函數(shù)擦除指定閃存頁(yè);
(3) 調(diào)用FLASH_BufReset函數(shù)復(fù)位閃存緩沖區(qū),執(zhí)行清除內(nèi)部128字節(jié)緩存區(qū)操作;
(4) 調(diào)用FLASH_BufLoad函數(shù)向指定地址開(kāi)始連續(xù)寫入16字節(jié)數(shù)據(jù)(4字節(jié)/次操作,寫的地址每次偏移量為4),然后執(zhí)行加載到緩沖區(qū);
(5) 調(diào)用FLASH_ProgramPage_Fast函數(shù)啟動(dòng)一次快速頁(yè)編程動(dòng)作,編程指定的閃存頁(yè);
(6) 調(diào)用FLASH_Lock_Fast函數(shù)進(jìn)行上鎖;
(7) 使用for循環(huán)讀取編程地址進(jìn)行數(shù)據(jù)校驗(yàn)并返回校驗(yàn)值。
以上兩個(gè)函數(shù)執(zhí)行過(guò)程可對(duì)照CH32V103應(yīng)用手冊(cè)第24章閃存操作流程進(jìn)行程序編寫,更有助于理解編程。
main.c函數(shù)

main.c函數(shù)主要進(jìn)行函數(shù)初始化以及根據(jù)flash.c文件兩個(gè)函數(shù)返回值輸出相應(yīng)信息。
4、下載驗(yàn)證
將編譯好的程序下載到開(kāi)發(fā)板并復(fù)位,串口打印情況具體如下:

根據(jù)串口打印信息可知,內(nèi)部FLASH標(biāo)準(zhǔn)編程和快速編程測(cè)試成功。
-
處理器
+關(guān)注
關(guān)注
68文章
20144瀏覽量
246691 -
mcu
+關(guān)注
關(guān)注
147文章
18593瀏覽量
386041 -
FlaSh
+關(guān)注
關(guān)注
10文章
1715瀏覽量
154637 -
RISC-V
+關(guān)注
關(guān)注
48文章
2781瀏覽量
51812 -
CH32V103
+關(guān)注
關(guān)注
1文章
13瀏覽量
1378 -
ch32
+關(guān)注
關(guān)注
0文章
74瀏覽量
1145
發(fā)布評(píng)論請(qǐng)先 登錄
CH32V103數(shù)據(jù)手冊(cè)
同系列比如103系列,CH32V103系列與CH32F103有哪些區(qū)別?
CH32V103基礎(chǔ)教程15-SPI讀寫FLASH
CH32V103基礎(chǔ)教程23-讀寫內(nèi)部FLASH
CH32V103基礎(chǔ)教程24-設(shè)置FLASH讀寫保護(hù)及解除
CH32V103基礎(chǔ)教程89-FLASH編程
RISC-V MCU應(yīng)用開(kāi)發(fā)教程之CH32V103
基于CH32V103系列MCU點(diǎn)亮LED
如何控制CH32V103進(jìn)入待機(jī)模式以及對(duì)其進(jìn)行喚醒操作
如何控制CH32V103進(jìn)入停止模式以及對(duì)其進(jìn)行喚醒操作
基于CH32V103系列MCU的觸摸按鍵檢測(cè)

CH32V103系列MCU內(nèi)部FLASH讀寫操作方式
評(píng)論