stm32 g0 使用内部flash读写

news2024/12/26 20:41:52

 个别芯片存储空间为32k,注意使用范围,并且利用debug或者.map文件,避开程序占用的页。

g0hal库和其他系列有些不同,根据官方例程修改。

GO30F6P6是 32k FLASH.基地址0x8000000,长度0x8000。即0x8000000-0x8008000。在keil配置的Target的rom和debug中flash选择可看到

具体计算过程省略

写FLASH


/**
 * @brief       获取 地址Addr 在 Flash中式第几页。根据每页大小2k 
 * @param       Addr    开头地址
 * @retval      FLASH页数
 */
static uint32_t GetPage(uint32_t Addr)
{
    uint32_t page = 0;
    page = (Addr-FLASH_BASE) / FLASH_PAGE_SIZE;
    return page;
}

/**
 * @brief       擦除FLASH
 * @param       s_addr    开头地址
 * @param       end_addr    结束地址
 */
 void Erase_Flash(uint32_t s_addr,uint32_t end_addr) 
{
    uint32_t SectorError=0,FirstPage,NbOfPages;
    FLASH_EraseInitTypeDef E_FLASH;
    
      /* Get the 1st page to erase */
     FirstPage = GetPage(s_addr);

  /* Get the number of pages to erase from 1st page */
    NbOfPages = GetPage(end_addr) - FirstPage + 1;

    E_FLASH.TypeErase = FLASH_TYPEERASE_PAGES;
    E_FLASH.Page = FirstPage;
    E_FLASH.NbPages =NbOfPages;
    if(HAL_FLASHEx_Erase(&E_FLASH,&SectorError) != HAL_OK) {

    }

}


/**
 * @brief       写Flash,写之前需要擦除整页flash,修改宏定义
 * @param       start_address    开头地址
 *  @param      end_address   结束地址
 * @param       *buf       写入数据
 * @param       length     写入字节数据个数
 */
void Write_Flash(uint32_t start_address,uint32_t end_address,uint64_t  *buf, uint16_t length)
{
    uint64_t data = 0;
    uint16_t i;
    if(start_address < STM32_FLASH_BASE || (start_address >= (STM32_FLASH_BASE + STM_SECTOR_SIZE * STM32_FLASH_SIZE)))    
    {
         //长度不在范围
       return;
    }

    
    HAL_FLASH_Unlock();//解锁flash	 
    Erase_Flash(start_address , end_address);   //擦除Flash

	for(i=0;i<length;i++)
	{
        data = 0;
        data=buf[i];
        if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD,start_address,data) != HAL_OK) 
        {
            HAL_FLASH_Lock();
            return;
        }            
        start_address += 8;
	}  

    HAL_FLASH_Lock();//上锁

}

读FLASH

uint32_t ST_Flash_Read(uint32_t R_Addr)

{

     //直接读地址,可以读取其他类型,。

    return *(volatile uint32_t *)R_Addr;

}

头文件

#ifndef __HAL_FLASH_H
#define __HAL_FLASH_H

#include "main.h"


#define __IO    volatile 
typedef __IO uint16_t vu16;
 
#define STM32_FLASH_SIZE 	32 	 	//所选STM32的FLASH容量大小(单位为K)
#define STM_SECTOR_SIZE	    2048    //2K字节

#define STM32_FLASH_BASE    0x08000000 		//STM32 FLASH的起始地址

//开始28672 = 7000,结束77FF
#define FLASH_USER_START_ADDR 0x08007000           /* 第13页 Start @ of user Flash area */
#define FLASH_USER_END_ADDR   0x080077FF         /* 第13页 End @ of user Flash area */



 void Erase_Flash(uint32_t s_addr,uint32_t end_addr) ;
void Write_Flash(uint32_t start_address,uint32_t end_address,uint64_t  *buf, uint16_t length);
uint32_t ST_Flash_Read(uint32_t R_Addr);
// void KaiJ_Read_FLASH();

// extern uint64_t set_Flashdat;

#endif

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

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

相关文章

访问公司gitlab出现 502 Bad Gateway 错误,已经解决

文章目录 1、通过 WindTerm 连接 Ubuntu2、检查 GitLab 服务状态3、查看 Unicorn 日志4、检查 Unicorn 的 stderr 日志5、检查 PID6、停止当前运行的 Unicorn 服务7、确认 Unicorn 已停止8、删除陈旧的 .pid 文件9、重新启动 GitLab 服务10、检查状态11、查看 Unicorn 日志 我公…

会话好友区设计与开发(五)

会话好友区设计与开发&#xff08;五&#xff09; 前言 在上一集&#xff0c;我们完成了选中和切换item的颜色变化的功能&#xff0c;那么这一集&#xff0c;我们将开始封装一些必要的函数。 需求 我们需要封装一些逻辑&#xff0c;那么我们也要进行分析。 在上一集我们虽…

LeetCode:1518.换水问题(模拟 JAVA)

目录 1518.换水问题 题目描述&#xff1a; 实现代码与解析&#xff1a; 模拟 1518.换水问题 题目描述&#xff1a; 超市正在促销&#xff0c;你可以用 numExchange 个空水瓶从超市兑换一瓶水。最开始&#xff0c;你一共购入了 numBottles 瓶水。 如果喝掉了水瓶中的水&am…

coredump设置

coredump路径查看及设置 coredump路径查看 命令1&#xff1a; cat /proc/sys/kernel/core_pattern 命令2&#xff1a; /sbin/sysctl kernel.core_pattern coredump路径修改 临时修改&#xff1a;echo ‘/var/log/%e.core.%p’ > /proc/sys/kernel/core_pattern 永久修改…

基于Java的企业仓库管理系统的设计与实现(论文+源码)_kaic

摘 要 随着信息技术的不断发展&#xff0c;以及网络技术的广泛用&#xff0c;企业企业仓库存储的信息量也越来越大&#xff0c;信息变得复杂。基于人工的数据收集方式&#xff0c;在耗费大量人力的同时也降低了信息采集的效率&#xff0c;例如影响了信息正确率和信息的录入速度…

项目解决方案:连锁店视频监控接入汇聚联网解决方案

目录 一.项目背景 二.建设目标和详细需求分析 2.1建设总目标 2.2需求分析 三.系统特色 3.1数字&#xff0c;高清&#xff0c;网络化系统 3.2安全性 3.3可拓展性 3.4资源利旧&#xff0c;节约成本 四.系统实现 4.1系统方案设计 4.2拓扑组网说明 4.3用户权限管理实现…

Assignment 1 (10月12日截止)

Section 1.1 T12 &#x1f609; S o l v e &#x1f447; Solve&#x1f447; Solve&#x1f447; x x x 1 1 1- 3 x 3x 3x 2 2 2 4 x 4x 4x 3 3 3 − 4 -4 −4 3 x 3x 3x 1 1 1 − 7 x -7x −7x 2 2 2 7 x 7x 7x 3 3 3 − 8 -8 −8 − 4 x -4x −4x 1 1 1 6 x 6x 6x…

yarn install 报错 Expected version “>=18“,Got “16.20.0“

项目在初始化 (yarn install),一直报错以下信息&#xff0c;切换node 版本无法修改 1、首先使用命令检查&#xff0c;strict-ssl 是否为true和ignore-engines是否为false yarn config list2、如果不为 1 描述的值&#xff0c;使用以下命令设置 yarn config set strict-ssl t…

20241011给华硕的FX607JVCPU安装WIN10【intel的13代酷睿】

20241011给华硕的FX607JVCPU安装WIN10【intel的13代酷睿】 2024/10/11 17:55 缘起&#xff1a;同事新买的华硕笔记本电脑&#xff0c;WIN11的&#xff0c;需要降级为WIN10。 使用U盘安装WIN10的时候&#xff0c;常见现象&#xff1a;安装的时候找不到固态硬盘。 电脑使用的是&a…

推荐一个边缘物联网平台

AIoTedge是一个AIoT边缘物联网计算平台&#xff0c;它结合了边缘计算、物联网平台和泛协议软网关的功能。这个平台采用边云协同的架构&#xff0c;可以在多个点部署&#xff0c;与IoT云平台配合使用&#xff0c;提供分布式的AIoT处理能力。这种架构特别适用于需要AI云端训练和本…

HTTP代理的优点和局限性

在这个信息爆炸的时代&#xff0c;网络已成为我们获取知识、交流思想、开展商务的重要平台。但随之而来的隐私泄露、网络安全威胁、以及无处不在的网络监控&#xff0c;却让我们的每一次在线活动都充满了风险。 在这样的背景下&#xff0c;HTTP代理技术应运而生&#xff0c;它不…

歌曲怎样去掉人声留伴奏?教你几招,瞬间去除歌曲人声

在数字音乐时代&#xff0c;对音频进行编辑和处理已成为一种常见的需求。其中&#xff0c;将歌曲中的人声去除&#xff0c;仅保留伴奏部分&#xff0c;是许多音乐爱好者和创作者经常面临的任务。无论是为了制作卡拉OK伴奏&#xff0c;还是进行音乐混音和再创作&#xff0c;掌握…

养宠人崩溃的季节又到了,有什么吸浮毛宠物空气净化器推荐?

害&#xff0c;怎么转眼又到秋天了&#xff0c;猫咪又迎来了换毛期。这段时间我撸猫都不敢用力&#xff0c;随便摸摸就能带下满手的毛发&#xff0c;都可以做成毛毡了。我家猫还贼活泼&#xff0c;每天下班扑向我&#xff0c;还没能来得及换衣服&#xff0c;又收获一身满满的猫…

IC开发——数字电路设计简介

1. 前言 我们说的数字电路&#xff0c;一般是指逻辑数字电路&#xff0c;即通过逻辑门组合成的电路&#xff0c;也即我们常说的逻辑IC。IC除了逻辑IC之外&#xff0c;还有模拟IC&#xff0c;存储IC等。 IC设计&#xff0c;需要学习数字电路&#xff0c;需要学习Verilog/VHDL等…

TypeError: Cannot read properties of undefined (reading ‘offsetHeight’)

TypeError: Cannot read properties of undefined (reading ‘offsetHeight’) 前端报错 TypeError: Cannot read properties of undefined (reading offsetHeight)错误通常意味着你试图访问一个未定义或尚未渲染到DOM中的元素的offsetHeight属性。这个错误常见于异步数据处理、…

DAPLINK 之仿真调试器介绍

文章目录 前言1 协议1.1 JTAG 协议1.2 SWD 协议 2 调试仿真器2.1 ST-Link 仿真器2.2 ULink 仿真器2.3 J-Link 仿真器2.4 DAPLINK 仿真器 3 LINKer 搭配 CLion 的使用3.1 ST-Link CLion STM32F103RCT63.2 DAPLINK CLion STM32F103RCT6 参考 前言 本文算是 DAPLINK 学习的一个…

PyQt5 的 designer.exe 使用布局详解

文章目录 采用designer.exe原因一、打开 designer.exe二、界面布局介绍1. 菜单栏和工具栏2. 组件面板3. 窗体设计区域4. 属性编辑器5. 信号 / 槽编辑器 三、示例代码及图片展示 采用designer.exe原因 Python使用PyQt5界面开发为啥不使用py文件创建而是采用designer.exe原因&…

通过redis实现高性能计费处理逻辑

计费服务一般都是跟资金相关&#xff0c;所以它在系统中是非常核心的模块&#xff0c;要保证服务的高可用、事务一致性、高性能。服务高可用需要集群部署&#xff0c;要保证事务一致性可以通过数据库来实现&#xff0c;但是只通过数据库却很难实现高性能的系统。 这篇文章通过使…

人工智能——引领未来的科技革命

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经成为我们生活中不可或缺的一部分。从智能手机的语音助手到自动驾驶汽车&#xff0c;从智能家居到工业自动化&#xff0c;AI的应用正在不断拓展&#xff0c;其影响力也在持续增强。今天&#xff0c;我们将…

图像的两种结构

彩色图像数据 (color_image_data) 彩色图像数据是一个三维数组&#xff0c;其中每个维度分别对应&#xff1a; 高度&#xff1a;图像的行数。宽度&#xff1a;图像的列数。颜色通道&#xff1a;每个像素的颜色信息&#xff0c;通常为RGB三个通道。 例如&#xff0c;一个3x3像…