200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > STM32c8t6Flash地址空间的数据读取

STM32c8t6Flash地址空间的数据读取

时间:2021-03-31 12:27:35

相关推荐

STM32c8t6Flash地址空间的数据读取

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、代码修改

① 将flash.cflash.h文件加入到工程(flash.h文件放在INC文件夹下即可)

② 在main.c中加入代码

添加:#include "flash.h"

添加:

/* 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 */

/* USER CODE BEGIN SysInit */FlashWriteBuff( DEVICE_INFO_ADDRESS, FlashTest,sizeof(FlashTest) ); // 写入数据到Flashfor(i=0;i<255;i++)FlashWBuff[i] = i;FlashWriteBuff( DEVICE_INFO_ADDRESS + sizeof(FlashTest), FlashWBuff,255 ); // 写入数据到FlashFlashReadBuff( DEVICE_INFO_ADDRESS + sizeof(FlashTest),FlashRBuff,255 ); // 从Flash中读取数/* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();/* USER CODE BEGIN 2 */

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

③ 打开变量观察窗口,将变量FlashWBuffFlashRBuff加入到 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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。