完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的代码是这样的:
我在给ARM弄IAP的时候,我希望擦除的是0x8008000到0x8048000之间的APP段,但是在用Keil5和STlink仿真的时候,发现Bootloader段的首段代码从0x8000000也被擦除了一页(0x800大小),导致debug模式不能正常运行了。 不知道是为什么,有人能帮忙解答吗? |
|
相关推荐
1个回答
|
|
使用FLASH_ErasePage函数会擦除页面中的所有内容,包括代码段和数据段。你遇到的问题可能是由于Flash的页大小是固定的,在擦除时没有考虑到代码段的起始地址和页的边界对齐。在你的情况下,代码段的起始地址不是页的起始地址,所以会导致代码段被擦除。
解决这个问题的一种方法是先计算出需要擦除的页的起始地址和结束地址,然后逐页擦除。具体的做法可以参考以下示例代码: ```c #define FLASH_PAGE_SIZE 0x800 // Flash页的大小 #define APP_START_ADDR 0x8008000 // APP段的起始地址 #define APP_END_ADDR 0x8048000 // APP段的结束地址 void flash_erase_app_segment(void) { uint32_t addr = APP_START_ADDR; FLASH_EraseInitTypeDef erase_init; uint32_t page_error; // 擦除每一页 while (addr < APP_END_ADDR) { erase_init.TypeErase = FLASH_TYPEERASE_PAGES; erase_init.PageAddress = addr; erase_init.NbPages = 1; HAL_FLASHEx_Erase(&erase_init, &page_error); addr += FLASH_PAGE_SIZE; } } ``` 这样做的好处是可以确保只擦除了需要擦除的页面,而不会影响其他代码段的内容。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1614 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1541 浏览 1 评论
970 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
682 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1592 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 21:25 , Processed in 0.869746 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号