STM32之Flash读写操作
前言
本例是以读写C8T6最小系统板的Flash,了解其Flash地址空间的数据读取。
stm32f103c8t6只有20KB 内存(RAM)供程序代码和数组变量存放,因此,针对内部Flash的总计64KB存储空间(地址从0x08000000开始),运行一次写入8KB数据,总计复位运行代码4次,将32KB数据写入Flash。并验证写入数据的正确性和读写速率。
一、配置cubemx工程
滴答定时器的配置
打开外部时钟
配置时钟树
基本配置完成
设置堆栈大小
然后生成代码即可
二、使用Keil5修改代码
添加flash.c文件
并在工程路径中添加其头文件所在路径
在main.c文件中添加flash.h
头文件
并定义两个变量数组
在main
函数中添加以下代码
/* USER CODE BEGIN 1 */
uint8_t i;
uint8_t FlashTest[] = "Hello This is a Flash Test DEMO";
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* 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 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
编译完成后,开始调试程序
三、调试
进入调试界面,添加内存观察窗口
添加变量观测窗口,并添加FlashWBuff
,FlashRBuff
变量
并勾选窗口自动更新
F5,全速运行程序,可以看到数组FlashRBuff中内容与数组FlashWBuff中内容一样了:
观察内存窗口
我们尝试修改一下代码,多写几次