Stm32 HAL库 访问内部flash空间

news2025/2/24 1:06:43

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  0x08007000

static 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.coloradmin.cn/o/1576332.html

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

相关文章

免费在线搜索人名、电话号码、个人信息、定位、联系信息以及地址的开源网站

免费在线搜索人名、电话号码、个人信息、定位、联系信息以及地址的开源网站。 为大家推荐开源搜索电话号码及地址的网页。这些网站不仅提供了免费查找人员、电话号码、地址、区号、邮政编码和邮政编码的功能,还允许进行反向搜索,即通过输入电话号码找到…

YoloV8改进策略:Neck改进改进|ELA

摘要 本文使用最新的ELA注意力机制改进YoloV8,实现涨点!改进方式简单易用,涨点明显!欢迎大家使用。 大家在订阅专栏后,记着加QQ群啊!有些改进方法确实有难度,大家在改进的过程中遇到问题&#…

GaN肖特基势垒二极管(SBD)的多阴极应用建模与参数提取

GaN Schottky Barrier Diode (SBD) Modeling and Parameter Extraction for Multicathode Application(TED 24年) 摘要 本文提出了一种适用于多阴极应用的紧凑型可扩展GaN肖特基二极管大信号模型。详细给出了外在和内在模型参数的可扩展规则。实验和理…

工业4g路由器联网后迅速掉线是什么原因?

工业4G路由器连接上网后迅速掉线可能是由多种因素造成的。以下是一些建议的检查和解决步骤: 1、信号问题: 信号强度:检查工业路由器信号强度指示灯,如果信号弱,尝试移动路由器位置或添加外部天线来增强信号。 网络拥…

VirtualBox安装CentOS

安装 VirtualBox 地址:https://www.virtualbox.org/wiki/Downloads 版本: 6.1和7.0+版本都可以 安装: windows上安装需要admin权限,右键菜单选中 “Run as administrator” 安装 CentOS 6.10 地址:https://vault.centos.org/6.10/isos/x86_64/ 版本: 如果不需要GUI,选择…

C++:MySQL的事务概念与使用(四)

1、事务的概念 定义:事务是构成单一逻辑工作单元的操作集合,要么完整的执行,要么完全不执行。无论发生何种情况,DBS必须保证事务能正确、完整的执行。 性质:事务的四大ACID性质。 原子性(Atomicity):一个事…

uniapp使用npm命令引入font-awesome图标库最新版本并解决APP和小程序不显示图标的问题

uniapp使用npm命令引入font-awesome图标库最新版本 图标库网址:https://fontawesome.com/search?qtools&or 命令行: 引入 npm i fortawesome/fontawesome-free 查看版本 npm list fortawesome在main.js文件中: import fortawesome/fo…

AI智能涂抹修补解决方案助力企业高效创作

传统的手动涂抹修补方式不仅效率低下,而且往往难以达到理想的视觉效果。美摄科技凭借深厚的AI技术研发实力,推出了面向企业的AI智能涂抹修补解决方案,为企业带来前所未有的创作体验。 美摄科技的AI智能涂抹修补解决方案,具备强大…

绝地求生:在小小的花园里面挖呀挖呀挖~ 29.1版本将支持可破坏地形功能

嗨,我是闲游盒~ 想必大家也都知道了新版本即将上线的可破坏地形功能即将在29.1版本上线,而具体的玩法暂时没有公布~ ◆ 随着离4月10日越来越近,官方发布了一条关于新版本可破坏地形的玩法预告 注意看,这个男人叫小帅,正…

基于小程序+ssm实现的悬赏信息发布系统

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】:Java 【框架】:ssm 【…

Django项目定时任务django-crontab

首先定义一个定时任务函数tasks.py(见文章末尾示例),编写函数,然后在setting.py中配置定时任务 1、首先安装django-crontab pip install django-crontab 2、在setting.py中添加应用 (在所有自定义注册app之上) INSTALLED_APPS …

C++ //练习 11.28 对一个string到int的vector的map,定义并初始化一个变量来保存在其上调用find所返回的结果。

C Primer(第5版) 练习 11.28 练习 11.28 对一个string到int的vector的map,定义并初始化一个变量来保存在其上调用find所返回的结果。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /******…

书生·浦语训练营二期第三次笔记-茴香豆:搭建你的 RAG 智能助理

RAG学习文档1: https://paragshah.medium.com/unlock-the-power-of-your-knowledge-base-with-openai-gpt-apis-db9a1138cac4 RAG学习文档2: https://blog.demir.io/hands-on-with-rag-step-by-step-guide-to-integrating-retrieval-augmented-generation-in-llms-a…

Adobe InDesign 2024 v19.3 (macOS, Windows) - 版面设计和桌面出版软件

Adobe InDesign 2024 v19.3 (macOS, Windows) - 版面设计和桌面出版软件 Acrobat、After Effects、Animate、Audition、Bridge、Character Animator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、Lightroom Classic、Media Encoder、Photoshop、Premiere Pro、Ad…

Spring 如何优雅的灵活的Http重试

1、背景说明 在互联网时代, 不同系统之间大多数是通过http调用,调用过程中会超时、异常等过种问题。为了保证业务稳定,http 重试是常用方案。下面列举几种方案。 2、Http重试方案介绍 2.1 传统方案 1、使用传统的递归调用,实现方…

42.基于SpringBoot + Vue实现的前后端分离-服装销售平台管理系统(项目 + 论文)

项目介绍 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的交换和信息流通显得特别重要。因此,开发合适的服装销售平台成为企业必然要走的一步棋。开发合适的服…

让H5页面轻松打开第三方App,Xinstall助力实现无缝跳转

在移动互联网时代,H5页面因其跨平台、易传播的特性而被广泛应用,然而H5页面在打开第三方App时往往存在诸多不便。用户需要通过复杂的操作步骤才能实现跳转,这无疑降低了用户体验。为了解决这一难题,Xinstall应运而生,为…

达梦备份与恢复

达梦备份与恢复 基础环境 操作系统:Red Hat Enterprise Linux Server release 7.9 (Maipo) 数据库版本:DM Database Server 64 V8 架构:单实例1 设置bak_path路径 --创建备份文件存放目录 su - dmdba mkdir -p /dm8/backup--修改dm.ini 文件…

【面试题】RocketMQ的工作流程?

RocketMQ是一种开源的分布式消息队列系统,它具有高吞吐量、低延迟和高可靠性的特点。下面是RocketMQ的简要工作流程: Producer(生产者)发送消息:消息的生产者将消息发送到RocketMQ。生产者将消息封装为一个消息对象&am…

DIY自己的AI

一、开源AI大语言模型 目前开源的AI大语言模型(LLM)已经非常的多了,以下是收集的一些LLM: LLaMA LLaMA(Large Language Model Meta AI):LLaMA是由MetaAI的Facebook人工智能实验室(FAIR)发布的…