STM32F103c8t6Flash地址空间的数据读取
- 一、项目任务
- 二、Flash的读写操作
- 1、创建STM32CubeMX工程文件
- 2、代码修改
- 3、连接STlink调试
- (1)程序烧录
- (2)调试
- 三、Flash原理
- 四、实验总结
- 五、参考文献
一、项目任务
)Flash地址空间的数据读取。stm32f103c8t6只有20KB 内存(RAM)供程序代码和数组变量存放,因此,针对内部Flash的总计64KB存储空间(地址从0x08000000开始),运行一次写入8KB数据,总计复位运行代码4次,将32KB数据写入Flash。并验证写入数据的正确性和读写速率。
二、Flash的读写操作
1、创建STM32CubeMX工程文件
①定时器配置
②配置系统时钟树
③配置引脚
③配置中断
④调整堆栈大小为2k
生成文件即可。
2、代码修改
① 将及
文件加入到工程(
文件放在INC文件夹下即可)
② 在中加入代码
添加:#include ""
添加:
/* USER CODE BEGIN 0 */
uint8_t FlashWBuff [255];
uint8_t FlashRBuff [255];
/* USER CODE END 0 */
/* USER CODE BEGIN 1 */
uint8_t i;
uint8_t FlashTest[] = "Hello This is ZhangShiSan Flash Test DEMO";
/* USER CODE END 1 */
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
/* USER CODE BEGIN SysInit */
FlashWriteBuff( DEVICE_INFO_ADDRESS, FlashTest,sizeof(FlashTest) ); // 写入数据到Flash
for(i=0;i<255;i++)
FlashWBuff[i] = i;
FlashWriteBuff( DEVICE_INFO_ADDRESS + sizeof(FlashTest), FlashWBuff,255 ); // 写入数据到Flash
FlashReadBuff( DEVICE_INFO_ADDRESS + sizeof(FlashTest),FlashRBuff,255 ); // 从Flash中读取数
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
3、连接STlink调试
(1)程序烧录
① STlink连线
② 编译无误
③ 在 Debug
选项卡中,请选择ST-Link Debugger
④ 选择SW模式
再选择ST-LINK Debugger
后点击settings
⑤ 点击LOAD下载
- 注:使用st-link和keil进行烧录会严格检查stm32型号,如果不是对应的型号烧录会报错
(2)调试
① 运行程序
② 打开内存观察窗口,输入0x800c00,观察修改的flash区间内容
View->memory windows->memory 1
③ 打开变量观察窗口,将变量FlashWBuff
和FlashRBuff
加入到 Watch 1 观察窗口:
④ View->Periodic Windows Update开启变量自动更新
⑤ 全速运行程序,可以看到数组FlashRBuff中内容与数组FlashWBuff中内容一样
⑥ 在Memory 1窗口中可以看到在FLASH地址0x0800C000区成功写入对应内容
三、Flash原理
不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了 1024K 字节。市面上 STM32F1 开发板使用的芯片是 STM32F103系列,其 FLASH 容量一般为 512K 字节,属于大容量芯片。
- STM32F1 的闪存(Flash)模块:主存储器、信息块、闪存存储器接口寄存器
①主存储器。该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。注意,小容量和中容量产品则每页只有 1K 字节。
②信息块。该部分分为 2 个小部分,其中启动程序代码,是用来存储 ST 自带的启动程序,用于串口下载代码,当 BOOT0 接 V3.3, BOOT1 接 GND 的时候,运行的就是这部分代码。用户选择字节,则一般用于配置写保护、读保护等功能。
③闪存存储器接口寄存器。该部分用于控制闪存读写等,是整个闪存模块的控制机构。对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压由内部产生。
在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。
四、实验总结
本次实验为stm32的Flash读写操作,本次实验的预实验对于次实验的分析很有帮助,主要是进行分析sd卡的读写操作,本次实验在以上一个实验基础上进行的,本次实验开始的时候有点迷茫,后来明白了在做什么,参考他人博客做下来就很简单了。
五、参考文献
【1】/zhanglifu3601881/article/details/96632971
【2】/weixin_45970808/article/details/122118902
【3】/qq_46467126/article/details/122098829