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

標題: STM32F4 IAP升級 Bootloader程序+上位機下載程序源碼 [打印本頁]

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

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

三、上位機設計:
打開應用程序IAP_Download_USART\IAP_Download_USART\obj\Debug中exe文件。
或直接打開附件中IAP_Download_USART.exe應用程序
運行界面
燒錄過程:
開發環境如下:
VS2013上用C#設計的簡單的串口應用程序,基于.net4.5。
主要代碼:
詳見附件。

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

五、下載驗證:
將JTDO(PB4)與GND短接,上電后,LED燈D6開始閃爍,說明進入下載更新狀態。
絲印見PB-20背面。
通過TTL轉usb連上電腦端串口,打開IAP更新軟件(打開應用程序IAP_Download_USART\IAP_Download_USART\obj\Debug文件夾中IAP_Download_USART.exe文件或直接打開附件中IAP_Download_USART.exe應用程序),打開串口即可選則發送BIN文件進行代碼下載。

關閉下載窗口,斷開短接線即可運行更新后的程序。

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)    //按鍵升級初始化
  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);//設置系統中斷優先級分組2
  28.         delay_init(168);  //初始化延時函數
  29.         uart_init(115200);                //初始化串口波特率為115200
  30.         
  31.         LED_Init();                                        //初始化LED
  32.         Button_Switch_DFU_Init();                //初始化跳轉APP程序接口
  33.         
  34.         while(1)
  35.         {
  36.                         t++;
  37.                         delay_ms(10);
  38.                         if(t==30)
  39.                         {
  40.                                 LED0=!LED0;                  //D6閃爍 等待更新狀態
  41.                                 t=0;
  42.                         }                        
  43.                         if(GET_BUTTON_STATE != 0x00)        //懸空進入更新進程
  44.                         {                                       
  45.                                 if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)   //判斷是否為0X08XXXXXX.
  46.                                 {         
  47.                                         USART_Cmd(USART2, DISABLE);                                //失能串口2 ,防止跳轉到App程序時死機                                       
  48.                                         iap_load_app(FLASH_APP1_ADDR);                             //執行FLASH APP代碼               
  49.                                 }else
  50.                                 {
  51.                                         printf("非FLASH應用程序,無法執行!\r\n");           
  52.                                 }
  53.                         }
  54.                 }                        
  55. }
復制代碼



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



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

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

感謝分享~~
作者: m4416202    時間: 2019-1-17 09:59
希望可以下來用用
作者: yutian2017    時間: 2019-1-17 21:08
謝謝分享

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

作者: doube08    時間: 2019-1-26 11:37
m4416202 發表于 2019-1-17 09:59
希望可以下來用用

用起來了么

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

有上位機的啊
作者: hylomar    時間: 2019-7-1 16:07
謝謝分享

作者: matthewroy    時間: 2019-7-2 10:40
謝謝樓主的無私分享!
作者: matthewroy    時間: 2019-7-2 18:10
樓主你好  請問用上位機點開連接之后發現下位機卡死的情況
作者: byoo    時間: 2019-7-27 19:59
不錯,謝謝了!
作者: 鬼腳七    時間: 2019-8-20 15:38
謝謝 學習一下

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

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




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1