2306|2

1234

帖子

4

TA的资源

纯净的硅(高级)

楼主
 

简单说下IAP [复制链接]

  
  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, 下载次数: 32)

SD卡IAP:

SD卡IAP.rar (2.98 MB, 下载次数: 27)

CAN总线 IAP:
   CAN-Bootloader-master.zip (9.04 MB, 下载次数: 41)
还有对应这个的上位机
   
链接已隐藏,如需查看请登录或者注册


稍微涉猎下,就会发现,这些IAP都有一个通性,都是将内部flash分成两个区,一个bootloader区,一个用户APP区,程序一上上电,肯定先执行bootloader区的程序,在这里,先等待几秒钟,是否有升级命令,没有就判断APP区是不是可以执行的,是就跳转,不是就一直等待,有升级命令,就执行升级。升级完成,检查一下,开始跳转到APP区,那里将是一个无限循环。可以加命令跳转到bootloader区,重新操作。值得注意的是,烧写flash时,一定要知道自己烧录到了哪一块里面了。




此帖出自stm32/stm8论坛

最新回复

刚好学习学习  详情 回复 发表于 2017-6-23 16:37
点赞 关注(1)
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 

回复
举报

143

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
不错,感谢分享
此帖出自stm32/stm8论坛
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
刚好学习学习
此帖出自stm32/stm8论坛
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
ADI &文晔 探索季第一站,邀您在活动帖跟帖,ADI资深工程师将与您一道寻求解决之道! ...
春晚,最出圈当属穿着棉马甲跳秧歌的机器人”秧Bot”。
转手绢、飞手绢、变换队形,精准度和稳定性甚至超越人类,这背后少不了电机控制技术。

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表