娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

STM32H743移植LWIP匯總

發布者:幸福的人生最新更新時間:2025-03-11 來源: jianshu關鍵字:STM32H743  移植  LWIP 手機看文章 掃描二維碼
隨時隨地手機看文章

本教程之記錄移植中關鍵過程,不講解原理。

1. 用cubemx生成工程

我這里用cubemx生成makefile工程。
幾個關鍵的點用圖片記錄下來

ETH1.png

接收描述符和發送描述符的地址特別注意,只能在D2域的RAM。

ETH2.png

開ETH中斷。

freertos1.png

lwip1.png

lwip2.png

lwip3.png

lwip4.png


MPU.png


2.makefile

在makefile文件中增加宏定義DATA_IN_D2_SRAM。


# C defines

C_DEFS = 

-DUSE_HAL_DRIVER

-DSTM32H743xx

-DDATA_IN_D2_SRAM

DATA_IN_D2_SRAM可以開啟D2域RAM的時鐘。在目錄CoreSrcsystem_stm32h7xx.c下有如幾行代碼。


#if defined(DATA_IN_D2_SRAM)

  /* in case of initialized data in D2 SRAM (AHB SRAM), enable the D2 SRAM clock (AHB SRAM clock) */#if defined(RCC_AHB2ENR_D2SRAM3EN)

  RCC->AHB2ENR |= (RCC_AHB2ENR_D2SRAM1EN | RCC_AHB2ENR_D2SRAM2EN | RCC_AHB2ENR_D2SRAM3EN);#elif defined(RCC_AHB2ENR_D2SRAM2EN)

  RCC->AHB2ENR |= (RCC_AHB2ENR_D2SRAM1EN | RCC_AHB2ENR_D2SRAM2EN);#else

  RCC->AHB2ENR |= (RCC_AHB2ENR_AHBSRAM1EN | RCC_AHB2ENR_AHBSRAM2EN);#endif /* RCC_AHB2ENR_D2SRAM3EN */

用來開啟D2_RAM1、D2_RAM2和D2_RAM3的時鐘。這與很多網上教程中說的手動增加


__HAL_RCC_D2SRAM1_CLK_ENABLE();

__HAL_RCC_D2SRAM2_CLK_ENABLE();

__HAL_RCC_D2SRAM3_CLK_ENABLE();

是一樣的效果。


3. STM32H743IITx_FLASH.ld

3.1 首先在STM32H743IITx_FLASH.ld中增加如下代碼:

  /* ETH_CODE: add placement of DMA descriptors and RX buffers */

  .lwip_sec (NOLOAD) :

  {

    . = ABSOLUTE(0x30040000);

    *(.RxDecripSection)

    

    . = ABSOLUTE(0x30040100);

    *(.TxDecripSection)

    

    . = ABSOLUTE(0x30040200);

    *(.Rx_PoolSection)

  } >RAM_D2

為什么這里的地址間隔是0x100?

RAM_D2中開辟出來的兩個存儲空間RxDecripSection和TxDecripSection分別用來存儲ETH的描述符DMARxDscrTab和DMATxDscrTab。


//LWIPTargetethernetif.cETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT] __attribute__((section('.RxDecripSection'))); /* Ethernet Rx DMA Descriptors */ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT] __attribute__((section('.TxDecripSection'))); /* Ethernet Tx DMA Descriptors */

ETH_RX_DESC_CNT= 4。

ETH_DMADescTypeDef 定義如下:


typedef struct{

  __IO uint32_t DESC0;

  __IO uint32_t DESC1;

  __IO uint32_t DESC2;

  __IO uint32_t DESC3;

  uint32_t BackupAddr0; /* used to store rx buffer 1 address */

  uint32_t BackupAddr1; /* used to store rx buffer 2 address */} ETH_DMADescTypeDef;

一個ETH_DMADescTypeDef 類型展6*4=24字節。DMARxDscrTab[ETH_RX_DESC_CNT]占用96個字節。0x100=256字節,完全能放下DMARxDscrTab[ETH_RX_DESC_CNT]。


DMARxDscrTab和DMATxDscrTab必須強制鏈接到.RxDecripSection和.TxDecripSection段上去,且RxDecripSection和TxDecripSection必須在D2域的RAM上。否則DMA報錯。

D2域有3塊RAM:

D2_SRAM1:0x3000 0000 ~ 0x3001 FFFF

D2_SRAM2:0x3002 0000 ~ 0x3003 FFFF

D2_SRAM3:0x3004 0000 ~ 0x3004 7FFF


3.2 DTCMRAM改RAM_D1

STM32H743IITx_FLASH.ld中有多處DTCMRAM需要改成RAM_D1。懶得一處一處的記錄,直接貼文件如下:


/*

******************************************************************************

**


**  File        : LinkerScript.ld

**

**  Author      : STM32CubeMX

**

**  Abstract    : Linker script for STM32H743IITx series

**                2048Kbytes FLASH and 1056Kbytes RAM

**

**                Set heap size, stack size and stack location according

**                to application requirements.

**

**                Set memory bank area and size if external memory is used.

**

**  Target      : STMicroelectronics STM32

**

**  Distribution: The file is distributed “as is,” without any warranty

**                of any kind.

**

*****************************************************************************

** @attention

**

**

© COPYRIGHT(c) 2019 STMicroelectronics

**

** Redistribution and use in source and binary forms, with or without modification,

** are permitted provided that the following conditions are met:

**   1. Redistributions of source code must retain the above copyright notice,

**      this list of conditions and the following disclaimer.

**   2. Redistributions in binary form must reproduce the above copyright notice,

**      this list of conditions and the following disclaimer in the documentation

**      and/or other materials provided with the distribution.

**   3. Neither the name of STMicroelectronics nor the names of its contributors

**      may be used to endorse or promote products derived from this software

**      without specific prior written permission.

**

** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'

** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE

** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE

** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL

** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR

** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER

** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,

** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

**

*****************************************************************************

*//* Entry Point */ENTRY(Reset_Handler)/* Highest address of the user mode stack */_estack = ORIGIN(RAM_D1) + LENGTH(RAM_D1);    /* end of RAM *//* Generate a link error if heap and stack don't fit into RAM */_Min_Heap_Size = 0x200;      /* required amount of heap  */_Min_Stack_Size = 0x400; /* required amount of stack *//* Specify the memory areas */MEMORY{DTCMRAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 128KRAM_D1 (xrw)      : ORIGIN = 0x24000000, LENGTH = 512KRAM_D2 (xrw)      : ORIGIN = 0x30000000, LENGTH = 288KRAM_D3 (xrw)      : ORIGIN = 0x38000000, LENGTH = 64KITCMRAM (xrw)      : ORIGIN = 0x00000000, LENGTH = 64KFLASH (rx)      : ORIGIN = 0x8000000, LENGTH = 2048K}/* Define output sections */SECTIONS{

  /* The startup code goes first into FLASH */

  .isr_vector :

  {

    . = ALIGN(4);

    KEEP(*(.isr_vector)) /* Startup code */

    . = ALIGN(4);

  } >FLASH


  /* The program code and other data goes into FLASH */

  .text :

  {

    . = ALIGN(4);

    *(.text)           /* .text sections (code) */

    *(.text*)          /* .text* sections (code) */

    *(.glue_7)         /* glue arm to thumb code */

    *(.glue_7t)        /* glue thumb to arm code */

    *(.eh_frame)


    KEEP (*(.init))

    KEEP (*(.fini))


    . = ALIGN(4);

    _etext = .;        /* define a global symbols at end of code */

  } >FLASH


  /* Constant data goes into FLASH */

  .rodata :

  {

    . = ALIGN(4);

    *(.rodata)         /* .rodata sections (constants, strings, etc.) */

    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */

    . = ALIGN(4);

  } >FLASH


  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH

  .ARM : {

    __exidx_start = .;

    *(.ARM.exidx*)

    __exidx_end = .;

  } >FLASH


  .preinit_array     :

  {

    PROVIDE_HIDDEN (__preinit_array_start = .);

    KEEP (*(.preinit_array*))

    PROVIDE_HIDDEN (__preinit_array_end = .);

  } >FLASH

  .init_array :

  {

    PROVIDE_HIDDEN (__init_array_start = .);

    KEEP (*(SORT(.init_array.*)))

    KEEP (*(.init_array*))

    PROVIDE_HIDDEN (__init_array_end = .);

  } >FLASH

  .fini_array :

  {

    PROVIDE_HIDDEN (__fini_array_start = .);

    KEEP (*(SORT(.fini_array.*)))

    KEEP (*(.fini_array*))

    PROVIDE_HIDDEN (__fini_array_end = .);

  } >FLASH


  /* used by the startup to initialize data */

  _sidata = LOADADDR(.data);


  /* Initialized data sections goes into RAM, load LMA copy after code */

  .data : 

  {

    . = ALIGN(4);

    _sdata = .;        /* create a global symbol at data start */

    *(.data)           /* .data sections */

    *(.data*)          /* .data* sections */


    . = ALIGN(4);

    _edata = .;        /* define a global symbol at data end */

  } >RAM_D1 AT> FLASH


  

  /* Uninitialized data section */

  . = ALIGN(4);

  .bss :

  {

    /* This is used by the startup in order to initialize the .bss secion */

    _sbss = .;         /* define a global symbol at bss start */

    __bss_start__ = _sbss;

    *(.bss)

    *(.bss*)

    *(COMMON)


    . = ALIGN(4);

    _ebss = .;         /* define a global symbol at bss end */

    __bss_end__ = _ebss;

  } >RAM_D1


  /* User_heap_stack section, used to check that there is enough RAM left */

  ._user_heap_stack :

  {

    . = ALIGN(8);

    PROVIDE ( end = . );

    PROVIDE ( _end = . );

    . = . + _Min_Heap_Size;

    . = . + _Min_Stack_Size;

    . = ALIGN(8);

  } >RAM_D1


  /* ETH_CODE: add placement of DMA descriptors and RX buffers */

  .lwip_sec (NOLOAD) :

  {

    . = ABSOLUTE(0x30040000);

    *(.RxDecripSection)

    

[1] [2]
關鍵字:STM32H743  移植  LWIP 引用地址:STM32H743移植LWIP匯總

上一篇:openharmony:bootstrap服務啟動引導組件
下一篇:GCC內置的原子操作函數

推薦閱讀最新更新時間:2025-03-31 11:14

STM32F407+FreeRTOS+LWIP1.4.1移植問題記錄
最近在學習物聯網相關的知識,打算用ST的開發板STM32F407ZGT6作為控制中心,上面搭載FreeROTS實時系統,STM32F407開發板作為 TCP client,網絡調試助手作為TCP server,利用串口獲取兩者的連接狀態。在用原子的lwip工程移植到自己的STM32F407開發板時,可以正常獲取DHCP分配的IP,也能通過網絡和網絡工具正常通信,但是串口一直提示錯誤: 從port.c文件中,定位到該行。 從文件中來看,應該是和中斷有關的,從網上查閱了很多資料發現,首先懷疑串口的中斷的優先級超過FreeRTOS的管理最高優先級,需要將串口中斷的優先級降為FreeRTOS的管理最高優先級以下就可以。 據此,分別
[單片機]
STM32F407+FreeRTOS+<font color='red'>LWIP</font>1.4.1<font color='red'>移植</font>問題記錄
STM32F407+LWIP
1. 關于使用外設庫和芯片選擇 需定義USE_STDPERIPH_DRIVER和STM32F40_41xxx 具體在stm32f4xx.h定義或者Target Options里配置 2. 關于時鐘配置 本工程外部晶振使用8M 因此需要修改外部晶振以及PLL相關的宏定義 stm32f4xx.h里配置 #define HSE_VALUE ((uint32_t)8000000) system_stm32f4xx.c里配置 #define PLL_M 8 3. 移植lwip,無RTOS 第一步, ETH_MAC_DMA的初始化,PHY芯片的初始化,這里在工程f407_eth里測試 第二步, 添加lwip文件 src里是lw
[單片機]
【GD32 MCU 移植教程】10、從STM32F030系列移植到GD32E230系列
1. 前言 GD32E230 對比 STM32F030 有著很好的兼容性和更高的性價比,內核和外設都有所增強。本人曾做過產品的 MCU 替換,將基于 STM32F0xx 1.5.0 固件庫的應用程序移植到 GD32E230 上,大體上來說工作量不大,移植后的效果也不錯,GD32E230 相比 STM32F030 有不少功能的升級,主頻也更高,能感覺到國產 MCU 一直在進步。本人將此前的移植經驗進行了整理,可幫助有需要的朋友快速將應用程序從 STM32F030 移植到GD32E230 上(基于STM32F0xx 標準庫 V3.5.0 和 STM32F10x 標準庫 V3.5.0)。本移植工作除基于STM32F0xx 1.5.0固件
[單片機]
【GD32 MCU <font color='red'>移植</font>教程】10、從STM32F030系列<font color='red'>移植</font>到GD32E230系列
Linux 藍牙系列 -- ARM-Linux藍牙工具的移植
一 內核修改 ------------------------------------------------------------ 將內核的藍牙做成模塊形式。 并配置如下, Bluetooth subsystem support --- L2CAP protocol support SCO links support RFCOMM protocol support RFCOMM TTY support BNEP protocol support HIDP protocol support (NEW) Bluetooth d
[單片機]
Linux3.4.2移植CS8900網卡驅動到優龍FS2410開發板
一、S3C2410和CS8900的硬件連接 FS2410開發板的原理圖我沒有找到,但可看參考資料2,里面寫的非常詳細 二、移植過程 a) 配置內核支持S3C2410 選好Samsung S3C24XX SoCs后,會自動返回到上一級菜單(即前一張圖),然后選擇: b) 配置內核支持CS89x0網卡 Device Drivers-- Network device support-- Ethernet driver support— c) 修改drivers/net/ethenet/cirrus/cs89x0.c: (1)在文件開頭增加以下幾行,它們在宏CONFIG_ARCH_S3C24XX
[單片機]
Linux3.4.2<font color='red'>移植</font>CS8900網卡驅動到優龍FS2410開發板
S3C2440移植linux3.4.2內核之支持YAFFS文件系統
獲取yaffs2源碼并給內核打補丁 首先獲取yaffs2源碼(參考git命令使用詳解) cd /work/nfs_root git clone git@github.com:lifeyx/yaffs2.git //若下載出現error:403,可以試試vi /etc/resolv.conf,將nameserver地址改為: 114.114.114.114 將yaffs2源碼來配置到內核里(使內核支持yaffs2) vi /work/nfs_root/yaffs2/README-linux 參考上圖: /*給內核打補丁*/ cd /work/nfs_root/yaffs2/ ./patch-ker.sh c m /w
[單片機]
u-boot-2016.09移植(3)-u-boot-spl.bin
從本節開始,就正式進入移植過程,首先進行u-boot-spl.bin的移植。 一、因為第一步要移植u-boot-spl.bin,所以我們需要先在頭文件里添加宏CONFIG_SPL u-boot-2016.09$ vim include/configs/tq210.h #define CONFIG_SPL 二、時鐘初始化 由上節分析,由于我們沒有定義宏CONFIG_SKIP_LOWLEVEL_INIT,所以進入board/samsung/tq210/lowlevel_init.S進行硬件初始化。 首先添加S5PV210的時鐘相關寄存器: u-boot-2016.09$ vim arch/arm/mach-s5
[單片機]
u-boot-2016.09<font color='red'>移植</font>(3)-u-boot-spl.bin
Windows下u-boot-2011.03在Mini2440移植詳解(2)
SDRAM中調試uboot 本部分代碼下載地址在文章最后。 進入調試狀態前必須安裝Jlink的驅動。之后上電mini2440開發板,運行J-Link GDB Server via JTAG,如下圖。 然后在Eclipse單擊 下箭頭,選擇u-boot-2011.03 進入調試狀態。如下圖,代碼停在了_start 0x33000000處。 如果覺得在Eclipse看代碼費勁,可以參考http://blog.csdn.net/yicao821/article/details/6747454,里面使用Source Insight來閱讀代碼,還是比較方便的。 想在SDRAM中調試uboot,將uboot的CONFIG
[單片機]
Windows下u-boot-2011.03在Mini2440<font color='red'>移植</font>詳解(2)
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 卫辉市| 永顺县| 青浦区| 通山县| 朔州市| 托克托县| 天等县| 调兵山市| 璧山县| 宁河县| 新闻| 休宁县| 德保县| 乐安县| 牙克石市| 成武县| 阳山县| 定结县| 南开区| 天门市| 陵川县| 清河县| 长治县| 平凉市| 昂仁县| 濮阳县| 桑植县| 蒙自县| 兴业县| 临桂县| 曲周县| 台北市| 广州市| 遵化市| 靖江市| 手机| 汤原县| 桦南县| 贵南县| 尼木县| 石阡县|