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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5254|回復: 5
打印 上一主題 下一主題
收起左側

基于STM32F4系列的ETH IAP在線升級程序

[復制鏈接]
跳轉到指定樓層
樓主
     此bootloader程序可以通過http或tftp方式更新STm32應用程序,是否進入BOOTLOADER程序可以根據讀取板載外接存儲器中的字節判斷,能夠做到做到了現場快速更改程序,省時省力!

STM32F4的以太網移植及IAP
   在移植過程中,對于以太網協議還有許多不理解的地方,通過以后的實踐學習,不斷深入理解并完善此文檔。
1.    以太網的移植(無操作系統
打開LWIP1.4.1 移植文件,需要移植的src 文件port文件。其中port文件移植ethernetif.c/.h文件;src文件移植①api文件中所有.c文件,②core文件中除ipv6及snmp文件外所有文件,③ include中除ipv6及posix外所有的.h文件。由于此處移植無操作系統,所以在IAP_SERVICE 文件中定義了sys_arch.c,其中只有返回外部時間函數return  get_systick()。注意KEIL5相應的路徑頁需要包含對應的頭文件。

2.    移植FATS 系統
FTFP傳輸文件是512k block形式傳送的,需要移植 FATS 文件系統。此處不多說,有比較多的資料講這塊。

3.    移植ETH 驅動及 DP83848驅動
ETH 驅動是從官網上直接移植的,DP83848驅動通過lan8720修改過來的,區別就是lan8720的硬啟動需要一定的時延,而DP83848基本上不需要硬重啟的時間。需要注意的是在PHY驅動中,有些系統PHY 驅動中啟動了MAC中斷,那么在主程序中就可以不輪詢ETH_CheckFrameReceived()函數,及ETH_DMA 是否接受到數據。反之,如果不啟動MAC中斷,則需要輪詢ETH_CheckFrameReceived()函數。
4.    Tftp 服務程序
Tftp 協議是在udp協議上升級而來,保證了文件傳輸的準確性。是在udp傳輸數據的基礎上加上了特殊的包頭與報位,并且有特定檢驗傳輸數據是否有問題的機制。報文格式如圖1所示。


圖1
  如圖2所示,為tftp的傳輸數據實現過程。在tftpserver.c/h 函數中有詳細的TFTP函數實現。在IAP_tftp_process_write()函數中,起始完udp_recv()函數后,起始FLASH開始寫文件。需要注意的是,在函數IAP_wrq_recv_callback()中檢驗是否寫完,當接收返回的數據小于512+2+2KB時,說明傳輸文件完成,需要置標志位,并鎖上STM32內部FLASH。
圖2

5.    注意事項
程序中以系統時鐘作為TCP、ARP定時器(SystickCnt計數變量),在stm32f4xx_it.c 中可以看到,lwip以此時鐘為基準調用LwIP_Periodic_Handle(SystickCnt)函數。在中斷中,把接收到的緩沖區數據給lwip 處理ethernetif_input(&netif)。
而在netcongf.c 文件中,必須把ARPTimer和TCPTimer的初始值給一個未定義的數值的變量localtime才能傳輸,這里先這么用。改成ETH_DMAs試驗看是否能夠解決這個問題。




單片機源程序如下:
  1. /**
  2.   * @file    main.c
  3.   * @author  WB R&D Team - openmcu666  Debuger by Lyu Xin
  4.   * @version V1.0
  5.   * @date    2017.03.09
  6.   * @brief   Main Program body
  7.   */
  8.         

  9. #include "stm32f4xx.h"
  10. #include "Gpio.h"
  11. #include "usart.h"
  12. #include "main.h"
  13. #include "stm32f4x7_eth.h"
  14. #include "netconf.h"
  15. #include "eth_bsp.h"
  16. #include "Gpio.h"
  17. #include "tftpserver.h"
  18. #include "httpserver.h"
  19. #include "eeprom.h"

  20. //uint8_t  data[40] = "bootloadering...";
  21. uint8_t tftp_flag = 0;      //文件傳輸完成標識

  22. __IO uint32_t SystickCnt = 0;
  23. typedef  void (*pFunction)(void);
  24. pFunction Jump_To_Application;
  25. uint32_t JumpAddress;

  26. static void delay(__IO uint32_t nCount)
  27. {
  28.   __IO uint32_t index = 0;
  29.   for(index = 80000*nCount; index != 0; index--)
  30.   {
  31.   }
  32. }

  33. uint32_t get_systick(void)
  34. {
  35.   return SystickCnt;
  36. }


  37. //從扇區5開始擦除 ,偏移128KB ,為0x08020000,作為APP起始地址
  38. //可用HTTP或TFTP方式,默認TFTP,如需更改,見main.h文件

  39. /*****************************************************************************
  40. **   Main Function  main()
  41. ******************************************************************************/
  42. int main(void)
  43. {  
  44.         uint8_t write_buf = 0;
  45.         uint8_t read_buf = 0;
  46.         I2C_EE_Init();
  47. #ifdef BOOTLOADER_EN                        
  48.         write_buf = 0x66;               
  49.         I2C_EE_BufferWrite(&write_buf,1,1);                                  //第0塊第0字節
  50. #endif
  51.         
  52. #ifdef APP_EN
  53.         write_buf = 0x55;               
  54.         I2C_EE_BufferWrite(&write_buf,1,1);                                  //第0塊第0字節
  55. #endif        
  56.         
  57.         I2C_EE_BufferRead(&read_buf,1,1);
  58.   if( read_buf == 0x55 ){   
  59.      iap();
  60.   }
  61.         else if(read_buf != 0x55 ){
  62.            SysTick_Config(SystemCoreClock / 1000);        //systick必須在以太網初始化之前配置
  63.      eth_init();   
  64.      LwIP_Init();
  65. #ifdef USE_IAP_HTTP
  66.      IAP_httpd_init();
  67. #endif
  68.   
  69. #ifdef USE_IAP_TFTP  
  70.     IAP_tftpd_init();
  71. #endif   
  72.      while (1)
  73.                  {
  74.                                 if (ETH_CheckFrameReceived()){
  75.                                          LwIP_Pkt_Handle();
  76.                                         }
  77.                                 LwIP_Periodic_Handle(SystickCnt);
  78.                                 if(tftp_flag == 1){
  79.                                                                 break;
  80.                                 }
  81.                     else{
  82. //                                           UDP_Client_Broadcast(data,40);
  83.                                continue;
  84.                     }
  85.      }
  86.                 iap();
  87.   }
  88. }
  89. void iap(void)
  90. {
  91.                  if (((*(__IO uint32_t*)USER_FLASH_FIRST_PAGE_ADDRESS) & 0x2FFE0000) == 0x20000000)
  92.                 {
  93.                         //跳轉到用戶程序
  94.                         JumpAddress = *(__IO uint32_t*) (USER_FLASH_FIRST_PAGE_ADDRESS + 4);
  95.                         Jump_To_Application = (pFunction) JumpAddress;
  96.                         //初始化用戶程序的堆棧指針
  97.                         __set_MSP(*(__IO uint32_t*) USER_FLASH_FIRST_PAGE_ADDRESS);
  98.                         Jump_To_Application();
  99.                 }  
  100. }
復制代碼

所有資料51hei提供下載:
EHT_IAP 18.11.5 有效.7z (1.41 MB, 下載次數: 124)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:136423 發表于 2020-10-19 10:57 | 只看該作者
后期有時間會繼續完善
回復

使用道具 舉報

板凳
ID:960080 發表于 2023-2-1 19:26 | 只看該作者
感謝樓主,這帖子幫了大忙了
回復

使用道具 舉報

地板
ID:624093 發表于 2023-12-13 19:09 | 只看該作者
感謝樓主,真是及時雨!
回復

使用道具 舉報

5#
ID:395450 發表于 2025-2-17 23:06 | 只看該作者

感謝樓主,這帖子幫了大忙了
回復

使用道具 舉報

6#
ID:87000 發表于 2025-2-18 10:31 | 只看該作者


感謝樓主,這帖子幫了大忙了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一级片一区二区 | 亚洲成av人片在线观看无码 | av在线免费看网址 | 日韩中文在线视频 | 亚洲视频在线观看一区二区三区 | 欧美久久国产精品 | 国产一区二区三区在线 | 成人在线视频网址 | 成人久久久 | 亚洲精品视频在线 | 51ⅴ精品国产91久久久久久 | 中文字幕亚洲区一区二 | 国产一级淫片a直接免费看 免费a网站 | 亚洲精选一区二区 | 欧美日韩综合一区 | 中文字幕99 | 国产黄色大片在线免费观看 | 国产激情偷乱视频一区二区三区 | 亚洲 中文 欧美 日韩 在线观看 | 欧美亚洲视频在线观看 | 亚洲国产成人精品女人久久久 | 99热热热| 精品久久久久久久久久 | 国产片侵犯亲女视频播放 | 91久久 | 欧美一区二区三区 | 日韩欧美专区 | re久久| 亚洲欧美激情精品一区二区 | 亚洲高清在线视频 | 中文字幕乱码视频32 | 久久国产区 | 中文字幕91| 一级大黄色片 | 日本不卡一区二区三区在线观看 | 欧美精品一区在线 | 九七午夜剧场福利写真 | 亚洲一区二区中文字幕 | 草草视频在线观看 | 国产精品久久久久久av公交车 | 一级一级一级毛片 |