43
675
1758
助理工程师
型号: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 )
32
3724
8127
技术达人
31
3617
8043
34
3651
8004
29
3592
7926
高级工程师
41
3747
8205
3648
7959
27
3374
7776
63
4056
8944
38
3709
8661
26
3755
8922
发表回复 本版积分规则 回帖后跳转到最后一页
0
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注21ic项目外包
扫码关注21ic视频号
扫码关注21ic抖音号
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才 | 论坛帮助
京公网安备 11010802024343号