久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 22898|回復: 58
收起左側

STM32在線升級IAP功能-全部軟件(帶IAP下載器)

  [復制鏈接]
ID:213394 發表于 2017-6-21 16:19 | 顯示全部樓層 |閱讀模式
win7下面的IAP下載器上位機程序:
0.png
0.png 0.png

STM32單片機iap源程序如下:
  1. #include "iap.h"

  2. #define FLASH_APP1_ADDR                0x08002000          //第一個應用程序起始地址(存放在FLASH)
  3.                                                                                         //保留的空間為IAP使用

  4. u16 iapbuf[1024] = {0}; //用于緩存數據的數組
  5. u16 receiveDataCur = 0;        //當前iapbuffer中已經填充的數據長度,一次填充滿了之后寫入flash并清零
  6. u32 addrCur = FLASH_APP1_ADDR;                        //當前系統寫入地址,每次寫入之后地址增加2048

  7. //開始下載
  8. void iap_down_s(void)
  9. {
  10.         u16 i = 0;
  11.         u16 temp = 0;
  12.         u16 receiveCount;
  13.         printf("begin,wait data download\r\n");
  14.         receiveMode = 1;//串口進入下載接收數據模式
  15.         while(1)
  16.         {
  17.                 //循環接收數據,每次必須要發128個數據下來,如果沒有128,說明這是最后一包數據
  18.                 //接收到一包數據之后,返回一個小數點,發送完成,系統編程完成之后返回一個iap_over
  19.                 if(serial_Buffer_Length & 0x8000)
  20.                 {
  21.                         receiveCount = (u8)(serial_Buffer_Length&0x00ff);
  22.                         if(receiveCount == 128)//滿足一包,填充并查看是否有了1024字節,有了寫入閃存
  23.                         {
  24.                                 for(i = 0; i < receiveCount; i+=2)
  25.                                 {
  26.                                         //數據八位融合為16位
  27.                                         temp = (((u16)serial_Buffer[i+1])<<8) + ((u16)serial_Buffer[i]);
  28.                                         iapbuf[receiveDataCur] = temp;
  29.                                         receiveDataCur++;//完成之后receiveDataCur++;
  30.                                 }
  31.                                 receiveExpectCount = 0;//清除期望接收模式
  32.                                 serial_Buffer_Length = 0;//清除串口滿標志
  33.                                 printf(".");//每次接受一次數據打一個點
  34.                                 //此時需要檢測receiveDataCur的值,要是放滿了,就需要寫入
  35.                                 if(receiveDataCur == 1024)
  36.                                 {
  37.                                         //寫入flash中
  38.                                         STMFLASH_Write(addrCur,iapbuf,1024);
  39.                                         //printf("\r\nwrite addr %x,length 1024\r\n",addrCur);
  40.                                         addrCur += 2048;//地址+2048
  41.                                         //寫完之后receiveDataCur要清零等待下一次傳輸
  42.                                         receiveDataCur = 0;
  43.                                 }
  44.                                 else //有可能最后一包有128個數據但是最終沒有2048個數據,此時擴展一個指令用于完成最后一個的寫入
  45.                                 {
  46.                                        
  47.                                 }
  48.                                 //還沒放滿,等待下一次數據過來
  49.                         }
  50.                         else        //不滿足一包,說明數據傳送這是最后一包,寫入閃存
  51.                         {
  52.                                 //沒有一包也要傳送到緩存中
  53.                                 for(i = 0; i < receiveCount; i+=2)
  54.                                 {
  55.                                         //數據八位融合為16位
  56.                                         temp = (((u16)serial_Buffer[i+1])<<8) + ((u16)serial_Buffer[i]);
  57.                                         iapbuf[receiveDataCur] = temp;
  58.                                         receiveDataCur++;//完成之后receiveDataCur++;
  59.                                 }
  60.                                 receiveExpectCount = 0;//清除期望接收模式
  61.                                 serial_Buffer_Length = 0;//清除串口滿標志
  62.                                 printf(".");//每次接受一次數據打一個點
  63.                                 //之后就要將這數據寫入到閃存中
  64.                                 STMFLASH_Write(addrCur,iapbuf,receiveDataCur);//將最后的一些內容字節寫進去.
  65.                                 //printf("\r\nwrite addr %x,length %d\r\n",addrCur,receiveDataCur);
  66.                                 //寫完之后要把地址恢復到原來的位置
  67.                                 addrCur = FLASH_APP1_ADDR;
  68.                                 receiveDataCur = 0;
  69.                                 //寫完之后要退出下載循環并告訴上位機,已經下載完了
  70.                                 printf("download over\r\n");
  71.                                 //同時,也要退出下載循環模式
  72.                                 receiveMode = 0;
  73.                                 return;
  74.                         }
  75.                 }
  76.         }
  77. }
  78. //最后一包有128個數據但是最終沒有2048個數據
  79. //收到這個指令檢測receiveDataCur和addrCur的值,
  80. //完成最后的寫入
  81. void iap_over_s(void)
  82. {
  83.         //這個時候,依然在串口下載模式
  84.         if(receiveDataCur != 0)
  85.         {
  86.                 STMFLASH_Write(addrCur,iapbuf,receiveDataCur);//將最后的一些內容字節寫進去.
  87.                 //printf("write addr %x,length %d",addrCur,receiveDataCur);
  88.                 addrCur = FLASH_APP1_ADDR;
  89.                 receiveDataCur = 0;
  90.                 //同時,也要退出下載模式
  91.                 receiveMode = 0;
  92.         }
  93.         printf("ok\r\n");
  94. }


  95. typedef  void (*iapfun)(void);                                //定義一個函數類型的參數.
  96. iapfun jump2app;

  97. //設置棧頂地址
  98. //addr:棧頂地址
  99. __asm void MSR_MSP(u32 addr)
  100. {
  101.     MSR MSP, r0                         //set Main Stack value
  102.     BX r14
  103. }

  104. //跳轉到應用程序段
  105. //appxaddr:用戶代碼起始地址.
  106. void iap_load_app(u32 appxaddr)
  107. {
  108.         if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)        //檢查棧頂地址是否合法.0x20000000是sram的起始地址,也是程序的棧頂地址
  109.         {
  110.                 printf("ok\r\n");
  111.                 Delay_Ms(10);
  112.                 jump2app=(iapfun)*(vu32*)(appxaddr+4);                //用戶代碼區第二個字為程序開始地址(復位地址)               
  113.                 MSR_MSP(*(vu32*)appxaddr);                                        //初始化APP堆棧指針(用戶代碼區的第一個字用于存放棧頂地址)
  114.                 jump2app();                                                                        //跳轉到APP.
  115.         }
  116.         else
  117.         {
  118.                 printf("program in flash is error\r\n");
  119.         }
  120. }

  121. //跳轉到app區域運行
  122. void iap_jump_app_s(void)
  123. {
  124.         iap_load_app(FLASH_APP1_ADDR);//跳轉到app的復位向量地址
  125. }



  126. //設置app固化配置
  127. void iap_set_flag_s(void)
  128. {
  129.         Test_Write(APP_CONFIG_ADDR,APP_CONFIG_SET_VALUE);
  130.         printf("ok\r\n");
  131. }

  132. //清除app固化配置
  133. void iap_clear_flag(void)
  134. {
  135. ……………………

  136. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png
所有資料51hei提供下載:
STM32在線升級IAP功能-全部軟件.rar (1016.3 KB, 下載次數: 759)

評分

參與人數 2黑幣 +10 收起 理由
fanmeng11 + 5 贊一個!
hk18774830405 + 5 厲害

查看全部評分

回復

使用道具 舉報

ID:227842 發表于 2017-8-16 08:45 | 顯示全部樓層
下來看看 多謝樓主
回復

使用道具 舉報

ID:143047 發表于 2017-8-16 13:11 | 顯示全部樓層
感謝分享啊,正是我想要的
回復

使用道具 舉報

ID:232350 發表于 2017-9-11 15:08 | 顯示全部樓層
黑幣不夠,能否私發一份
回復

使用道具 舉報

ID:79631 發表于 2017-10-17 16:50 | 顯示全部樓層
頂樓主,正在找這方面的資料
回復

使用道具 舉報

ID:40927 發表于 2017-12-13 10:39 | 顯示全部樓層
下載看看先啊@@@@
回復

使用道具 舉報

ID:261411 發表于 2017-12-14 10:00 | 顯示全部樓層
上位機器是用什么語言寫的呀
回復

使用道具 舉報

ID:236912 發表于 2017-12-23 14:59 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:266000 發表于 2017-12-24 12:23 | 顯示全部樓層
正在找這
回復

使用道具 舉報

ID:265966 發表于 2017-12-24 18:10 | 顯示全部樓層
能直接用么?
回復

使用道具 舉報

ID:268969 發表于 2017-12-29 18:13 | 顯示全部樓層

你好,能發一份給我嗎?郵箱:785805660@qq.com, 感謝!
回復

使用道具 舉報

ID:268969 發表于 2017-12-29 18:13 | 顯示全部樓層
song823 發表于 2017-8-16 08:45
**** 作者被禁止或刪除 內容自動屏蔽 ****

你好,能發一份給我嗎?郵箱:785805660@qq.com, 感謝!
回復

使用道具 舉報

ID:268969 發表于 2017-12-29 18:14 | 顯示全部樓層
z_z_j 發表于 2017-8-16 13:11
感謝分享啊,正是我想要的

你好,能發一份給我嗎?郵箱:785805660@qq.com, 感謝!
回復

使用道具 舉報

ID:271230 發表于 2018-1-4 10:27 | 顯示全部樓層
正需要這樣的東西!!!!
回復

使用道具 舉報

ID:260390 發表于 2018-1-4 14:56 | 顯示全部樓層
下來看看 多謝樓主
回復

使用道具 舉報

ID:279164 發表于 2018-1-24 10:20 | 顯示全部樓層
感謝分享!
回復

使用道具 舉報

ID:290949 發表于 2018-3-12 20:08 | 顯示全部樓層

感謝分享!
回復

使用道具 舉報

ID:230678 發表于 2018-3-28 14:03 | 顯示全部樓層
app 軟件點擊哪個下載啊?
回復

使用道具 舉報

ID:230678 發表于 2018-3-28 23:38 | 顯示全部樓層
iap跳app程序的時候,直接跳這里了,不知道什么原因啊?有沒有人遇到這個問題。

void HardFault_Handler(void)
{
  /* Go to infinite loop when Hard Fault exception occurs */
  while (1)
  {
  }
}
回復

使用道具 舉報

ID:264334 發表于 2018-3-29 10:00 | 顯示全部樓層
好東西,感謝分享
回復

使用道具 舉報

ID:223959 發表于 2018-4-19 11:06 | 顯示全部樓層
       學習學習,多謝分享!
回復

使用道具 舉報

ID:319023 發表于 2018-5-4 16:07 | 顯示全部樓層
IAP 控制組,寫入APP固化配置怎么用?  
回復

使用道具 舉報

ID:322438 發表于 2018-5-4 22:19 | 顯示全部樓層
謝謝樓主的無私分享
回復

使用道具 舉報

ID:319023 發表于 2018-5-9 17:03 | 顯示全部樓層
存儲器128K  的好像不兼容??
回復

使用道具 舉報

ID:326896 發表于 2018-5-10 15:39 | 顯示全部樓層
想用在其他單片機上,先下來參考一下
回復

使用道具 舉報

ID:326896 發表于 2018-5-11 09:02 | 顯示全部樓層
下不了。。。
回復

使用道具 舉報

ID:391656 發表于 2018-8-30 16:26 | 顯示全部樓層
這個上位機有BUG,不能修改波特率,只能使用115200,改成別的波特率沒用。
找過這個上位機的資料,想自己修改來著,沒找到。。。
回復

使用道具 舉報

ID:395711 發表于 2018-9-9 19:24 | 顯示全部樓層
,正在網上找這個資料哦,下來先試試看!
回復

使用道具 舉報

ID:124003 發表于 2018-10-15 11:39 | 顯示全部樓層
這個厲害了,學習一下
回復

使用道具 舉報

ID:87577 發表于 2018-10-26 09:13 | 顯示全部樓層
很棒的東西,謝謝樓主分享
回復

使用道具 舉報

ID:81544 發表于 2018-11-5 09:32 | 顯示全部樓層
好東西
回復

使用道具 舉報

ID:328121 發表于 2018-11-5 13:02 | 顯示全部樓層
謝謝分享,學習中
回復

使用道具 舉報

ID:368791 發表于 2018-11-6 22:34 來自手機 | 顯示全部樓層
感謝分享!!!
回復

使用道具 舉報

ID:426861 發表于 2018-11-23 16:28 | 顯示全部樓層
論壇好多資料都很好,但是黑幣總是不夠用啊
回復

使用道具 舉報

ID:396960 發表于 2018-12-7 09:15 | 顯示全部樓層
灰常感謝。。。
回復

使用道具 舉報

ID:449525 發表于 2019-1-29 14:21 | 顯示全部樓層
可以用的,只是上位機的源碼,能提供下么
回復

使用道具 舉報

ID:474311 發表于 2019-1-31 11:31 | 顯示全部樓層
正需要,謝謝
回復

使用道具 舉報

ID:219315 發表于 2019-3-14 15:48 | 顯示全部樓層
好東西啊,找了好久終于找到了!
回復

使用道具 舉報

ID:414697 發表于 2019-3-25 10:21 | 顯示全部樓層
多謝樓主,很有用
回復

使用道具 舉報

ID:82586 發表于 2019-4-21 14:20 | 顯示全部樓層
感謝分享啊,正想要
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区欧美 | 色999视频| а_天堂中文最新版地址 | 91精品在线观看入口 | 伊人久久精品一区二区三区 | 国产一二三区精品视频 | www成人啪啪18 | 在线黄色网 | 99久久精品国产一区二区三区 | 成人在线欧美 | 成年人免费在线视频 | 性色网站| 在线视频一区二区三区 | 欧美亚洲高清 | 福利视频网 | 精品久久久久久久久久久下田 | 国产日韩欧美激情 | 成人午夜在线 | 九九久久精品 | 免费在线观看一级毛片 | 在线观看国产视频 | 2021狠狠干 | 欧美aⅴ| 久久国产区 | 国产视频在线观看一区二区三区 | av中文网 | 日韩精品一区二区久久 | 无码国模国产在线观看 | 欧美aaaaaaaaaa | 99久久久无码国产精品 | 精品国产一区二区三区久久久蜜月 | 狠狠亚洲| 狠狠操电影 | 国产精品久久一区二区三区 | 毛片一级片 | 国产美女特级嫩嫩嫩bbb片 | 亚洲国产精久久久久久久 | 亚洲一区 中文字幕 | 99re在线视频观看 | 国产精品久久久久一区二区三区 | 中文字幕精品视频 |