文章目录[隐藏]
一、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
暂无评论