完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
|
相关推荐
18个回答
|
|
|
|
|
|
|
|
|
我已经写数据了,向stm32L053 内部flash ,并且用地址指针直接读取flash数据,再用串口输出flash地址的数据,flash地址是0x0800 0000到0x0800ffff , 64K没有超出地址。
实验硬件现象无错误, 但是为什么IAR软件调出flash内容列表,却不出现我写进去的数据呢? |
|
|
|
|
|
|
|
|
|
|
|
本帖最后由 ▲-猪-▼Ψ 于 2016-11-27 00:16 编辑
我自己的flash 内容用串口输出的代码如下 /** ****************************************************************************** * @file FLASH * @author * @version * @date * @brief 要求程序可对MCU的内部Flash页进行擦除, 可写入固定数量的数据,并可将写入的数据读出。 要求读出的数据与写入的数据内容必须一致。 擦除后,写,用串口输出flash数据 0x080000000 - 0x0800FFFF 64K flash 0x080800000 - 0x080107FF 2K EEPROM 1PAGE = 128 byte 1sector(0-15) = 32page (0-31) 7s可以完成写数据和读数据,校验数据 ****************************************************************************** */ #include "main.h" #define FLASH_USER_START_ADDR 0x08008000 /* flash起始地址 */ #define FLASH_USER_END_ADDR 0x0800A000 /* flash终止地址 */ uint8_t DATA_32[] = "STM32LO53C8"; int i =0; uint32_t FirstPage = 0, NbOfPages = 0, Address = 0; uint32_t PageError = 0; __IO uint32_t data32 = 0 , MemoryProgramStatus = 0; static FLASH_EraseInitTypeDef EraseInitStruct; UART_HandleTypeDef UartHandle; __IO ITStatus UartReady = RESET; uint8_t aTxBuffer[] = " THIS IS TRUE "; uint32_t BUFFER_data; uint8_t aRxBuffer[RXBUFFERSIZE]; static void SystemClock_Config(void); static void Error_Handler(void); void UART_INT(void); int main(void) { HAL_Init(); BSP_LED_Init(LED3); SystemClock_Config(); UART_INT(); HAL_FLASH_Unlock(); NbOfPages = (FLASH_USER_END_ADDR - FLASH_USER_START_ADDR + 1) >> 7; EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; EraseInitStruct.PageAddress = FLASH_USER_START_ADDR; EraseInitStruct.NbPages = NbOfPages; if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK) { Error_Handler(); } Address = FLASH_USER_START_ADDR; while (Address < FLASH_USER_END_ADDR) { if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address , (uint32_t)DATA_32) == HAL_OK) { Address = Address + 4; } else { Error_Handler(); } } HAL_FLASH_Lock(); /* 变量 MemoryProgramStatus = 0: 数据正确 MemoryProgramStatus != 0: 数据错误 ******/ Address = FLASH_USER_START_ADDR; MemoryProgramStatus = 0x0; BUFFER_data= *(__IO uint32_t*)(0x8008000); if(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)BUFFER_data, 11)!= HAL_OK) { Error_Handler(); } while (Address < FLASH_USER_END_ADDR) { data32 = *(__IO uint32_t*)Address; if (data32 != (uint32_t)DATA_32) { MemoryProgramStatus++; } Address = Address + 4; } if (MemoryProgramStatus == 0) { BSP_LED_On(LED3); UART_INT(); if(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)aTxBuffer, TXBUFFERSIZE)!= HAL_OK) { Error_Handler(); } } else { Error_Handler(); } while (1) { } } |
|
|
|
|
|
求IAR软件具体设置步骤,我的两台电脑都是无法用IAR软件显示内存里面具体的数据值,可能不是我的软件安装错误, 但是软件既然设计了这个功能,怎么可能荒废掉呢???求解决详细方法!
备注:我的IAR是7.2版本的,, |
|
|
|
|
|
没有人喜欢这么查询吗?
|
|
|
|
|
|
帮顶,估计没写入
|
|
|
|
|
|
我串口取的地址指针,就是flash的地址啊,是我的串口指针书写方式不对吗?
|
|
|
|
|
|
是不是被覆盖掉了的啊
|
|
|
|
|
|
没有用过,帮顶一下
|
|
|
|
|
|
你的IAR是什么版本?我用7.80.3,NUCLEO-L053R8,试了一下,能正常访问,反汇编也正常。如果Read Out Protection设置成Level 1,那没法调试。
|
|
|
|
|
|
是不是被覆盖掉了的啊
|
|
|
|
|
|
建议你换7.8的试试,
|
|
|
|
|
|
IAR没用过,Keil MDK下4G地址范围内随便查看。看你的样子,连RAM空间都无法显示呀,这不科学呀。
还是说说你的实验环境吧,硬件仿真,还是软件仿真,仿真器用的什么? |
|
|
|
|
|
没有用过IAR,只能帮楼主加人气了。
|
|
|
|
|
|
不清楚了。
|
|
|
|
|
|
1.很明显和IAR软件设置有关,如果你没有更改过什么东西的话,08000000放置的应该是vector table,我看你图中FLASH地址没有vector table。
2.你在里面说实验硬件现象无误,是指的能够利用串口输出正确数据的意思么? 3.IAR肯定是能够这么查询FLASH值的,唯一和FLASH设置有关的地方在IAR里面就只有这儿 |
|
|
|
|
|
请问LZ解决了吗 我也遇到了这个问题
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
651 浏览 0 评论
712 浏览 0 评论
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
4375 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
3176 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2629 浏览 0 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-10 04:49 , Processed in 1.147528 second(s), Total 104, Slave 87 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2609