基于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生成新的工程过程这里不再过多详细介绍,可参考之前的博客:/weixin_45970808/article/details/120890299?spm=1001..3001.5501
这里只是注明一些建工程要注意的地方。
时钟配置
SYS配置
引脚配置
RCC配置
中断配置
调整堆栈大:将栈大小设为大于2k,本案例操作flash会用到(此处设置为4k)
四、项目实现过程
修改main.c文件主要是添加写入所需要的控制函数
FlashWriteBuff()函数:
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 */
编译
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了。
参考
STM32 进阶教程 13 – FLASH的读写操作