社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 652|回复: 2

[经验] 简单说下IAP

[复制链接]

1234

TA的帖子

4

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

发表于 2017-3-21 09:56:17 | 显示全部楼层 |阅读模式
  
  1. #define                PAGE_ADDR                                (0x08000000 + 63 * 1024)
复制代码
  1. uint8 MemReadByte(uint16 *data,uint16 num)
  2. {
  3.         uint16 *temp_addr = (uint16 *)PAGE_ADDR;
  4.         
  5.         while(num --)
  6.         {
  7.                 *data ++ = *temp_addr ++;
  8.         }
  9.                                                                                                         
  10.         return 1;                                                                                                        
  11. }
复制代码
  1. uint8 MemWriteByte(uint16 *data,uint16 num)
  2. {
  3.         FLASH_Status temp_stat;
  4.         uint32 temp_addr = PAGE_ADDR;
  5.                
  6.         FLASH_Unlock();                                                                                                        // Flash解锁,允许操作相关的寄存器
  7.         temp_stat = FLASH_ErasePage(PAGE_ADDR);                                                        // 擦出制定的页
  8.         
  9.         if(temp_stat != FLASH_COMPLETE)
  10.         {
  11.                 FLASH_Lock();
  12.                 return 0;
  13.         }
  14.         
  15.         while(num --)
  16.         {
  17.                 temp_stat = FLASH_ProgramHalfWord(temp_addr,*data);
  18.                 if(temp_stat != FLASH_COMPLETE)
  19.                 {
  20.                         FLASH_Lock();
  21.                         return 0;
  22.                 }
  23.         
  24.                 temp_addr += 2;
  25.                 data++;
  26.         }
  27.         
  28.         FLASH_Lock();        
  29.         return 1;
  30. }
复制代码
  1. #include "app_cfg.h"                                       

  2. uint16        write_buf[10] = {0,1,2,3,4,5,6,7,8,9};

  3. int main(void)
  4. {
  5.         uint16 cnt;
  6.                
  7.            STM32Init();  
  8.         
  9.         MemWriteByte(write_buf,10);  
  10.         for(cnt = 0;cnt < 10;cnt ++)
  11.         {
  12.                 write_buf[cnt] = 11;
  13.         }
  14.         MemReadByte(write_buf,10);
  15.          
  16.     while(1)                                                                          
  17.     {
  18.         ;        
  19.     }  
  20. }
复制代码


呵 先用别人的代码来开门见山,看的懂的一眼就知道这段代码是干嘛的,看不懂的,我这就简单介绍下,这是一段动态操作stm32内部flash的程序,内部flash,不仅仅是作为程序的烧录,也可以作为一些少量且重要的信息的动态存储,放心,操作得当,掉电不丢失。(注意,添加官方的flash头文件)

正是因为程序在运行时可以动态的擦除自身的flash,才有了这么多的IAP。(这句话,说的自己都有点含糊,你们就将就的看吧),程序是最好的老师,我也不多说废话,收集了一些IAP的例程。

串口IAP:
   各大开发板的例程都有,并且有见解 就不分享了

U盘IAP:
   U盘IAP.rar (914.02 KB, 下载次数: 25)
天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友


回复

使用道具 举报

108

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-3-22 09:14:54 | 显示全部楼层
不错,感谢分享


回复

使用道具 举报

12

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-6-23 16:37:32 | 显示全部楼层
刚好学习学习


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-4-27 14:34 , Processed in 0.104702 second(s), 18 queries , Redis On.

快速回复 返回顶部 返回列表