基于stm32f103c8t6的Flash地址空间的数据读取
- 一、实现任务
- 二、项目环境
- 三、使用cubemx写stm32f103c8t6的内部Flash
- 四、项目实现过程
- 五、小结
- 参考
一、实现任务
- 实现Flash地址空间的数据读取。stm32f103c8t6只有20KB 内存(RAM)供程序代码和数组变量存放,因此,针对内部Flash的总计64KB存储空间(地址从0x08000000开始),运行一次写入8KB数据,总计复位运行代码4次,将32KB数据写入Flash。并验证写入数据的正确性和读写速率。
二、项目环境
软件
:STM32CUBEMX,KEIL硬件
:stm32f103c8t6开发板,ST-LINK
三、使用cubemx写stm32f103c8t6的内部Flash
-
使用cube生成新的工程过程这里不再过多详细介绍,可参考之前的博客:https://blog.csdn.net/weixin_45970808/article/details/120890299?spm=1001.2014.3001.5501
这里只是注明一些建工程要注意的地方。 -
时钟配置
-
SYS配置
-
引脚配置
-
RCC配置
-
中断配置
-
调整堆栈大:将栈大小设为大于2k,本案例操作flash会用到(此处设置为4k)
四、项目实现过程
- 修改main.c文件
主要是添加写入所需要的控制函数
- FlashWriteBuff()函数:
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 */
-
编译
-
options仿真器设置
选择要使用的驱动
选择SW模式:
flash download下选择reset and run
;
-
驱动下载
-
调试程序
-
View->memory windows->memory 1打开内存观察窗口,并在地址栏中输入:0x800c000,观察将要修改的flash区间区容:
-
View->Watch windows->Watch 1打开一个变量观察窗口,将变量FlashWBuff 和 FlashRBuff加入到 Watch 1 观察窗口
-
View->Periodic Windows Update开启变量自动更新:
-
点击F5,全速运行程序,可以看到数组FlashRBuff中内容与数组FlashWBuff中内容一样了:
-
同时在Memory 1窗口中可以看到在FLASH地址0x0800C000区成功写入对应内容:
五、小结
学习完任务内容,以后基于STM32开发就可以省去一些外部flash或EEPROM了。