51
745
1890
助理工程师
型号:STM32L431KBU6;
该型号内存 = 128KB,起始地址 = 0x0800_0000;只有63页;
7063664c61ca0d87ba.png (87.5 KB ) 下载附件 2023-7-30 16:17 上传
7063664c61ca0d87ba.png (87.5 KB )
下载附件
2023-7-30 16:17 上传
在L4的user manual手册的第三章详细介绍了FLASH的操作细节,我挑一些重要的信息;
flash擦除方式有两种:
1、Page erase—以页位单位擦除,1页=2K,每次最少擦除1页;
2、Mass erase—擦除整个flash;
使用特权
8521564c61cbb92ad4.png (169.22 KB )
2023-7-30 16:18 上传
uint32_t flashwriteaddr = 0x08008000; //定义写入数据的地址 uint32_t pageError = 0; uint64_t flashwritedata = 0x0000000200000001;//要写入的数据,必须得是双字64bit uint64_t flashreaddata = 0 ; FLASH_EraseInitTypeDef flash_erase; //定义一个结构体变量,里面有擦除操作需要定义的变量
6771264c61cdb9306f.png (491.7 KB )
9772964c61ce028c15.png (218.57 KB )
HAL_FLASH_Unlock(); //第二步:解锁 flash_erase.TypeErase = FLASH_TYPEERASE_PAGES; //擦除类型是“Page Erase” flash_erase.Page = 16; //擦除第16页 flash_erase.NbPages = 2; //一次性擦除2页,可以是任意页 HAL_FLASHEx_Erase(&flash_erase,&pageError); //第三步:参数写好后调用擦除函数 HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, flashwriteaddr, flashwritedata);//第四步:写入数据 HAL_FLASH_Lock(); //第五步:上锁 flashreaddata = *(__IO uint64_t *)flashwriteaddr; //读出flash中的数据 d1 = (flashreaddata>>32) & 0xFFFFFFFF; d2 = (flashreaddata)& 0xFFFFFFFF; printf("读出数据:%d %d\r\n",d1,d2); HAL_Delay(200);
9501064c61d10b6890.png (49.56 KB )
2023-7-30 16:19 上传
6394464c61d200e807.png (325.03 KB )
89
5010
1万
资深工程师
86
4898
91
4945
85
4884
95
5040
4933
80
4681
121
5349
93
4979
5003
发表回复 本版积分规则 回帖后跳转到最后一页
0
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注21ic项目外包
扫码关注21ic视频号
扫码关注21ic抖音号
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才 | 论坛帮助
京公网安备 11010802024343号