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 写入不成功问题相关推荐

  1. STM32 FLASH的写入与读取

    STM32 FLASH的写入与读取 解释下a = (u16)(add); u16 FLASH_R(u32 add){ //参数1:FLASH地址(32位)u16 a;a = *(u16*)(add); ...

  2. STM32使用片内FLASH制作小U盘(STM32+FLASH+MSC)

    STM32使用片内FLASH制作U盘(STM32+FLASH+MSC) 配套代码 https://download.csdn.net/download/qq_40824852/84998391 文章目 ...

  3. (39)STM32——FLASH闪存

    目录 学习目标 成果展示 介绍 组成 主存储器 系统存储器 OTP 区域 选项字节 读取 编程 寄存器 步骤 擦除 扇区擦除 批量擦除 寄存器 代码 总结 学习目标 本节我们要来介绍一下关于FLASH ...

  4. STM32L071 Flash写入的数据进行CRC-CCITT校验

    Flash写入校验采用采用16位循环冗余校验码CRC-CCITT: /*---------------------------------------------- --功能: 字节查表法求CRC - ...

  5. 解决Iframe嵌入帆软BI系统后,Chrome升级后跨域出现登录界面,Cookie写入不成功。

    1 先看效果: cookie写入不成功,是因为google chrome的高版本为了防止CSRF 攻击,默认将Cookie的SameSite设置为lax了,导致cookie跨域的时候就写不成功了.如果 ...

  6. STM32F103C8T6通过内部Flash写入读取数据,模拟EEPROM(附代码)

    STM32F103C8T6通过内部Flash写入读取数据,模拟EEPROM(附代码) 优点: 1. 模块化编程,方便移植,集成度高: 2. 拿来直接用 Flash空间定定义 主函数初始化已经Flash ...

  7. [单片机][cx32][填坑日记] 从AC5到AC6 flash写入功能异常

    通过keil ide 把编译换成AC6,发现flash写入失效了,通过仿真发现,栈数据全部异常了(错位).于是找到了uint64_td导致的异常. 先看看修复内容:

  8. STM32 Flash 永久用户数据空间

    /*********************************************************************************  *               ...

  9. 用keil怎么擦除_分享STM32 FLASH 擦除(以及防止误擦除程序代码)、写入

    编译环境:我用的是(Keil)MDK4.7.2 stm32库版本:我用的是3.5.0 一.本文不对FLASH的基础知识做详细的介绍,不懂得地方请查阅有关资料. 对STM32 内部FLASH进行编程操作 ...

最新文章

  1. 怎么判断膝关节错位_路走多了,膝盖疼是怎么回事?
  2. UBOOT 2011-3版本分析(初步感受)
  3. 【深度学习】3D深度学习简介
  4. UI设计干货素材|滑动动效设计模板
  5. Delphi XE7下如何创建一个Android模拟器调试?
  6. recvmsg和sendmsg函数
  7. 【Spring基础】CGLIB动态代理实现原理
  8. 基于python的爬虫毕业论文_基于python网络爬虫及数据处理毕业论文 相关实例(示例源码)下载 - 好例子网...
  9. phpstudy开机自启
  10. POI java.lang.IllegalArgumentException: Merged region xxx must contain 2 or more cells问题解决
  11. 关注可视化H5设计(待补充……)
  12. 如何在线把pdf转换成word转换器
  13. Spark GraphX下强连通子图和社团发现算法在1T TPC-DS数据集下执行方法、优化和性能估算
  14. Android自定义控件---仿微信群聊(九宫格)头像
  15. QQ个人文件夹保存位置无效
  16. ** ERROR (nifti_image_write_hdr_img2): cannot open output file
  17. 输入法(IME)实现原理
  18. 首届实时渲染3D动画创作大赛结果公布,看大奖英伟达A6000花落谁家
  19. 专访首汽租车魏东:人工智能时代,车不再只是机械设备,而是“第三空间”
  20. jQuery(插件)

热门文章

  1. 影之诗闪卡动图_影之诗怎么制作闪卡_闪卡的制作方法_软吧
  2. 通过jQuery的slideToggle()方法实现元素的显示隐藏时,利用当前ul元素display的值判断状态遇到的问题
  3. pandas.pivot()函数的使用
  4. 免费电话会议的盈利模式
  5. 功能强大的JavaScript引擎--SpiderMonkey
  6. ASIO4ALL是什么
  7. lucene初探(-):lucene基本,实现文件查找
  8. web上传整个文件夹
  9. Qt 窗口操作函数(置顶、全屏,最大化最小化按钮设置等)
  10. mingw使用libev