Flash地址空间的数据读取——STM32

2023-11-13

一、STM32 的内部 FLASH 简介

在 STM32 芯片内部有一个 FLASH 存储器,它主要用于存储代码,我们在电脑上编写好应用程序后,使用下载器把编译后的代码文件烧录到该内部 FLASH 中,由于 FLASH 存储器的内容在掉电后不会丢失,芯片重新上电复位后,内核可从内部 FLASH 中加载代码并运行。

根据用途,STM32 片内的 FLASH 分成两部分:主存储块和信息块。
主存储块用于存储程序,我们写的程序一般存储在这里;
信息块又分成两部分:系统存储器、选项字节。 系统存储器存储用于存放在系统存储器自举模式下的启动程序(BootLoader),当使用 ISP 方式加载程序时,就是由这个程序执行。这个区域由芯片厂写入 BootLoader,然后锁死,用户是无法改变这个区域的。 选项字节存储芯片的配置信息及对主存储块的保护信息。
在这里插入图片描述除了使用外部的工具(如下载器)读写内部 FLASH 外,STM32 芯片在运行的时候,也能对自身的内部 FLASH 进行读写,因此,若内部 FLASH 存储了应用程序后还有剩余的空间,我们可以把它像外部 SPI-FLASH 那样利用起来,存储一些程序运行时产生的需要掉电保存的数据。

由于访问内部 FLASH 的速度要比外部的 SPI-FLASH 快得多,所以在紧急状态下常常会使用内部 FLASH 存储关键记录;为了防止应用程序被抄袭,有的应用会禁止读写内部FLASH 中的内容,或者在第一次运行时计算加密信息并记录到某些区域,然后删除自身的部分加密代码,这些应用都涉及到内部 FLASH 的操作。

二、工程验证

flash工程下载链接:https://pan.baidu.com/s/11Tn8TocHT8qithneDyKFIQ
提取码:pmvn
下载完成后打开文件夹,将路径stm32_Flash\Drivers\CMSIS\Device\ST\STM32F1xx\Include下的system_stm32f1xx_20190722_092746.h文件修改为system_stm32f1xx.h,否则后面编译会报错
在这里插入图片描述修改好后,打开工程,可以将想要存入Flash中的内容修改为自定义内容

uint8_t FlashTest[] = “Hello!631907030123”;
在这里插入图片描述进行程序调试前,先完成配置:
注意:下载的工程代码调试用的是硬件 st-link debuger,不是软件仿真,因此用软件仿真做,可能情况略有不同(小编这里软件仿真就没有出现结果)
点击Options->Debug->右边使用硬件ST-Link Debugger

在这里插入图片描述接着点击S T-Link Debugger右边的Settings
在这里插入图片描述进入到Cortex-M Target Driver Setup的Debug页面,其中的Port选择为SW

在这里插入图片描述依次点击Flash Download->勾选Reset and Run->Add->选择STM32F10x Med-density Flash->Add->确定即可
在这里插入图片描述最后点击OK完成硬件配置

由于要连接硬件ST-Link,所以要下载一个STLink驱动,不然下载不成功
链接:https://pan.baidu.com/s/13k0PVQfg5qAHXBKJ2IZiYA
提取码:1234
在这里插入图片描述

三、总结

完成本次实验内容后,对STM32 的内部 FLASH 有了一定的了解,明白了FLASH 的基本功能后,以后基于STM32的开发就可以省去一些外部FLASH或EEPROM了。

参考链接

1.https://blog.csdn.net/zhanglifu3601881/article/details/96632971
2.https://www.eefocus.com/embedded/399467

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flash地址空间的数据读取——STM32 的相关文章

  • 读取和打印手臂组件中的字符串

    我正在使用 ARMSim 刚刚开始学习汇编 所以如果我看起来一无所知 请原谅我 但我正在尝试从输入文件中读取字符串 然后将其打印到输出屏幕 到目前为止我有 equ SWI Open 0x66 open a file equ SWI Clos
  • Linux malloc() 在 ARM 和 x86 上的行为是否不同?

    这个网站上有很多关于内存分配的问题 但是我 找不到专门解决我的问题的人 这 问题 https stackoverflow com questions 19148296 linux memory overcommit details似乎最接近
  • 有没有办法在 Xcode 4 中为 ARM 而不是 Thumb 进行编译?

    如果有很多浮点运算正在进行 Apple 建议针对 ARM 进行编译 而不是针对拇指进行编译 我的整个应用程序几乎是一个大型浮点运算 iOS 应用程序开发工作流程指南中是这样说的 iOS 设备支持两种指令集 ARM 和 Thumb Xcode
  • 为什么 i2c_smbus 函数不可用? (I2C——嵌入式Linux)

    有很多参考使用i2c smbus 开发嵌入式 Linux 软件时在 I2C 总线上进行通信的函数 什么时候i2c smbus函数如i2c smbus read word data在软件项目中引用了 ARM8 处理器错误 例如 i2c smb
  • Beaglebone Black 的 U-boot 无法构建 - 目标 CPU 不支持 THUMB 指令

    我正在尝试按照 Chris Simmonds 的 掌握嵌入式 Linux 编程 中的说明为 Beagle Bone Black 构建 u boot 我已经构建了交叉工具链 现在正在尝试使用该工具链构建 Das U boot 但由于不支持 T
  • 了解 U-Boot 内存占用

    我不明白加载 U Boot 时 RAM 中发生了什么 我正在开发 Xilinx Zynq ZC702 评估套件 并尝试使用 U Boot 在其上加载 Linux 内核 于是我使用Xilinx工具Vivado和SDK生成了一个BOOT bin
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https
  • 让 TensorFlow 在 ARM Mac 上使用 GPU

    我已经安装了TensorFlow在 M1 上 ARM Mac 根据这些说明 https github com apple tensorflow macos issues 153 一切正常 然而 模型训练正在进行CPU 如何将培训切换到GPU
  • GCC:如何在 MCU 上完全禁用堆使用?

    我有一个在基于 ARM Cortex M 的 MCU 上运行并用 C 和 C 编写的应用程序 我用gcc and g 编译它并希望完全禁用任何堆使用 在 MCU 启动文件中 堆大小已设置为 0 除此之外 我还想禁止代码中意外使用堆 换句话说
  • aarch64 Linux 硬浮点或软浮点

    linux系统有arm64 有arm架构armv8 a 如何知道 Debian 运行的是硬浮动还是软浮动 符合 AAPCS64 GNU GCC for armv8仅提供硬浮动aarch64工具链 这与 armv7 a 的 GCC 不同 后者
  • 错误:-march= 开关的值错误

    我写了一个Makefile 但无法让它工作 我有一个选项应该选择编译到哪个处理器 然而 当我跑步时make从命令行它说 tandex tandex P 6860FX emulators nintendo sdks 3DS SDK HomeB
  • 你好世界,裸机 Beagleboard

    我正在尝试在我的 Beagleboard xm rev 上运行 hello world 类型的程序 C 通过调用 Cputs功能来自装配 到目前为止 我一直使用这个作为参考 http wiki osdev org ARM Beagleboa
  • 已编译 LKM 的互换性

    是否可以使用可加载内核模块 编译为3 0 8 mod unload ARMv5 我自制的内核 在具有版本的内核中3 0 31 gd5a18e0 SMP preempt mod unload ARMv7 安卓股票内核 该模块本身几乎不包含任何
  • GCC 变量映射和 MISRA-C

    我主要知道两种使用 GCC 声明内存映射寄存器的方法 有许多变体 使用双字段 每个外设的数据结构等 要么使用初始化为正确地址的指针 例如volatile uint32 t pMyRegister uint32 t 0xDEADBEEFUL
  • 使用arm-linux-gnueabi-gcc为Android交叉编译静态C hello world

    我想使用 arm linux gnueabi gcc 从 C 构建静态 hello world 而不是使用 NDK 独立工具链或 Codesourcery 在Ubuntu中 我做了以下事情 sudo apt get install gcc
  • ARM、VFP、浮点、惰性上下文切换

    我正在为 ARM 处理器 Cortex A9 编写操作系统 我正在尝试实现浮点寄存器的延迟上下文切换 这背后的想法是 浮点扩展最初对线程禁用 因此不需要在任务切换上保存浮点上下文 当线程尝试使用浮点指令时 会触发异常 然后 操作系统启用浮点
  • Linux 内核使用的设备树文件 (dtb) 可视化工具? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以图形化表示Linux内核中使用的硬件设备树的工具 我正在尝试了解特定 Arm 芯片组
  • STM32F4 定时器 - 计算周期和预分频,以生成 1 ms 延迟

    我在用STM32F407VGT6 with CubeMX 因此 我从通用定时器开始 但我被预分频值和周期值所困扰 基本上我想每隔一段时间生成一个定时器中断n 其中 n 1 2 3 ms 并执行一些任务 计算周期和预分频值的公式有很多变化 公
  • 更新 MMU 转换表的正确方法是什么

    我在我的 s3c2440 板上启用了 MMU 3G 4G 内存 故障属性 当我没有读 写 3G 4G 内存时一切都很好 所以为了测试页面错误向量 我写入了 0xFF 3G地址 正如我所料 我从FSR中得到了正确的值 所以我在 do page

随机推荐

  • Hadoop的安装(单机、伪分布、完全分布)

    安装单机模式 1 设置Hadoop配置文件 进入Hadoop配置文件所在目录 修改hadoop env sh文件 2 测试Hadoop 创建输入文件 input 在data txt中写下内容 运行Mapreduce WordCount例子
  • USB接口针式打印机

    1 针式打印机原理 针式打印机16针是纵向排列 每次打印垂直的16bit 然后右移一bit 继续下列打印 字节的MSB表示最上面的点 字节LSB表示最下面的点 由于汉字字模的点阵是横向排列的 而提供给打印头的信息却需要按纵向排列 所以必须再
  • 合并两个链表

    输入两个单调递增的链表 输出两个链表合成后的链表 当然我们需要合成后的链表满足单调不减规则 public class Solution public ListNode Merge ListNode list1 ListNode list2
  • IDEA创建Javaweb项目之方法3之使用JavaEnterprise

    目录 1 file project enterprise 2 结构如下 3 配置Tomcat服务器 4 重要部署不要忘记 ps idea中别配置错Tomcat 1 file project enterprise 无脑默认即可 2 结构如下
  • Linux命令_netstat & 接口、端口、路由统计

    简介 netstat用于打印网络连接 路由表 接口统计信息 伪装连接和多播成员关系 netstat打印关于Linux网络子系统的信息 打印信息的类型由第一个参数控制 语法 netstat veenNcCF
  • maven打成jar包

    还是实践出真知啊
  • 算法题目练习(C/c++/java)

    记录做过的经典题型 以便于以后查看 目录 二分法 1 二分查找一个数 2 二分查找左边界 3 二分查找右边界 计算最大公约数 辗转相除 递归辗转 链表的逆置 前缀和求法 一维前缀和 二维前缀和 包子凑数 扩展欧几里得算法 例子 青蛙的约会
  • 【全民编程】《软件编程-讲课视频》【零基础入门到实战应用】

    第一阶段 零基础编程到入门 视频讲解 第二阶段 工作实操指导
  • EC变色玻璃介绍

    EC Electrochromic 全称电致变色 最外层的两层EC器件基底将所有材料包裹起来 EC器件基底大部分为玻璃 变色玻璃组成 EC变色的本质是在电压作用下材料的光学性质 透过率 反射率 吸收率等 发生稳定 可逆的变化 在EC薄膜两边
  • VMM基础

    复杂度3 5 机密度3 5 最后更新2021 04 20 VMM Virtual Memory Management是所有操作系统都要解决的问题 也是非常硬件相关的问题 必须从硬件CPU的地址管理开始谈起 我们先了解一些术语 Page 内存
  • Sklearn——5折交叉验证评估模型性能

    学习资料 sklearn 中文文档 http www scikitlearn com cn pandas cookbook https github com iamseancheney pythonbooks blob master Pan
  • NLP-分词器:SentencePiece【参考Chinese-LLaMA-Alpaca在通用中文语料上训练的20K中文词表并与原版LLaMA模型的32K词表进行合并的代码】

    背景 随着ChatGPT迅速出圈 最近几个月开源的大模型也是遍地开花 目前 开源的大语言模型主要有三大类 ChatGLM衍生的大模型 wenda ChatSQL等 LLaMA衍生的大模型 Alpaca Vicuna BELLE Phoeni
  • 业内首发

    区块链数据服务 Blockchain Data Service BDS 是京东云区块链产品部发推出的 其将区块链的链式 非结构化数据通过技术手段进行结构化存储 实时同步到高性能数据仓库中 用户可以通过区块链数据查询工具 实现简单的条件查询和
  • springboot+rabbitmq两小时入门(七):生产者发送失败和消费者消费失败处理

    消息队列经常会发送失败和消费失败 这两种问题在日常工作中是不可忽视的 消息发送失败情况 1 网络抖动导致生产者和mq之间的连接中断 导致消息都没发 答 rabbitmq有自动重连机制 叫retry 具体到rabbitTemplate中叫re
  • LVS——DR模式下的健康检查(ldirectord)

    对后端服务器健康检查 如果一个后端服务器挂掉将这个服务器踢出集群 让用户无感知 否则会出现访问时好时坏的情况 当宕机的服务器恢复正常时自动将他加回集群 当服务器集群宕机的时候返回一个统一的错误页面 这个页面来自于调度器 注意 ldirect
  • linux 下搭建BugFree

    遇到问题 公司项目组开发小组需要搭建缺陷管理系统 方便开发小组提交Bug 介绍 BugFree基于PHP和MySQL开发 是免费且开放源代码的缺陷管理系统 服务器端在Linux和Windows平台上都可以运行 客户端无需安装任何软件 通过I
  • [运维] 在debian系统下安装KODExplorer(可道云)

    系统环境说明 系统 Debian GNU Linux 10 buster 平台 amd64 参考文献 KODExplorer 系统环境软件安装 KODExplorer 运行环境软件安装 sudo apt install php php cu
  • python线程池 ThreadPoolExecutor 使用详解

    从 Python3 2 开始 标准库为我们提供了 concurrent futures 模块 它提供了 ThreadPoolExecutor 和 ProcessPoolExecutor两个类 实现了对 threading 和 multipr
  • [ACTF2020]exec

    ACTF2020 exec 点开进入题目 可以看见一个ping 首先第一反应是输入自己电脑的地址 可以得到 然后凭感觉进行 输入127 0 0 1 whoami 因为linux的默认用户组是www data 因此这是linux 继续下去 遍
  • Flash地址空间的数据读取——STM32

    目录 一 STM32 的内部 FLASH 简介 二 工程验证 三 总结 参考链接 一 STM32 的内部 FLASH 简介 在 STM32 芯片内部有一个 FLASH 存储器 它主要用于存储代码 我们在电脑上编写好应用程序后 使用下载器把编