当前位置: 首页 > news >正文

Stm32 HAL库 访问内部flash空间

Stm32 HAL库 访问内部flash空间

  • 代码的部分
    • 串口
    • 配置申明文件
    • main函数

在一些时候,需要存储一些数据,但是又不想接外部的flash,那我们可以知道,其实还有内部的flash可以使用,
需要注意的是内部flash,读写次数有限,所以需要控制擦写次数

首先使用cubmx生成代码,
就是配置时钟和debug口,还有串口信息

在这里插入图片描述

代码的部分

串口

/* USER CODE BEGIN PV */
#include "stdio.h"
int fputc(int ch,FILE *f)
{HAL_UART_Transmit (&huart1 ,(uint8_t *)&ch,1,HAL_MAX_DELAY );return ch;
}
/* USER CODE END PV */

配置申明文件

这里配置了地址的申明文件,和flash操作的结构体

需要注意的是,每个芯片都有最大的flash空间,以及代码空间,所以建议在配置地址的时候尽量到地址空间的后面,这样可以防止擦写到代码的空间。

/* USER CODE BEGIN 0 *///debug 查看对应地址,是否正确,如果显示的是问号,则无此位置
//C6T6 32k  最大地址 0x08007FF0
//C8T6 64k  最大地址 0x0800FFE0
#define FLASH_SAVE_ADDR  0x08007000static FLASH_EraseInitTypeDef EraseInitStruct = {.TypeErase = FLASH_TYPEERASE_PAGES,       //页擦除.PageAddress = FLASH_SAVE_ADDR,                //擦除地址.NbPages = 1                              //擦除页数
};
/* USER CODE END 0 */

main函数

下面就是main函数的配置,
流程就是 擦除->写入数据->读出数据

int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USART1_UART_Init();while (1){HAL_FLASH_Unlock();uint32_t PageError = 0;__disable_irq();                             //擦除前关闭中断if (HAL_FLASHEx_Erase(&EraseInitStruct,&PageError) == HAL_OK){printf("擦除 成功\r\n");}__enable_irq();                             //擦除后打开中断uint32_t writeFlashData = 0x55555555;        //待写入的值uint32_t addr = FLASH_SAVE_ADDR;                  //写入的地址HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,addr, writeFlashData);printf("at address:0x%x, read value:0x%x\r\n", addr, *(__IO uint32_t*)addr);HAL_FLASH_Lock();while(1);}/* USER CODE END 3 */
}
http://www.lryc.cn/news/336067.html

相关文章:

  • 线程池详解
  • mybatis(5)参数处理+语句查询
  • 数据应用OneID:ID-Mapping Spark GraphX实现
  • 第6章 6.2.3 : readlines和writelines函数 (MATLAB入门课程)
  • Matlab应用层生成简述
  • 每日一题(leetcode1702):修改后的最大二进制字符串--思维
  • PHP自助建站系统,小白也能自己搭建网站
  • 计算机视觉 | 基于 ORB 特征检测器和描述符的全景图像拼接算法
  • Scala - 函数柯里化(Currying)
  • Switch-case
  • 蓝桥杯-单片机基础16——利用定时计数中断进行动态数码管的多窗口显示
  • 2024/4/5—力扣—下一个排列
  • xss.pwnfunction-Ugandan Knuckles
  • LabVIEW和2D激光扫描的受电弓滑板磨耗精确测量
  • Linux第87步_阻塞IO实验
  • C/C++基础----常量和基本数据类型
  • 什么是生成式AI?有哪些特征类型
  • 《Linux C/C++服务器开发实践》之第7章 服务器模型设计
  • SSH穿透ECS访问内网RDS数据库
  • python 有哪些函数
  • ubuntu web端远程桌面控制
  • PCL 点到三角形的距离(3D)
  • C# wpf 嵌入外部程序
  • 【ELK】ELK企业级日志分析系统
  • 详细的讲一下java的接口回调
  • 如何将powerpoint(PPT)幻灯片嵌入网页中在线预览、编辑并保存到服务器?
  • [Java基础揉碎]日期类
  • 4.10作业
  • Hive概述与基本操作
  • 安装 FFmpeg