完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
STM32F407VGT6 标准库
往Flash中写入数据,写入完成后再次读取,发现没有写入成功。printf 打印擦除和写入的步骤发现,返回的 FLASH_Status 都是 7。关于错误码,在网上找到的一些解释都比较模糊,没有具体的案例说明问题出现的原因和解决方案。 把其他的代码全部注释掉,只保留Flash和串口打印相关的代码,再次执行,发现返回值都是9,说明擦除和写入无异常。 请问出现这种问题的原因在哪里?如果是程序的问题,该从哪方面排查? 部分代码: /************************************************************************** *函 数:给指定地址写入指定长度的数据 *参 数: * @address:要写入数据的首地址 * @data:要写入的数据 * @len:数据长度 *备 注:要实现确保写入数据的区域没有写入其他数据,如果有,会执行全扇区的擦除, * 可能会导致其他数据丢失。 **************************************************************************/ void FLASH_WriteData(uint32_t address, uint8_t *data, uint32_t len) { uint32_t end_address = address + len; uint32_t index_address = address; if(index_address < FLASH_BASE_ADDRESS || index_address > FLASH_END_ADDRESS)//地址不合法 { return; } FLASH_Unlock(); FLASH_DataCacheCmd(DISABLE);//FLASH擦除期间,必须禁止数据缓存 while(index_address < end_address) { if(*(vu32*)index_address != 0xFFFFFFFF)//内容不为0xFFFFFFFF { FLASH_Status i = FLASH_EraseSector(FLASH_getSectorNum(index_address), VoltageRange_3);//擦除所在扇区 printf("Erase FLASH_Status: %dn", i); if(FLASH_getSectorNum(index_address) == FLASH_Sector_11)//是最后一个扇区 { break; } index_address = FLASH_getSectorHeadAddress(index_address) + FLASH_getSectorSize(index_address);//所在扇区已经擦除,直接跳转到下一个扇区的首地址 } else { index_address += 4; } } index_address = address; while(index_address < end_address)//按8bit大小写入数据 { FLASH_Status i = FLASH_ProgramByte(index_address, *data); printf("write FLASH_Status: %dn", i); index_address ++; data++; } FLASH_DataCacheCmd(ENABLE);//FLASH擦除期间,必须禁止数据缓存 FLASH_Lock(); } |
|
相关推荐
3个回答
|
|
|
擦除之前是否进行了擦除操作,另外,擦除的时候尽量关闭一下中断功能。
|
|
|
|
|
|
建议参考下例程的写法,按部就班来,这个是标准流程操作。
标准库里也有例程,写得很清晰的。 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0ProjectSTM32F4xx_StdPeriph_ExamplesFLASHFLASH_Program 先验证sector擦除是否成功; 然后验证单位数据的写操作; 再就是注意那些基本的信息给对,比方地址啊、扇区号等。 |
|
|
|
|
|
在STM32F407VGT6中使用标准库进行Flash写入时,如果写入失败,可能的原因有很多。以下是一些常见的原因和解决方案: 1. Flash锁状态
2. Flash擦除不彻底
3. 写入地址对齐问题
4. Flash写入过程中断
5. Flash保护位
6. 电压范围不正确
7. 硬件问题
8. 程序逻辑错误
9. Flash操作超时
10. 标准库函数使用错误
示例代码以下是一个简单的Flash写入示例: 总结通过以上步骤,可以逐步排查和解决STM32F407 Flash写入失败的问题。如果问题仍然存在,建议使用调试工具逐步跟踪代码执行过程,查看每一步的返回值和状态,以找到问题的根源。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
stm32mp157的异核通信的rpmsg_sdb的m4固件和a7驱动该如何编写?
1447 浏览 0 评论
stm32f103用freertos对一个采样率为1kHz的传感器,进行采样,数据出差
1494 浏览 0 评论
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
3641 浏览 1 评论
3834 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
2454 浏览 1 评论
STM32H7打开DCache后,出现了串口接收信息为空的现象,是哪里出了问题?
727浏览 5评论
用NANO STM32F103RBT6的开发板烧录不了是哪里出了问题?
658浏览 5评论
710浏览 5评论
外部中断触发类型为双边沿触发,进入中断回调后有什么办法判断该边沿是上升沿还是下降沿?
940浏览 5评论
STM32L071CBT6低温环境下无法正常工作是什么原因引起的?
744浏览 5评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 18:53 , Processed in 0.602072 second(s), Total 46, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3967