0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CH32V103系列MCU内部FLASH读写操作方式

CHANBAEK 来源:CSDN-借过风景 作者:CSDN-借过风景 2023-01-31 15:02 次阅读

简介

CH32V103系列是以青稞V3A处理器为核心的32位通用MCU,该处理器是基于RISC-V开源指令集设计。片上集成了时钟安全机制、多级电源管理、通用DMA控制器。此系列具有1路USB2.0主机/设备接口、多通道12位ADC转换模块、多通道TouchKey、多组定时器、多路IIC/USART/SPI接口等丰富的外设资源。

本章教程将通过程序代码进行内部FLASH读写操作。

1、CH32V103内部FLASH简介及相关函数介绍

CH32V103芯片含有一个内部FLASH,其存储数据在掉电后不会丢失,主要用于存储程序代码。芯片在重新上电并复位后,可通过加载读取内部FLASH中程序代码运行。

通常,我们可通过两种方式对内部FLASH进行读写:一是通过下载器等外部工具读写内部FLASH,二是通过芯片运行程序代码读取自身内部FLASH。本章即通过第二种方法进行内部FLASH读写。此外,就读写速度而言,读写内部FLASH比外部FLASH快的多,且由于内部FLASH掉电后数据不会丢失,因此内部FLASH剩余空间可用于存储重要数据和关键记录。

由于内部FLASH可被通过外部工具或程序代码读写,为了防止内部FLASH中存储数据被获取,某些应用会禁止读写内部FLASH内容,或在第一次运行时计算加密信息并记录到某些区域,然后删除自身的部分加密代码,这些应用都涉及到内部FLASH的操作。

CH32V103内部FLASH主要包含主存储器和信息块两块区域,其中信息块又可被分为两块系统引导代码存储区域、用户选择字和厂商配置字区域。其中,主存储器区域主要用于用户的应用程序存储,以4K字节(32 页)单位进行写保护划分;除了“厂商配置字”区域出厂锁定,用户不可访问,其他区域在一定条件下用户可操作。

CH32V103内部FLASH具有2种编程/擦除方式,具体如下:

标准编程:此方式是默认编程方式(兼容方式)。这种模式下CPU以单次2字节方式执行编程,单次1K字节执行擦除及整片擦除操作。

快速编程:此方式采用页操作方式(推荐)。经过特定序列解锁后,执行单次128字节的编程及128字节擦除。

关于CH32V103内部FLASH具体信息,可参考CH32V103应用手册。CH32V103内部FLASH标准库函数具体内容如下:

pYYBAGPYvGGAXycRAAGJp1PCa9E193.png

poYBAGPYvGGAGjwiAABGDg5mAYU175.png

2、硬件设计

本章教程主要通过程序代码进行内部FLASH读写操作,使用CH32V103内部资源,无需进行硬件连接。

3、软件设计

CH32V103内部FLASH编程/擦除方式有两种,一种是标准编程,一种是快速编程,本章即使用上述这两种方式分别进行内部FLASH读写操作,程序编程主要分3个步骤:

1、对内部FLASH进行解锁;

2、对内部FLASH进行页擦除;

3、对内部FLASH进行读写操作。

根据上述操作步骤,编写具体程序,具体程序如下:

flash.h文件

pYYBAGPYvGGAdvLSAABfaQay0UE292.png

flash.h文件主要包含相关定义和函数声明;

flash.c文件

pYYBAGPYvGGAcaLJAACwSoJAY1c353.png

poYBAGPYvGGAPjwYAAEd09RflpQ140.png

pYYBAGPYvGGAM3tTAAFJDsHP4C0650.png

poYBAGPYvGGAS1MPAAB0sVd7dE8825.png

flash.c文件主要包含两个函数,一个是内部FLASH标准编程函数Flash_Test,一个是内部FLASH快速编程函数Flash_Test_Fast,这两个函数具体执行过程如下:

内部FLASH标准编程函数Flash_Test执行过程:

(1)调用FLASH_Unlock函数进行解锁;

(2) 根据起始地址及结束地址计算需要擦除页数;

(3) 调用FLASH_ClearFlag函数清除各种标志位;

(4) 使用for循环以及调用FLASH_ErasePage函数擦除页数,每次擦除一页;

(5) 使用while循环并调用FLASH_ProgramWord函数向起始地址至结束地址的存储区域都写入变量“Data”存储的数值数值;

(6) 调用FLASH_Lock函数进行上锁;

(7) 使用指针读取写入的数据内容并校验。

内部FLASH快速编程函数Flash_Test_Fast执行过程与标准编程执行过程类似,具体如下:

(1)调用FLASH_Unlock_Fast函数进行解锁;

(2) 调用FLASH_ErasePage_Fast函数擦除指定闪存页;

(3) 调用FLASH_BufReset函数复位闪存缓冲区,执行清除内部128字节缓存区操作;

(4) 调用FLASH_BufLoad函数向指定地址开始连续写入16字节数据(4字节/次操作,写的地址每次偏移量为4),然后执行加载到缓冲区;

(5) 调用FLASH_ProgramPage_Fast函数启动一次快速页编程动作,编程指定的闪存页;

(6) 调用FLASH_Lock_Fast函数进行上锁;

(7) 使用for循环读取编程地址进行数据校验并返回校验值。

以上两个函数执行过程可对照CH32V103应用手册第24章闪存操作流程进行程序编写,更有助于理解编程。

main.c函数

pYYBAGPYvGGAWHS7AACUoI2Oii8917.png

main.c函数主要进行函数初始化以及根据flash.c文件两个函数返回值输出相应信息。

4、下载验证

将编译好的程序下载到开发板并复位,串口打印情况具体如下:

poYBAGPYvGGAMUe2AACIfTVMoeM163.png

根据串口打印信息可知,内部FLASH标准编程和快速编程测试成功。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18298

    浏览量

    222254
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16022

    浏览量

    343694
  • FlaSh
    +关注

    关注

    10

    文章

    1551

    浏览量

    146717
  • RISC-V
    +关注

    关注

    41

    文章

    1906

    浏览量

    45056
  • CH32V103
    +关注

    关注

    1

    文章

    13

    浏览量

    967
  • ch32
    +关注

    关注

    0

    文章

    73

    浏览量

    510
收藏 人收藏

    评论

    相关推荐

    基于CH32V103系列MCU的ADC采样设计

    CH32V103系列是以青稞V3A处理器为核心的32位通用RISC-V MCU,该处理器是基于RISC-V开源指令集设计。片上集成了时钟安全机制、多级电源管理、通用DMA控制器。此系列
    的头像 发表于 01-31 14:21 3446次阅读
    基于<b class='flag-5'>CH32V103</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b>的ADC采样设计

    CH32V103数据手册

    教程基于沁恒32位通用增强型RISC-V架构MCU CH32V103,力争全面分析CH32V103的每个外设功能及使用方法,手把手教大家玩转RISC-
    发表于 07-19 07:55

    系列比如103系列CH32V103系列CH32F103有哪些区别?

    系列比如103系列CH32V103系列CH32F103有哪些区别?
    发表于 03-09 10:05

    CH32V103基础教程2-GPIO库函数介绍

    本章通过点亮LED作为CH32V103系列MCU应用开发的第一个教程,其LED灯控制使用到GPIO外设的基本输出功能,将通过点亮LED对CH32V103的GPIO进行基本的学习了解。
    发表于 04-13 15:52

    CH32V103基础教程15-SPI读写FLASH

    本章教程将使用CH32V103的SPI读写FLASH,并通过串口调试助手将读写结果打印显示。1、SPI简介及相关函数介绍SPI是串行外设接口(Serial Peripheral Int
    发表于 04-17 15:30

    CH32V103基础教程23-读写内部FLASH

    本章教程将通过程序代码进行内部FLASH读写操作。1、CH32V103内部
    发表于 04-19 16:14

    CH32V103基础教程24-设置FLASH读写保护及解除

    本章教程将使用CH32V103内部FLASH进行FLASH读写保护及解除设置。1、用户选择字简介及相关函数介绍用户选择字固化在
    发表于 04-19 16:22

    CH32V103基础教程78-USART-空闲中断

    ,在此不再赘述。 2、硬件设计由于CH32V103系列MCU的串口1在debug文件中被用于调试打印,因此本次教程使用串口2进行收发验证。由CH32V103数据手册可知,串口2对应引脚
    发表于 05-08 15:57

    CH32V103基础教程89-FLASH编程

    本章主要使用CH32V103进行FLASH的擦/读/写,以及快速编程。 1、FLASH简介及相关函数介绍关于CH2V103的FLSAH,其支持2种编程/擦除
    发表于 05-10 16:20

    RISC-V MCU应用开发教程之CH32V103

    教程基于沁恒32位通用增强型RISC-V架构MCU CH32V103,力争全面分析CH32V103的每个外设功能及使用方法,手把手教大家玩转RISC-V MCU应用开发。教程侧重于外设
    发表于 11-18 16:21 18次下载
    RISC-V <b class='flag-5'>MCU</b>应用开发教程之<b class='flag-5'>CH32V103</b>

    基于CH32V103系列MCU点亮LED

    CH32V103系列是以青稞V3A处理器为核心的32位通用MCU,该处理器是基于RISC-V开源指令集设计。 片上集成了时钟安全机制、多级电源管理、通用DMA控制器。 此系列具有1路U
    的头像 发表于 01-31 12:01 1729次阅读
    基于<b class='flag-5'>CH32V103</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b>点亮LED

    基于CH32V103系列MCU的触摸按键检测

    CH32V103系列是以青稞V3A处理器为核心的32位通用MCU,该处理器是基于RISC-V开源指令集设计。片上集成了时钟安全机制、多级电源管理、通用DMA控制器。此系列具有1路USB
    的头像 发表于 01-31 14:53 3579次阅读
    基于<b class='flag-5'>CH32V103</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b>的触摸按键检测

    ch32v103应用教程 ch32v103c8t6兼容 ch32v103c8t6烧录器

    、低成本的单片机,广泛应用于工业自动化、通信、汽车电子、医疗仪器等领域。它采用的是ARM Cortex-M3内核,具有丰富的外设,支持多种通信协议,操作灵活、功能强大。本文主要介绍CH32V103
    的头像 发表于 08-22 15:19 1024次阅读

    ch32v103和stm32的区别

    和stm32。虽然它们共同作为微处理器的代表,但是它们之间还是有很多不同的。下面就详细地对这两种芯片进行比较和解析。 1、基本介绍 CH32V103是一款以ARM结构为基础,具有射频控制功能,能提供所有常规的数字接口的单片机芯片。其中包含有多种与ARM控制器及AC55XX系列
    的头像 发表于 08-22 15:48 841次阅读

    ch32v103与stm32f103的区别

    ch32v103与stm32f103的区别  Ch32v103与STM32f103是两种不同的芯片,虽然它们都是基于ARM Cortex-M3内核的32位微控制器,但它们在硬件配置、功
    的头像 发表于 08-22 15:49 1414次阅读