STM32 FLASH 写入不成功问题
STM32 FLASH 写入不成功问题
- STM32 FLASH 写入不成功问题
STM32 FLASH 写入不成功问题
遇到一个很奇怪的问题,我从STM32FLASH的0x08024000开始往进些数据,每包1000个字节,前两包写入正常,但是到第三包写入数据的时候发现写入falsh的数据不完整,到0x0247fB这块后后面都是ff没写进去数据,stn32f103rc是256kb啊,为什么写不进去了,很郁闷。
仔细的查看代码后发现,我的FLASH写入的程序是使用的原子的程序,STM32F103RCT6为256个字节
每一页有2K,前两包没有问题是因为没有超出2K,没有进行跨页操作,所以导致第三包只写进去了48个字节,导致后面全是FF,没有写进去,将代码改为每包1024个字节后,每包数据都正常了,都可以写入FLASH。
代码片
.
// An highlighted block
var foo = 'bar';
``void STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite)
{u32 secpos; //扇区地址u16 secoff; //扇区内偏移地址(16位字计算)u16 secremain; //扇区内剩余地址(16位字计算) u16 i; u32 offaddr; //去掉0X08000000后的地址if(WriteAddr<STM32_FLASH_BASE||(WriteAddr>=(STM32_FLASH_BASE+1024*STM32_FLASH_SIZE)))return;//非法地址FLASH_Unlock(); //解锁offaddr=WriteAddr-STM32_FLASH_BASE; //实际偏移地址.secpos=offaddr/STM_SECTOR_SIZE; //扇区地址 0~127 for STM32F103RBT6secoff=(offaddr%STM_SECTOR_SIZE)/2; //在扇区内的偏移(2个字节为基本单位.)secremain=STM_SECTOR_SIZE/2-secoff; //扇区剩余空间大小 if(NumToWrite<=secremain)secremain=NumToWrite;//不大于该扇区范围while(1) { STMFLASH_Read(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);//读出整个扇区的内容for(i=0;i<secremain;i++)//校验数据{if(STMFLASH_BUF[secoff+i]!=0XFFFF)break;//需要擦除 }if(i<secremain)//需要擦除{FLASH_ErasePage(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE);//擦除这个扇区for(i=0;i<secremain;i++)//复制{STMFLASH_BUF[i+secoff]=pBuffer[i]; }STMFLASH_Write_NoCheck(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);//写入整个扇区 }else STMFLASH_Write_NoCheck(WriteAddr,pBuffer,secremain);//写已经擦除了的,直接写入扇区剩余区间. if(NumToWrite==secremain)break;//写入结束了else//写入未结束{secpos++; //扇区地址增1secoff=0; //偏移位置为0 pBuffer+=secremain; //指针偏移WriteAddr+=secremain; //写地址偏移 NumToWrite-=secremain; //字节(16位)数递减if(NumToWrite>(STM_SECTOR_SIZE/2))secremain=STM_SECTOR_SIZE/2;//下一个扇区还是写不完else secremain=NumToWrite;//下一个扇区可以写完了} }; FLASH_Lock();//上锁
}
STM32 FLASH 写入不成功问题相关推荐
- STM32 FLASH的写入与读取
STM32 FLASH的写入与读取 解释下a = (u16)(add); u16 FLASH_R(u32 add){ //参数1:FLASH地址(32位)u16 a;a = *(u16*)(add); ...
- STM32使用片内FLASH制作小U盘(STM32+FLASH+MSC)
STM32使用片内FLASH制作U盘(STM32+FLASH+MSC) 配套代码 https://download.csdn.net/download/qq_40824852/84998391 文章目 ...
- (39)STM32——FLASH闪存
目录 学习目标 成果展示 介绍 组成 主存储器 系统存储器 OTP 区域 选项字节 读取 编程 寄存器 步骤 擦除 扇区擦除 批量擦除 寄存器 代码 总结 学习目标 本节我们要来介绍一下关于FLASH ...
- STM32L071 Flash写入的数据进行CRC-CCITT校验
Flash写入校验采用采用16位循环冗余校验码CRC-CCITT: /*---------------------------------------------- --功能: 字节查表法求CRC - ...
- 解决Iframe嵌入帆软BI系统后,Chrome升级后跨域出现登录界面,Cookie写入不成功。
1 先看效果: cookie写入不成功,是因为google chrome的高版本为了防止CSRF 攻击,默认将Cookie的SameSite设置为lax了,导致cookie跨域的时候就写不成功了.如果 ...
- STM32F103C8T6通过内部Flash写入读取数据,模拟EEPROM(附代码)
STM32F103C8T6通过内部Flash写入读取数据,模拟EEPROM(附代码) 优点: 1. 模块化编程,方便移植,集成度高: 2. 拿来直接用 Flash空间定定义 主函数初始化已经Flash ...
- [单片机][cx32][填坑日记] 从AC5到AC6 flash写入功能异常
通过keil ide 把编译换成AC6,发现flash写入失效了,通过仿真发现,栈数据全部异常了(错位).于是找到了uint64_td导致的异常. 先看看修复内容:
- STM32 Flash 永久用户数据空间
/********************************************************************************* * ...
- 用keil怎么擦除_分享STM32 FLASH 擦除(以及防止误擦除程序代码)、写入
编译环境:我用的是(Keil)MDK4.7.2 stm32库版本:我用的是3.5.0 一.本文不对FLASH的基础知识做详细的介绍,不懂得地方请查阅有关资料. 对STM32 内部FLASH进行编程操作 ...
最新文章
- 怎么判断膝关节错位_路走多了,膝盖疼是怎么回事?
- UBOOT 2011-3版本分析(初步感受)
- 【深度学习】3D深度学习简介
- UI设计干货素材|滑动动效设计模板
- Delphi XE7下如何创建一个Android模拟器调试?
- recvmsg和sendmsg函数
- 【Spring基础】CGLIB动态代理实现原理
- 基于python的爬虫毕业论文_基于python网络爬虫及数据处理毕业论文 相关实例(示例源码)下载 - 好例子网...
- phpstudy开机自启
- POI java.lang.IllegalArgumentException: Merged region xxx must contain 2 or more cells问题解决
- 关注可视化H5设计(待补充……)
- 如何在线把pdf转换成word转换器
- Spark GraphX下强连通子图和社团发现算法在1T TPC-DS数据集下执行方法、优化和性能估算
- Android自定义控件---仿微信群聊(九宫格)头像
- QQ个人文件夹保存位置无效
- ** ERROR (nifti_image_write_hdr_img2): cannot open output file
- 输入法(IME)实现原理
- 首届实时渲染3D动画创作大赛结果公布,看大奖英伟达A6000花落谁家
- 专访首汽租车魏东:人工智能时代,车不再只是机械设备,而是“第三空间”
- jQuery(插件)
热门文章
- 影之诗闪卡动图_影之诗怎么制作闪卡_闪卡的制作方法_软吧
- 通过jQuery的slideToggle()方法实现元素的显示隐藏时,利用当前ul元素display的值判断状态遇到的问题
- pandas.pivot()函数的使用
- 免费电话会议的盈利模式
- 功能强大的JavaScript引擎--SpiderMonkey
- ASIO4ALL是什么
- lucene初探(-):lucene基本,实现文件查找
- web上传整个文件夹
- Qt 窗口操作函数(置顶、全屏,最大化最小化按钮设置等)
- mingw使用libev