Flash地址空间的数据读取

一、Flash原理

不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了 1024K 字节。市面上 STM32F1 开发板使用的芯片是 STM32F103系列,其 FLASH 容量一般为 512K 字节,属于大容量芯片

Flash的编程原理都是只能将1写为0,而不能将0写为1,所以在进行Flash编程前,必须将对应的块擦除,即将该块的每一位都变为1,块内所有字节变为0xFF。

STM32F1 的闪存(Flash)模块:主存储器、信息块、闪存存储器接口寄存器

主存储器。该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。注意,小容量和中容量产品则每页只有 1K 字节。

信息块。该部分分为 2 个小部分,其中启动程序代码,是用来存储 ST 自带的启动程序,用于串口下载代码,当 BOOT0 接 V3.3, BOOT1 接 GND 的时候,运行的就是这部分代码。用户选择字节,则一般用于配置写保护、读保护等功能。

闪存存储器接口寄存器。该部分用于控制闪存读写等,是整个闪存模块的控制机构。对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压由内部产生。

在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。

下图是Flash的一些主要特性:
在这里插入图片描述

二、创建STMcube工程

1、选择芯片

芯片就选择我们所用的STM32F103C8:
在这里插入图片描述

2、配置定时器

在这里插入图片描述

3、打开外部时钟

在这里插入图片描述
配置时钟:
在这里插入图片描述

4、配置管脚

对应外设c8t6本身设计好的PC13 LED灯:
在这里插入图片描述

5、设置堆栈大小

在这里插入图片描述

三、在keil工程下的配置

将事先准备好的flash.c 及flash.h加入到工程中:
在这里插入图片描述
添加代码如下图所示:
在这里插入图片描述
在这里插入图片描述
编译成功:
在这里插入图片描述

三、keil工程调试

1、STlink连线说明

接线:

ST-LINK STM32
SWCLK/TCK SWCLK/TCK
SWDIO/TMS SWDIO/TMS
GND GND
VCC VCC

在这里插入图片描述
在电脑上下载好响应的ST-Link驱动,上电,可以看到STLink在电脑上显示出来了,可以说明ST-Link 驱动已经安装完成。接下来只需要在 mdk 工程里面配置一下 ST-Link即可。
在这里插入图片描述

2、keil配置

点开魔法棒进行配置,在 Debug 选项卡中,选择ST-Link Debugger。
在这里插入图片描述
如果右侧IDCODE有显示的话就是连接成功了:
在这里插入图片描述
点击load下载程序到板子上:
在这里插入图片描述

3、调试

一直连接上板子然后进入debug,千万不要选择仿真调试,点击视图—>观测窗口—>随便选择一个窗口,紧接着在右下角的Memory1窗口中输入我们存储数据的地址0x0800C000,点击全速运行,可以看到板子上的PC13 LED亮起,然后Memory 1窗口中出现之前存储的数据,证明数据成功写入:
在这里插入图片描述
断电之后再次上电进行调试,可以看到上次写入的数据还在其中,证明已经将数据写入到flash中。

四、参考链接

STM32 进阶教程 13 – FLASH的读写操作
STM32内部Flash读写问题

版权声明:本文为CSDN博主「Melody crush」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shutupbb/article/details/122222829

一、Flash原理

不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了 1024K 字节。市面上 STM32F1 开发板使用的芯片是 STM32F103系列,其 FLASH 容量一般为 512K 字节,属于大容量芯片

Flash的编程原理都是只能将1写为0,而不能将0写为1,所以在进行Flash编程前,必须将对应的块擦除,即将该块的每一位都变为1,块内所有字节变为0xFF。

STM32F1 的闪存(Flash)模块:主存储器、信息块、闪存存储器接口寄存器

主存储器。该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。注意,小容量和中容量产品则每页只有 1K 字节。

信息块。该部分分为 2 个小部分,其中启动程序代码,是用来存储 ST 自带的启动程序,用于串口下载代码,当 BOOT0 接 V3.3, BOOT1 接 GND 的时候,运行的就是这部分代码。用户选择字节,则一般用于配置写保护、读保护等功能。

闪存存储器接口寄存器。该部分用于控制闪存读写等,是整个闪存模块的控制机构。对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压由内部产生。

在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。

下图是Flash的一些主要特性:
在这里插入图片描述

二、创建STMcube工程

1、选择芯片

芯片就选择我们所用的STM32F103C8:
在这里插入图片描述

2、配置定时器

在这里插入图片描述

3、打开外部时钟

在这里插入图片描述
配置时钟:
在这里插入图片描述

4、配置管脚

对应外设c8t6本身设计好的PC13 LED灯:
在这里插入图片描述

5、设置堆栈大小

在这里插入图片描述

三、在keil工程下的配置

将事先准备好的flash.c 及flash.h加入到工程中:
在这里插入图片描述
添加代码如下图所示:
在这里插入图片描述
在这里插入图片描述
编译成功:
在这里插入图片描述

三、keil工程调试

1、STlink连线说明

接线:

ST-LINK STM32
SWCLK/TCK SWCLK/TCK
SWDIO/TMS SWDIO/TMS
GND GND
VCC VCC

在这里插入图片描述
在电脑上下载好响应的ST-Link驱动,上电,可以看到STLink在电脑上显示出来了,可以说明ST-Link 驱动已经安装完成。接下来只需要在 mdk 工程里面配置一下 ST-Link即可。
在这里插入图片描述

2、keil配置

点开魔法棒进行配置,在 Debug 选项卡中,选择ST-Link Debugger。
在这里插入图片描述
如果右侧IDCODE有显示的话就是连接成功了:
在这里插入图片描述
点击load下载程序到板子上:
在这里插入图片描述

3、调试

一直连接上板子然后进入debug,千万不要选择仿真调试,点击视图—>观测窗口—>随便选择一个窗口,紧接着在右下角的Memory1窗口中输入我们存储数据的地址0x0800C000,点击全速运行,可以看到板子上的PC13 LED亮起,然后Memory 1窗口中出现之前存储的数据,证明数据成功写入:
在这里插入图片描述
断电之后再次上电进行调试,可以看到上次写入的数据还在其中,证明已经将数据写入到flash中。

四、参考链接

STM32 进阶教程 13 – FLASH的读写操作
STM32内部Flash读写问题

版权声明:本文为CSDN博主「Melody crush」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shutupbb/article/details/122222829

生成海报
点赞 0

Melody crush

我还没有学会写个人说明!

暂无评论

相关推荐

2022寒假自学蓝桥杯嵌入式

2022寒假自学蓝桥杯嵌入式 欢近似从0开始准备2022年4月份省赛 学习记录分享 2022/1/22晚 硬件部分的认识(国信长天) 液晶屏,芯片在液晶屏下 电源选择跳线 下载调试文件接口

STM32使用各种传感器的demo

各种传感器的demo 最近有假期有空整理了一些传感器的使用方式 激光测距 激光测距是我在完成电磁炮项目用的模块,大家也可以去借鉴我以前的文章,使用起来也是方便,当时涂方便,利用的是串口