STM32c8t6Flash地址空间的数据读取

时间:2024-10-05 14:15:43

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
在这里插入图片描述
在这里插入图片描述

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