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

標(biāo)題: STM32F4 IAP升級(jí) Bootloader程序+上位機(jī)下載程序源碼 [打印本頁(yè)]

作者: zhouzhou1    時(shí)間: 2018-10-18 10:06
標(biāo)題: STM32F4 IAP升級(jí) Bootloader程序+上位機(jī)下載程序源碼
IAP更新操作說(shuō)明
第一個(gè)文件夾:bootloader程序
第二個(gè)文件夾:上位機(jī)下載程序源碼
第三個(gè)文件夾:需要更新下載的代碼
第四個(gè)文件:下載工具可執(zhí)行文件
第五個(gè)文件:生成的pbdr.bin文件,用于更新。
一、硬件設(shè)計(jì):
升級(jí)下載程序采用外部硬件觸發(fā)的方式。
PB-20M4硬件板 預(yù)留一個(gè)IO口處理代碼下載及更新的功能。
功能簡(jiǎn)介:開(kāi)機(jī)前若將 PB4接口與GND用杜邦線(改進(jìn)硬件后可用跳帽)短接, LED6閃爍狀態(tài),即可進(jìn)入固件下載功能程序,然后等待串口輸入接收APP程序(.bin文件,生成方法見(jiàn)后面說(shuō)明、分段接收每包2K數(shù)據(jù),進(jìn)行CRC校驗(yàn)),在接收完APP程序包后,斷開(kāi)PB4與地線的連接即可進(jìn)入用戶(hù)程序。
用到的資源:
圖一  硬件指示圖
圖二  串口連接

二、軟件設(shè)計(jì)
總共涉及三部分代碼:1、Bootloader;2、Flash App;3、上位機(jī)程序
1.Bootloader;
主函數(shù)進(jìn)行任務(wù)判斷,以及IAP更新和跳轉(zhuǎn)等各項(xiàng)操作。串口中斷中運(yùn)行數(shù)據(jù)處理,數(shù)據(jù)檢測(cè),與上位機(jī)及握手校驗(yàn)等任務(wù)。Bootloader大小僅16K左右。
2、Flash App;
需要下載的程序,設(shè)置flash起始地址偏移量,由bootloader串口中斷中寫(xiě)到flash中去。在初始化的時(shí)候執(zhí)行跳轉(zhuǎn),運(yùn)行該代碼程序。
3、上位機(jī)發(fā)送校驗(yàn)程序
協(xié)議如下:            
/*---------------------------------------------------------------------
protocol-----|#|remainSend|#|length|data[]|CRC_check
---------------------------------------------------------------------*/            
IAP不是一下子把所有BIN文件都接收過(guò)來(lái)寫(xiě)入FLASH,而是根據(jù)自己硬件的RAM空間,把BIN文件分成若干包,如每1K,2K等傳送一次,傳送當(dāng)中加上幀頭,幀尾,CRC,及總共多少包,及這是第幾包等信息封裝好的數(shù)據(jù)包,每接收一包寫(xiě)相應(yīng)FLASH,下一包對(duì)應(yīng)的FLASH地址++,如此完成固件更新。

三、上位機(jī)設(shè)計(jì):
打開(kāi)應(yīng)用程序IAP_Download_USART\IAP_Download_USART\obj\Debug中exe文件。
或直接打開(kāi)附件中IAP_Download_USART.exe應(yīng)用程序
運(yùn)行界面
燒錄過(guò)程:
開(kāi)發(fā)環(huán)境如下:
VS2013上用C#設(shè)計(jì)的簡(jiǎn)單的串口應(yīng)用程序,基于.net4.5。
主要代碼:
詳見(jiàn)附件。

四、IAP說(shuō)明
IAP(In Application Programming)即應(yīng)用編程,IAP是用戶(hù)自己的程序在運(yùn)行過(guò)程中對(duì)User Flash的部分區(qū)域進(jìn)行燒寫(xiě),后期可以方便的通過(guò)預(yù)留通信口對(duì)產(chǎn)品進(jìn)行更新升級(jí)。在實(shí)現(xiàn)IAP功能時(shí),需要在設(shè)計(jì)固件程序時(shí)編寫(xiě)兩個(gè)項(xiàng)目的代碼,第一個(gè)項(xiàng)目程序(bootloader程序)不執(zhí)行正常的功能操作,而是只通過(guò)某種通信方式接收程序和數(shù)據(jù),執(zhí)行對(duì)第二部分代碼的更新;第二個(gè)項(xiàng)目代碼是功能代碼(APP程序)。這兩部分項(xiàng)目代碼都同時(shí)燒錄在User Flash中,在芯片上電后,首先執(zhí)行第一個(gè)項(xiàng)目的代碼,進(jìn)行如下操作:
Bootloader代碼必須通過(guò)其他手段,如JTAG或ISP燒錄;第二部分代碼使用Bootloader程序IAP功能燒錄,也可以通過(guò)JTAG燒錄,以后需要更新時(shí)可以通過(guò)IAP代碼進(jìn)行燒錄。
兩部分代碼存放在flash不同的地址位置,從最低地址區(qū)開(kāi)始存放Bootloader,在其后指定位置存放APP程序。
STM32F4的內(nèi)部閃存(flash)地址起始于0x08000000,一般情況下,程序文就從此地址開(kāi)始寫(xiě)入。此外STM32是基于Cortex-M4 內(nèi)核的微控制器,其內(nèi)部通過(guò)一張“中斷向量表”來(lái)響應(yīng)中斷,程序啟動(dòng)后,將首先從“中斷向量表”取出復(fù)位中斷向量執(zhí)行復(fù)位中斷程序完成啟動(dòng),而這張“中斷向量表”的起始地址是0x08000004,當(dāng)中斷來(lái)臨,STM32F4 的內(nèi)部硬件機(jī)制亦會(huì)自動(dòng)將PC 指針定位到“中斷向量表”處,并根據(jù)中斷源取出對(duì)應(yīng)的中斷向量執(zhí)行中斷服務(wù)程序。
IAP程序滿足的要求:
1.程序起始地址設(shè)置方法
打開(kāi)pbdr_v110工程,點(diǎn)擊Options for Target /Target選項(xiàng)卡,如圖一所示:
圖一 Flash app target 選項(xiàng)卡設(shè)置
默認(rèn)條件下,圖中IROM1的起始地址(Start)一般為0x08000000,大小1M(Size)為0x100000。而我們?cè)O(shè)置APP程序起始地址為0X08010000,即偏移量為0x10000(64K字節(jié)),留給用戶(hù)flash空間(size)是1024k-64k=960K。偏移量是定義留給bootloader程序的地址空間大小。發(fā)布者可以定義bootloader空間的大小這里我定義的是64K,偏移量為0x200的倍數(shù)即可。(本設(shè)計(jì)的bootloader只有16K左右),這里留有余量,方便bootloader以后的升級(jí)修改。
1.中斷向量表的偏移設(shè)置方法
在pbdr_v110版本中在mian.c中設(shè)置如下:
完成中斷向量表偏移量的設(shè)置
MDK編譯默認(rèn)生成.hex文件,而升級(jí)程序需要生成.bin文件。MDK自帶的格式轉(zhuǎn)換工具fromelf.exe,來(lái)實(shí)現(xiàn).axf文件到.bin文件的轉(zhuǎn)換。該工具在MDK的安裝目錄\ARM\BIN40文件夾下。通過(guò)下一步設(shè)置,可以在MDK編譯成功之后,調(diào)用fromelf.exe (注意,MDK的安裝路徑,我的路徑D:\Keil_v5\ARM\ARMCC\bin),根據(jù)當(dāng)前工程pbdr.axf,生成一個(gè)pbdr.bin文件。存放在OBJ文件夾下。在得到.bin文件后,我們只需要將這個(gè)bin文件通過(guò)串口傳送給單片機(jī),即可執(zhí)行代碼的下載以及升級(jí)。

五、下載驗(yàn)證:
將JTDO(PB4)與GND短接,上電后,LED燈D6開(kāi)始閃爍,說(shuō)明進(jìn)入下載更新?tīng)顟B(tài)。
絲印見(jiàn)PB-20背面。
通過(guò)TTL轉(zhuǎn)usb連上電腦端串口,打開(kāi)IAP更新軟件(打開(kāi)應(yīng)用程序IAP_Download_USART\IAP_Download_USART\obj\Debug文件夾中IAP_Download_USART.exe文件或直接打開(kāi)附件中IAP_Download_USART.exe應(yīng)用程序),打開(kāi)串口即可選則發(fā)送BIN文件進(jìn)行代碼下載。

關(guān)閉下載窗口,斷開(kāi)短接線即可運(yùn)行更新后的程序。

stm32 IAP Bootloader V1.4源碼:
  1. /*--------------------------------------------------------------------------------------
  2. @file:    IAP_Serial
  3. @version: V1.0
  4. @author:  Shanwu.5_W && Potter_lv
  5. @Introduction : Unlock flash   load_app from serial
  6. --------------------------------------------------------------------------------------*/
  7. #include "sys.h"
  8. #include "delay.h"  
  9. #include "usart.h"   
  10. #include "led.h"  
  11. #include "stmflash.h"
  12. #include "iap.h"  

  13. void Button_Switch_DFU_Init(void)    //按鍵升級(jí)初始化
  14. {
  15.   GPIO_InitTypeDef GPIO_InitStructure;
  16.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);

  17.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  18.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  19.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  20.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  21. }
  22. #define  GET_BUTTON_STATE   GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_3)

  23. int main(void)
  24. {
  25.         u8 t;
  26.         
  27.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置系統(tǒng)中斷優(yōu)先級(jí)分組2
  28.         delay_init(168);  //初始化延時(shí)函數(shù)
  29.         uart_init(115200);                //初始化串口波特率為115200
  30.         
  31.         LED_Init();                                        //初始化LED
  32.         Button_Switch_DFU_Init();                //初始化跳轉(zhuǎn)APP程序接口
  33.         
  34.         while(1)
  35.         {
  36.                         t++;
  37.                         delay_ms(10);
  38.                         if(t==30)
  39.                         {
  40.                                 LED0=!LED0;                  //D6閃爍 等待更新?tīng)顟B(tài)
  41.                                 t=0;
  42.                         }                        
  43.                         if(GET_BUTTON_STATE != 0x00)        //懸空進(jìn)入更新進(jìn)程
  44.                         {                                       
  45.                                 if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)   //判斷是否為0X08XXXXXX.
  46.                                 {         
  47.                                         USART_Cmd(USART2, DISABLE);                                //失能串口2 ,防止跳轉(zhuǎn)到App程序時(shí)死機(jī)                                       
  48.                                         iap_load_app(FLASH_APP1_ADDR);                             //執(zhí)行FLASH APP代碼               
  49.                                 }else
  50.                                 {
  51.                                         printf("非FLASH應(yīng)用程序,無(wú)法執(zhí)行!\r\n");           
  52.                                 }
  53.                         }
  54.                 }                        
  55. }
復(fù)制代碼



全部資料51hei下載地址:
IAP_release.rar (2.24 MB, 下載次數(shù): 1053)



作者: ever343    時(shí)間: 2018-11-15 14:30
謝謝分享
作者: bingnuo1023    時(shí)間: 2018-11-16 15:10
感謝分享

作者: dkydkyshow    時(shí)間: 2018-12-13 14:13
謝謝分享
作者: shenme    時(shí)間: 2018-12-18 21:53
贊一個(gè),不錯(cuò)
作者: 煙花綻放    時(shí)間: 2018-12-21 11:52
謝謝分享
作者: ztin0501    時(shí)間: 2019-1-2 16:51
感謝分享~~
作者: dsc78    時(shí)間: 2019-1-8 09:47

感謝分享~~
作者: m4416202    時(shí)間: 2019-1-17 09:59
希望可以下來(lái)用用
作者: yutian2017    時(shí)間: 2019-1-17 21:08
謝謝分享

作者: 等等biu    時(shí)間: 2019-1-22 17:29
大家有下載的嗎?可以分享一下嗎

作者: doube08    時(shí)間: 2019-1-26 11:37
m4416202 發(fā)表于 2019-1-17 09:59
希望可以下來(lái)用用

用起來(lái)了么

作者: laifengjian    時(shí)間: 2019-2-12 19:40
學(xué)習(xí)學(xué)習(xí)
作者: hellowC8051    時(shí)間: 2019-2-15 08:44
謝謝分享
作者: xiaosir    時(shí)間: 2019-4-7 17:03
好東西,學(xué)習(xí)了!
作者: hpdell    時(shí)間: 2019-4-8 16:40
謝謝分享
作者: ahai0306    時(shí)間: 2019-4-9 15:17
非常好,感謝分享。
作者: topdream    時(shí)間: 2019-4-9 16:54
這是大佬!
作者: zixiaguying    時(shí)間: 2019-4-14 12:35
上位機(jī)源碼沒(méi)有
作者: 474344468    時(shí)間: 2019-5-29 18:08
謝謝分享!
作者: 474344468    時(shí)間: 2019-5-29 18:08
zixiaguying 發(fā)表于 2019-4-14 12:35
上位機(jī)源碼沒(méi)有

有上位機(jī)的啊
作者: hylomar    時(shí)間: 2019-7-1 16:07
謝謝分享

作者: matthewroy    時(shí)間: 2019-7-2 10:40
謝謝樓主的無(wú)私分享!
作者: matthewroy    時(shí)間: 2019-7-2 18:10
樓主你好  請(qǐng)問(wèn)用上位機(jī)點(diǎn)開(kāi)連接之后發(fā)現(xiàn)下位機(jī)卡死的情況
作者: byoo    時(shí)間: 2019-7-27 19:59
不錯(cuò),謝謝了!
作者: 鬼腳七    時(shí)間: 2019-8-20 15:38
謝謝 學(xué)習(xí)一下

作者: SHIROYAN    時(shí)間: 2019-9-12 10:20
感謝分享,研究一下分包粘包
作者: SHIROYAN    時(shí)間: 2019-9-12 17:38
測(cè)試時(shí)發(fā)現(xiàn),只要點(diǎn)擊連接,單片機(jī)就會(huì)卡死,斷開(kāi)連接后單片機(jī)又恢復(fù)正常
作者: zzjj44    時(shí)間: 2019-9-26 20:27
正好需要,謝謝大神!雪中送炭!
作者: tomgong    時(shí)間: 2019-10-4 14:21
如果需求是 這樣子如何實(shí)現(xiàn):
stm32f4單片機(jī)一檢測(cè)到某個(gè)觸發(fā)條件,即擦除相關(guān)程序區(qū)域,而不是升級(jí)它。
作者: 從前有只喵嗚    時(shí)間: 2019-10-8 22:39
學(xué)習(xí)下~
作者: han1993    時(shí)間: 2019-10-10 15:13
謝謝分享
作者: chdkf    時(shí)間: 2019-10-13 18:38
謝謝大佬分享
作者: chdkf    時(shí)間: 2019-10-13 18:39
謝謝 大佬分享
作者: 吉祥二月鳥(niǎo)    時(shí)間: 2019-10-14 13:31
沒(méi)有第三個(gè)文件夾
作者: jianfeii    時(shí)間: 2019-11-22 11:37
這個(gè)資料非常棒!
作者: sumissqin    時(shí)間: 2019-11-26 15:37
謝謝。下載學(xué)習(xí)下
作者: daichenghe    時(shí)間: 2019-12-16 20:56
看起來(lái)不錯(cuò),就是沒(méi)積分下載。
作者: SamCaffrey    時(shí)間: 2019-12-19 16:17
感謝分享  找了很久
作者: linda5150    時(shí)間: 2019-12-23 20:24
正需要,謝謝樓主
作者: D-偉    時(shí)間: 2019-12-30 09:48
大神,板子有鏈接沒(méi)?
作者: zhao293    時(shí)間: 2020-1-6 16:52
非常感謝分享,讓我在這個(gè)冬天非常溫暖
作者: dylan-ding    時(shí)間: 2020-1-31 11:22
請(qǐng)問(wèn)樓主你使用的通訊協(xié)議是什么?自定義的還是使用通用的協(xié)議?
作者: playeboy    時(shí)間: 2020-2-16 13:01

謝謝分享。
作者: srgbzf    時(shí)間: 2020-2-22 10:48
找了很久了,正找這個(gè)呢
作者: mebest74    時(shí)間: 2020-2-24 22:28
十分感謝!
作者: hsv23    時(shí)間: 2020-3-2 11:18
謝謝分享
作者: huangzongwu    時(shí)間: 2020-3-4 18:33
很實(shí)用的功能,我最近打算把這個(gè)模塊增加到我們儀器里面
作者: 玉簡(jiǎn)勵(lì)    時(shí)間: 2020-3-13 10:51
先收藏一下,有黑幣了再來(lái)下載
作者: jianfeii    時(shí)間: 2020-4-22 11:05
這個(gè)代碼不完整啊,只有IAP的,APP的沒(méi)有在壓縮包里面啊,應(yīng)該不能用才對(duì)
作者: nimisi    時(shí)間: 2020-4-26 10:36
收藏學(xué)習(xí)一下
作者: 一期一會(huì)619    時(shí)間: 2020-5-2 14:40
謝謝分享
作者: jach09    時(shí)間: 2020-6-16 14:17
缺少APP程序部分,范例不全。!
作者: 51lqlhei    時(shí)間: 2020-6-22 10:41
謝謝分享
作者: ccczx    時(shí)間: 2020-12-9 14:11
正需要這方面的資料,看介紹還是比較詳細(xì)的
作者: sunsaga1989    時(shí)間: 2020-12-20 00:24
壓縮包里面的東西不完整
作者: jach09    時(shí)間: 2021-1-27 12:14
東西不完整,缺少APP應(yīng)有程序部分的代碼。!
作者: Davidzz    時(shí)間: 2021-1-28 12:54
謝謝分享,剛好要用到IAP
作者: 454267390    時(shí)間: 2022-3-27 21:04
正需要這方面的資料,雪中送碳了
作者: 西點(diǎn)鐘靈毓秀    時(shí)間: 2022-7-14 17:51
已經(jīng)研究了一下,覺(jué)得可以移植到自己的開(kāi)發(fā)中。 最好有下載激活的,不是使用IO激活 IAP功能就好了。
作者: 543049411    時(shí)間: 2023-10-18 09:42
感謝分享,最近也是有產(chǎn)品要用到
作者: xzh5508    時(shí)間: 2023-12-19 10:50
已經(jīng)移植到自己的程序里,仔細(xì)看邏輯,方法就行。上位機(jī)用C#寫(xiě)的,是沒(méi)有問(wèn)題的。
app程序就是用自己的程序就可以了,在里面加一行跳轉(zhuǎn)代碼,并在工程里面設(shè)置以下地址就行,壓縮包里面的說(shuō)明寫(xiě)的很清楚。
作者: 靈沉    時(shí)間: 2024-3-6 10:18
移植到stm32f103上, 跳轉(zhuǎn)時(shí)卡死, 不知道什么原因
作者: mike7575    時(shí)間: 2024-6-3 13:35
這個(gè)非常實(shí)用,謝謝分享原理
作者: wyl    時(shí)間: 2025-7-2 08:44
蟹蟹,好東西,學(xué)習(xí)了!




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲综合色丁香婷婷六月图片 | 人人爽人人爽 | 午夜精品一区二区三区在线观看 | 视频三区 | 欧美精品二区 | 欧美自拍另类 | 国产高清在线观看 | 97精品国产手机 | 欧美日韩专区 | 久久精品国产免费看久久精品 | 久久久成人一区二区免费影院 | 欧美中文字幕 | 欧美激情视频一区二区三区在线播放 | 成人综合久久 | 午夜影院污 | 日韩三级精品 | www.99热这里只有精品 | 成人在线激情 | 草久久免费视频 | 国产精品一区二区三区久久久 | 国产二区三区 | 一区二区三区精品在线 | 国产精品69毛片高清亚洲 | 蜜桃视频一区二区三区 | 我爱操 | 久久久夜夜夜 | 天天操夜夜操 | 国产福利视频在线观看 | 天堂资源| 欧美bondage紧缚视频 | 7777久久| 国产精品三级久久久久久电影 | 免费成人在线网站 | 欧美一级久久 | 午夜影院操 | 三区四区在线观看 | 欧产日产国产精品v | 欧美成人精品激情在线观看 | 我要看免费一级毛片 | 日韩在线视频精品 | 综合色婷婷|