欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 24559|回復(fù): 58
打印 上一主題 下一主題
收起左側(cè)

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

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
#
win7下面的IAP下載器上位機(jī)程序:



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

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

  4. u16 iapbuf[1024] = {0}; //用于緩存數(shù)據(jù)的數(shù)組
  5. u16 receiveDataCur = 0;        //當(dāng)前iapbuffer中已經(jīng)填充的數(shù)據(jù)長(zhǎng)度,一次填充滿了之后寫(xiě)入flash并清零
  6. u32 addrCur = FLASH_APP1_ADDR;                        //當(dāng)前系統(tǒng)寫(xiě)入地址,每次寫(xiě)入之后地址增加2048

  7. //開(kāi)始下載
  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;//串口進(jìn)入下載接收數(shù)據(jù)模式
  15.         while(1)
  16.         {
  17.                 //循環(huán)接收數(shù)據(jù),每次必須要發(fā)128個(gè)數(shù)據(jù)下來(lái),如果沒(méi)有128,說(shuō)明這是最后一包數(shù)據(jù)
  18.                 //接收到一包數(shù)據(jù)之后,返回一個(gè)小數(shù)點(diǎn),發(fā)送完成,系統(tǒng)編程完成之后返回一個(gè)iap_over
  19.                 if(serial_Buffer_Length & 0x8000)
  20.                 {
  21.                         receiveCount = (u8)(serial_Buffer_Length&0x00ff);
  22.                         if(receiveCount == 128)//滿足一包,填充并查看是否有了1024字節(jié),有了寫(xiě)入閃存
  23.                         {
  24.                                 for(i = 0; i < receiveCount; i+=2)
  25.                                 {
  26.                                         //數(shù)據(jù)八位融合為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;//清除串口滿標(biāo)志
  33.                                 printf(".");//每次接受一次數(shù)據(jù)打一個(gè)點(diǎn)
  34.                                 //此時(shí)需要檢測(cè)receiveDataCur的值,要是放滿了,就需要寫(xiě)入
  35.                                 if(receiveDataCur == 1024)
  36.                                 {
  37.                                         //寫(xiě)入flash中
  38.                                         STMFLASH_Write(addrCur,iapbuf,1024);
  39.                                         //printf("\r\nwrite addr %x,length 1024\r\n",addrCur);
  40.                                         addrCur += 2048;//地址+2048
  41.                                         //寫(xiě)完之后receiveDataCur要清零等待下一次傳輸
  42.                                         receiveDataCur = 0;
  43.                                 }
  44.                                 else //有可能最后一包有128個(gè)數(shù)據(jù)但是最終沒(méi)有2048個(gè)數(shù)據(jù),此時(shí)擴(kuò)展一個(gè)指令用于完成最后一個(gè)的寫(xiě)入
  45.                                 {
  46.                                        
  47.                                 }
  48.                                 //還沒(méi)放滿,等待下一次數(shù)據(jù)過(guò)來(lái)
  49.                         }
  50.                         else        //不滿足一包,說(shuō)明數(shù)據(jù)傳送這是最后一包,寫(xiě)入閃存
  51.                         {
  52.                                 //沒(méi)有一包也要傳送到緩存中
  53.                                 for(i = 0; i < receiveCount; i+=2)
  54.                                 {
  55.                                         //數(shù)據(jù)八位融合為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;//清除串口滿標(biāo)志
  62.                                 printf(".");//每次接受一次數(shù)據(jù)打一個(gè)點(diǎn)
  63.                                 //之后就要將這數(shù)據(jù)寫(xiě)入到閃存中
  64.                                 STMFLASH_Write(addrCur,iapbuf,receiveDataCur);//將最后的一些內(nèi)容字節(jié)寫(xiě)進(jìn)去.
  65.                                 //printf("\r\nwrite addr %x,length %d\r\n",addrCur,receiveDataCur);
  66.                                 //寫(xiě)完之后要把地址恢復(fù)到原來(lái)的位置
  67.                                 addrCur = FLASH_APP1_ADDR;
  68.                                 receiveDataCur = 0;
  69.                                 //寫(xiě)完之后要退出下載循環(huán)并告訴上位機(jī),已經(jīng)下載完了
  70.                                 printf("download over\r\n");
  71.                                 //同時(shí),也要退出下載循環(huán)模式
  72.                                 receiveMode = 0;
  73.                                 return;
  74.                         }
  75.                 }
  76.         }
  77. }
  78. //最后一包有128個(gè)數(shù)據(jù)但是最終沒(méi)有2048個(gè)數(shù)據(jù)
  79. //收到這個(gè)指令檢測(cè)receiveDataCur和addrCur的值,
  80. //完成最后的寫(xiě)入
  81. void iap_over_s(void)
  82. {
  83.         //這個(gè)時(shí)候,依然在串口下載模式
  84.         if(receiveDataCur != 0)
  85.         {
  86.                 STMFLASH_Write(addrCur,iapbuf,receiveDataCur);//將最后的一些內(nèi)容字節(jié)寫(xiě)進(jìn)去.
  87.                 //printf("write addr %x,length %d",addrCur,receiveDataCur);
  88.                 addrCur = FLASH_APP1_ADDR;
  89.                 receiveDataCur = 0;
  90.                 //同時(shí),也要退出下載模式
  91.                 receiveMode = 0;
  92.         }
  93.         printf("ok\r\n");
  94. }


  95. typedef  void (*iapfun)(void);                                //定義一個(gè)函數(shù)類(lèi)型的參數(shù).
  96. iapfun jump2app;

  97. //設(shè)置棧頂?shù)刂?br />
  98. //addr:棧頂?shù)刂?br />
  99. __asm void MSR_MSP(u32 addr)
  100. {
  101.     MSR MSP, r0                         //set Main Stack value
  102.     BX r14
  103. }

  104. //跳轉(zhuǎn)到應(yīng)用程序段
  105. //appxaddr:用戶代碼起始地址.
  106. void iap_load_app(u32 appxaddr)
  107. {
  108.         if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)        //檢查棧頂?shù)刂肥欠窈戏?0x20000000是sram的起始地址,也是程序的棧頂?shù)刂?br />
  109.         {
  110.                 printf("ok\r\n");
  111.                 Delay_Ms(10);
  112.                 jump2app=(iapfun)*(vu32*)(appxaddr+4);                //用戶代碼區(qū)第二個(gè)字為程序開(kāi)始地址(復(fù)位地址)               
  113.                 MSR_MSP(*(vu32*)appxaddr);                                        //初始化APP堆棧指針(用戶代碼區(qū)的第一個(gè)字用于存放棧頂?shù)刂?
  114.                 jump2app();                                                                        //跳轉(zhuǎn)到APP.
  115.         }
  116.         else
  117.         {
  118.                 printf("program in flash is error\r\n");
  119.         }
  120. }

  121. //跳轉(zhuǎn)到app區(qū)域運(yùn)行
  122. void iap_jump_app_s(void)
  123. {
  124.         iap_load_app(FLASH_APP1_ADDR);//跳轉(zhuǎn)到app的復(fù)位向量地址
  125. }



  126. //設(shè)置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. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
STM32在線升級(jí)IAP功能-全部軟件.rar (1016.3 KB, 下載次數(shù): 759)


評(píng)分

參與人數(shù) 2黑幣 +10 收起 理由
fanmeng11 + 5 贊一個(gè)!
hk18774830405 + 5 厲害

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏18 分享淘帖 頂3 踩
回復(fù)

使用道具 舉報(bào)

58#
ID:829222 發(fā)表于 2022-8-10 16:08 | 只看該作者
看著很不錯(cuò),如果上位機(jī)都開(kāi)放就太好了
回復(fù)

使用道具 舉報(bào)

57#
ID:87000 發(fā)表于 2022-7-6 16:14 | 只看該作者
感謝分享啊,正是我想要的,最近在研究這個(gè)
回復(fù)

使用道具 舉報(bào)

56#
ID:346927 發(fā)表于 2021-1-14 14:58 | 只看該作者
這個(gè)怎么使用呀,樓主要詳細(xì)解說(shuō)一下才好,謝謝!
回復(fù)

使用道具 舉報(bào)

55#
ID:346927 發(fā)表于 2020-9-30 11:40 | 只看該作者
非常好,下來(lái)看看 多謝樓主
回復(fù)

使用道具 舉報(bào)

54#
ID:476888 發(fā)表于 2020-9-24 11:30 | 只看該作者
請(qǐng)問(wèn)寫(xiě)入APP固化配置是什么意思?
回復(fù)

使用道具 舉報(bào)

53#
ID:288646 發(fā)表于 2020-6-26 13:27 | 只看該作者
正是想要的
回復(fù)

使用道具 舉報(bào)

52#
ID:67309 發(fā)表于 2020-6-9 11:08 | 只看該作者
很好,感謝分享
回復(fù)

使用道具 舉報(bào)

51#
ID:67309 發(fā)表于 2020-6-9 11:07 | 只看該作者
灰常感謝分享!
回復(fù)

使用道具 舉報(bào)

50#
ID:219882 發(fā)表于 2020-2-27 11:36 | 只看該作者
感謝樓主分享
回復(fù)

使用道具 舉報(bào)

49#
ID:600305 發(fā)表于 2020-1-3 15:51 | 只看該作者
感謝大佬分享
回復(fù)

使用道具 舉報(bào)

48#
ID:236912 發(fā)表于 2019-12-4 22:42 | 只看該作者
總結(jié)的不錯(cuò),感謝
回復(fù)

使用道具 舉報(bào)

47#
ID:55184 發(fā)表于 2019-9-5 09:45 | 只看該作者
希望是個(gè)好東西呢
回復(fù)

使用道具 舉報(bào)

46#
ID:215694 發(fā)表于 2019-7-5 15:02 | 只看該作者
樓主不厚道。
回復(fù)

使用道具 舉報(bào)

45#
ID:141059 發(fā)表于 2019-6-22 15:23 | 只看該作者
感謝,正在找上位機(jī)軟件
回復(fù)

使用道具 舉報(bào)

44#
ID:383374 發(fā)表于 2019-6-16 21:40 來(lái)自觸屏版 | 只看該作者
這個(gè)跟hex區(qū)別
回復(fù)

使用道具 舉報(bào)

43#
ID:445069 發(fā)表于 2019-6-11 10:10 | 只看該作者
正在學(xué)習(xí)STM32 IAP 在線升級(jí)!借鑒一下!
回復(fù)

使用道具 舉報(bào)

42#
ID:415123 發(fā)表于 2019-5-13 16:45 | 只看該作者
我正在學(xué)習(xí)在線下載的功能,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

41#
ID:346436 發(fā)表于 2019-4-27 16:25 | 只看該作者
感謝分享,謝謝樓主,繼續(xù)加油
回復(fù)

使用道具 舉報(bào)

40#
ID:517857 發(fā)表于 2019-4-21 15:48 | 只看該作者
這種升級(jí)方式確實(shí)很好
回復(fù)

使用道具 舉報(bào)

39#
ID:82586 發(fā)表于 2019-4-21 14:20 | 只看該作者
感謝分享啊,正想要
回復(fù)

使用道具 舉報(bào)

38#
ID:414697 發(fā)表于 2019-3-25 10:21 | 只看該作者
多謝樓主,很有用
回復(fù)

使用道具 舉報(bào)

37#
ID:219315 發(fā)表于 2019-3-14 15:48 | 只看該作者
好東西啊,找了好久終于找到了!
回復(fù)

使用道具 舉報(bào)

36#
ID:474311 發(fā)表于 2019-1-31 11:31 | 只看該作者
正需要,謝謝
回復(fù)

使用道具 舉報(bào)

35#
ID:449525 發(fā)表于 2019-1-29 14:21 | 只看該作者
可以用的,只是上位機(jī)的源碼,能提供下么
回復(fù)

使用道具 舉報(bào)

34#
ID:396960 發(fā)表于 2018-12-7 09:15 | 只看該作者
灰常感謝。。。
回復(fù)

使用道具 舉報(bào)

33#
ID:426861 發(fā)表于 2018-11-23 16:28 | 只看該作者
論壇好多資料都很好,但是黑幣總是不夠用啊
回復(fù)

使用道具 舉報(bào)

32#
ID:368791 發(fā)表于 2018-11-6 22:34 來(lái)自觸屏版 | 只看該作者
感謝分享!!!
回復(fù)

使用道具 舉報(bào)

31#
ID:328121 發(fā)表于 2018-11-5 13:02 | 只看該作者
謝謝分享,學(xué)習(xí)中
回復(fù)

使用道具 舉報(bào)

30#
ID:81544 發(fā)表于 2018-11-5 09:32 | 只看該作者
好東西
回復(fù)

使用道具 舉報(bào)

29#
ID:87577 發(fā)表于 2018-10-26 09:13 | 只看該作者
很棒的東西,謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

28#
ID:124003 發(fā)表于 2018-10-15 11:39 | 只看該作者
這個(gè)厲害了,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

27#
ID:395711 發(fā)表于 2018-9-9 19:24 | 只看該作者
,正在網(wǎng)上找這個(gè)資料哦,下來(lái)先試試看!
回復(fù)

使用道具 舉報(bào)

26#
ID:391656 發(fā)表于 2018-8-30 16:26 | 只看該作者
這個(gè)上位機(jī)有BUG,不能修改波特率,只能使用115200,改成別的波特率沒(méi)用。
找過(guò)這個(gè)上位機(jī)的資料,想自己修改來(lái)著,沒(méi)找到。。。
回復(fù)

使用道具 舉報(bào)

25#
ID:326896 發(fā)表于 2018-5-11 09:02 | 只看該作者
下不了。。。
回復(fù)

使用道具 舉報(bào)

24#
ID:326896 發(fā)表于 2018-5-10 15:39 | 只看該作者
想用在其他單片機(jī)上,先下來(lái)參考一下
回復(fù)

使用道具 舉報(bào)

23#
ID:319023 發(fā)表于 2018-5-9 17:03 | 只看該作者
存儲(chǔ)器128K  的好像不兼容??
回復(fù)

使用道具 舉報(bào)

22#
ID:322438 發(fā)表于 2018-5-4 22:19 | 只看該作者
謝謝樓主的無(wú)私分享
回復(fù)

使用道具 舉報(bào)

21#
ID:319023 發(fā)表于 2018-5-4 16:07 | 只看該作者
IAP 控制組,寫(xiě)入APP固化配置怎么用?  
回復(fù)

使用道具 舉報(bào)

20#
ID:223959 發(fā)表于 2018-4-19 11:06 | 只看該作者
       學(xué)習(xí)學(xué)習(xí),多謝分享!
回復(fù)

使用道具 舉報(bào)

19#
ID:264334 發(fā)表于 2018-3-29 10:00 | 只看該作者
好東西,感謝分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表