STM32CUBEMX开发GD32F303(17)----内部Flash读写

news2024/11/30 12:45:40

概述

本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过开发板内进行验证。
本例程主要讲解如何对芯片自带Flash进行读写,用芯片内部Flash可以对一些需要断电保存的数据进行保存,无需加外部得存储芯片,本例程采用的是STM32F103ZET6进行移植,512K大小的Flash。
需要样片的可以加Qun申请:615061293。

csdn课程

课程更加详细。
https://download.csdn.net/course/detail/37152

样品申请

https://www.wjx.top/vm/mB2IKus.aspx

生成例程

这里准备了自己绘制的开发板进行验证。
在这里插入图片描述

配置时钟树,配置时钟为64M。
在这里插入图片描述
查看原理图,PA9和PA10设置为开发板的串口。
在这里插入图片描述

配置串口。
在这里插入图片描述

串口重定向

在main.c中,添加头文件,若不添加会出现 identifier “FILE” is undefined报错。

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

函数声明和串口重定向:

/* USER CODE BEGIN PFP */
/* retarget the C library printf function to the USART */
int fputc(int ch, FILE *f)
{
	HAL_UART_Transmit(&huart2 , (uint8_t *)&ch, 1, 0xFFFF);
    return ch;
}
/* USER CODE END PFP */

FLASH定义

对于STM32F103,有低、钟、高密度的FLASH类型。
在这里插入图片描述

低密度

在这里插入图片描述

中密度

在这里插入图片描述

高密度

在这里插入图片描述

对于STM32F103ZE,FLASH大小为512KB,固为高密度的Flash。

变量定义

/* USER CODE BEGIN 0 */
uint32_t WriteFlashData[3] = {0x11111111,0x22222222,0x33333333};//数据
uint32_t WriteFlashData1[3] = {0x44444444,0x55555555,0x66666666};//数据
uint32_t addr = 0x0807F800;//page 255
uint32_t addr1 = 0x0807FC00;//page 255+1k

void PrintFlashTest(uint32_t L,uint32_t addr);
void WriteFlashTest(uint32_t L,uint32_t Data[],uint32_t addr);

/* USER CODE END 0 */

如果要对FLASH进行写入数据,需要执行以下四步:

  1. 解锁FLASH
  2. 擦除FLASH
  3. 写入FLASH
  4. 锁住FLASH

擦除只能是按页或者整块擦除。
STM32F103ZET6和GD32F403ZET6的Flash容量是512KB,所以只有255页,每页2KB。
我们可以写入到页255中,即0x0807F800-0x0807FFFF中。
由于单片机是32位,故连续写入多个uint32_t的数据时,地址应该依次增加4。

/* USER CODE BEGIN 4 */

/*FLASH写入程序*/
void WriteFlashTest(uint32_t L,uint32_t Data[],uint32_t addr)
{
	uint32_t i=0;
	/* 1/4解锁FLASH*/
	HAL_FLASH_Unlock();
	/* 2/4擦除FLASH*/
	/*初始化FLASH_EraseInitTypeDef*/
	/*擦除方式页擦除FLASH_TYPEERASE_PAGES,块擦除FLASH_TYPEERASE_MASSERASE*/
	/*擦除页数*/
	/*擦除地址*/
	FLASH_EraseInitTypeDef FlashSet;
	FlashSet.TypeErase = FLASH_TYPEERASE_PAGES;
	FlashSet.PageAddress = addr;
	FlashSet.NbPages = 1;
	/*设置PageError,调用擦除函数*/
	uint32_t PageError = 0;
	HAL_FLASHEx_Erase(&FlashSet, &PageError);
	/* 3/4对FLASH烧写*/
	for(i=0;i<L;i++)
	{
		HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr+4*i, Data[i]);
	}
	/* 4/4锁住FLASH*/
	HAL_FLASH_Lock();
}


/*FLASH读取打印程序*/
void PrintFlashTest(uint32_t L,uint32_t addr)
{
	uint32_t i=0;
	for(i=0;i<L;i++)
	{
		printf("\naddr is:0x%x, data is:0x%x", addr+i*4,  *(__IO uint32_t*)(addr+i*4));
	}
	
}
/* USER CODE END 4 */

主程序

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		WriteFlashTest(3,WriteFlashData,addr);
		WriteFlashTest(3,WriteFlashData1,addr1);
		PrintFlashTest(3,addr);
		PrintFlashTest(3,addr1);
		HAL_Delay(5000);
		
  }
  /* USER CODE END 3 */

演示效果

可以看见,对于高容量,页的大小位2k,故写入addr1时候,addr的数据就被擦除了。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

广告公司到底干什么的?欣奥诚分享

广告公司到底干什么的&#xff1f; 这篇文章从产业的角度拆分广告业&#xff0c;还原一个真实的广告业出来。 01. 它们是谁&#xff1f; 早年广告业有4类公司&#xff1a;品牌咨询类公司&#xff1b;设计创意类公司&#xff1b;媒介投放类公司&#xff1b;活动执行类公司。 …

[附源码]Python计算机毕业设计电子病历系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

前端大全之JavaScript(简称JS)

目录 一、概念 1.总体概要 2.来源说明 3.JavaScript和java的关系 4.JS的特点 5.浏览器执行JS的简介 6.JS的组成 二、引入方式 1.内部脚本例子 2. 外部脚本例子 三、使用规则 1.书写语法 2.报错的查看方式 3.输出语句 &#xff08;1&#xff09;写入警告框 &am…

SecXOps 中的数据集存储方式

安全数据资产 统一管理DataOps&#xff0c;即 Data 和 Operations 的集成&#xff0c;于 2014 年首次提出。Gartner 将 DataOps 定义为“一种协作性的数据管理 实践&#xff0c;专注于改进组织内数据管道的通信、集成和自动化”[7]。DataOps 是一种面向流程的自动化方法&#x…

基于Java开发的(控制台)模拟的多用户多级目录的文件系统【100010035】

多级文件系统 1 设计目的 为了加深对文件系统内部功能和实现过程的理解&#xff0c;设计一个模拟的多用户多级目录的文件系统&#xff0c;并实现具体的文件物理结构、目录结构以及较为完善的文件操作命令集。 2 设计内容 2.1系统操作 操作命令风格&#xff1a;本文件系统的…

110115-07-6,Ac-LLM-CHOCalpain 抑制剂

Ac-LLM-CHO (ALLM) is a potent competitive inhibitor of cathepsin L (Ki0.6 nM) and cathepsin B (Ki100 nM). Ac-LLM-CHO (ALLM)是组织蛋白酶L (Ki0.6 nM)和组织蛋白酶B (Ki100 nM)的有效竞争性抑制剂。 编号: 124055中文名称: Calpain 抑制剂 II&#xff1a; Ac-Leu-Leu-M…

[附源码]Node.js计算机毕业设计点餐系统设计Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

游戏开发59课 性能优化

7. 耗电优化 游戏耗电和游戏卡并无必然联系&#xff0c;有些游戏在某些设备上虽然运行很流畅&#xff0c;但发现耗电很厉害&#xff0c;玩了不到半个小时&#xff0c;电量已经出现警报。游戏耗电的原因主要是因为&#xff1a;CPU占用普遍高&#xff0c;内存操作频繁&#xff0…

Spring MVC学习 | 获取请求参数

文章目录一、ServletAPI获取二、控制器方法形参获取2.1 不使用RequestParam注解2.2 使用RequestParam注解2.2.1 简介&使用2.2.2 相关注解2.3 实体类类型的形参三、中文乱码问题3.1 在tomcat中设置编码&#xff08;了解&#xff09;3.2 使用Spring MVC内部过滤器设置编码学习…

【PortSwiggerのWeb Security Academy靶场】SQL Injection系列 9th

Subject Lab: Blind SQL injection with conditional responses Url: portswigger.net/web-securit… Mind Palace 在带着 cookies的后续访问网页时会找到出现的 Welcome back! 标志 > 无法回显 > 采用盲注的方式 0x01 确认注入点 0x02 爆破数据库名 # 测试informati…

qiankun 部署微前端-vue2(一)

自从前后端分离以来&#xff0c;一直都有个困惑&#xff0c;就是随着项目的功能的不断拓展&#xff0c;项目变得不断臃肿&#xff0c;每次打包编译&#xff0c;都要把整个项目编译&#xff0c;非常耗时。如果前端也能像后端一样&#xff0c;在项目搭建初期&#xff0c;有类似微…

C++11【包装器】

包装器&#x1f4d6;1. 为什么需要包装器&#x1f4d6;2. 如何使用包装器&#x1f4d6;3. bind函数&#x1f4d6;1. 为什么需要包装器 包装器也叫做适配器&#xff0c;C中的function本质是一个类模板&#xff0c;也是一个包装器. 为什么需要function呢&#xff1f; 我们来看…

ant-design-vue修改input组件样式

问题场景 不得不说ant-design-vue的样式是真的难改。。。今天尝试了很多种方案&#xff0c;都无疾而终。最终&#xff0c;通过全局scss文件引入的方式解决了。 几种方案&#xff1a; 直接行内样式&#xff0c;发现部分可以&#xff0c;部分不行将style 的scoped属性去掉&#…

非线性负载的主要分类及其特性

非线性负载的主要分类 通常而言&#xff0c;由线性元件原件组成的负载称为线性负载&#xff0c;线性负载的输出与输入呈线性关系&#xff0c;典型的线性负载如电阻、电容和电感等&#xff1b;而由非线性元件构成的负载为非线性负载&#xff0c;在正弦波电压供电时会产生非正弦…

Sentinel服务流控

Sentinel通过流量控制&#xff08;flow control&#xff09;以及熔断降级来保护系统资源 QPS超过阈值直接失败 流量控制&#xff08;flow control&#xff09;&#xff0c;其原理是监控应用流量的 QPS 或并发线程数等指标&#xff0c;当达到指定的阈值时对流量进行控制&#x…

如何使用ABAQUS对新能源动力电池进行Pack分析

电池Pack的仿真&#xff0c;按照系统层次&#xff0c;可从电芯、模组、Pack和整车逐级分析。电芯主要集中于机械性能的材料拟合、激光焊接以及电-化学-热-机耦合建模&#xff0c;模组主要集中于跌落、振动以及模组冷却&#xff0c;Pack主要集中于**、冲击和振动以及Pack热管理&…

Token Merging: Your ViT But Faster

论文&#xff1a;https://arxiv.org/pdf/2210.09461.pdf 代码&#xff1a; https://github.com/facebookresearch/ToMe 这篇论文写的很棒呀&#xff0c;以摘要为例&#xff0c;第一句话指明ToMe的作用&#xff08;提高ViT-based模型的训练和推理速度&#xff09;和特色&#x…

java面试强基(21)

什么是线程和进程? 何为进程? ​ 进程是程序的一次执行过程&#xff0c;是系统运行程序的基本单位&#xff0c;因此进程是动态的。系统运行一个程序即是一个进程从创建&#xff0c;运行到消亡的过程。 ​ 在 Java 中&#xff0c;当我们启动 main 函数时其实就是启动了一个 J…

提质增效!北京筑龙助力蒙牛集团采招数智化升级

近两年&#xff0c;全球经济下行压力加剧&#xff0c;市场形势波动使得集团企业面临着很大的经营压力。随着数字经济时代的到来&#xff0c;利用数字技术重构价值链、重组业务流程&#xff0c;或创建新的生态系统平台成为集团企业数字化转型的契机。 蒙牛电子采购招标平台作为…

WEB网页设计期末作业个人主页——基于HTML+CSS制作个人简介网站

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…