完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1 MCU 片内Flash 读写
2 下图是Flash写的过程: 3 下图是Flash页擦除过程: 4 下图为Flash全擦除过程 5 code添加 编译环境 1 MDK-5.26 2 STM32CUBEMX 5.6.0 main.c文件加入 /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ //int fputc(int ch, FILE *f) //{ // HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1, 0xFFFF); // return ch; //} uint32_t WriteFlashData = 0x12345678; uint32_t addr = 0x08003000; /*FLASH写入程序*/ void writeFlashTest(void) { /* 1/4解锁FLASH*/ HAL_FLASH_Unlock(); /* 2/4擦除FLASH*/ /*初始化FLASH_EraseInitTypeDef*/ /*擦除方式页擦除FLASH_TYPEERASE_PAGES,块擦除FLASH_TYPEERASE_MASSERASE*/ /*擦除页数*/ /*擦除地址*/ FLASH_EraseInitTypeDef FlashSet; FlashSet.TypeErase = FLASH_TYPEERASE_PAGES; FlashSet.PageAddress = addr; FlashSet.NbPages = 1; /*设置PageError,调用擦除函数*/ uint32_t PageError = 0; HAL_FLASHEx_Erase(&FlashSet, &PageError); /* 3/4对FLASH烧写*/ HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr, WriteFlashData); /* 4/4锁住FLASH*/ HAL_FLASH_Lock(); } /*FLASH读取打印程序*/ void printFlashTest(void) { uint32_t temp = *(__IO uint32_t*)(addr); printf("addr is:0x%x, data is:0x%xrn", addr, temp); } /* USER CODE END 0 */ 在main函数中添加如下code来测试读写。 /*Flash TEST*/ WriteFlashData = 0x12345678; writeFlashTest(); printFlashTest(); WriteFlashData = 0x87654321; writeFlashTest(); printFlashTest(); 6 测试: //==========================Add Flash=============================================== uint32_t WriteFlashData = 0x12345678; uint32_t addr = 0x08001000; /* *********FLASH写入程序******************** */ void writeFlashTest(void) { /* 1/4解锁FLASH*/ HAL_FLASH_Unlock(); /* 2/4擦除FLASH*/ /*初始化FLASH_EraseInitTypeDef*/ /*擦除方式页擦除FLASH_TYPEERASE_PAGES,块擦除FLASH_TYPEERASE_MASSERASE*/ /*擦除页数*/ /*擦除地址*/ FLASH_EraseInitTypeDef FlashSet; FlashSet.TypeErase = FLASH_TYPEERASE_PAGES; FlashSet.PageAddress = addr; FlashSet.NbPages = 1; /*设置PageError,调用擦除函数*/ uint32_t PageError = 0; HAL_FLASHEx_Erase(&FlashSet, &PageError); /* 3/4对FLASH烧写*/ HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr, WriteFlashData); /* 4/4锁住FLASH*/ HAL_FLASH_Lock(); } /*FLASH读取打印程序*/ void printFlashTest(void) { uint32_t temp = *(__IO uint32_t*)(addr); printf("addr is:0x%x, data is:0x%xrn", addr, temp); } void writeFlashTest_1(uint32_t addr,uint32_t WriteFlashData) { /* 1/4解锁FLASH*/ HAL_FLASH_Unlock(); /* 2/4擦除FLASH*/ /*初始化FLASH_EraseInitTypeDef*/ /*擦除方式页擦除FLASH_TYPEERASE_PAGES,块擦除FLASH_TYPEERASE_MASSERASE*/ /*擦除页数*/ /*擦除地址*/ FLASH_EraseInitTypeDef FlashSet; FlashSet.TypeErase = FLASH_TYPEERASE_PAGES; FlashSet.PageAddress = addr; FlashSet.NbPages = 1; /*设置PageError,调用擦除函数*/ uint32_t PageError = 0; HAL_FLASHEx_Erase(&FlashSet, &PageError); /* 3/4对FLASH烧写*/ HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr, WriteFlashData); /* 4/4锁住FLASH*/ HAL_FLASH_Lock(); } /*FLASH读取打印程序*/ void printFlashTest_1(uint32_t addr) { uint32_t temp = *(__IO uint32_t*)(addr); printf("addr is:0x%x, data is:0x%Xrn", addr, temp); } //=============================================================== |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1877 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1661 浏览 1 评论
1145 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
760 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1720 浏览 2 评论
1963浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
789浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
612浏览 3评论
629浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
591浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-12 05:40 , Processed in 0.816312 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号