国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)

這篇具有很好參考價(jià)值的文章主要介紹了STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

由于STM32H743漲價(jià)到300元以上,項(xiàng)目換用了Pin2Pin替換的STM32H723,看上去cpu運(yùn)行速度快了20%達(dá)到550Mhz。 但是內(nèi)存布局存在很大不一樣,而且ST官方代碼庫升級(jí)迭代快,要手動(dòng)修改地方每個(gè)版本不一樣,在有H743的經(jīng)驗(yàn)下,花了2天時(shí)間搞好了記錄一下。很多信息來源于英文ST支持論壇才搞定。

1.預(yù)備知識(shí)

STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)
STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)

  1. 熟悉H7系列都知道,以太網(wǎng),DMA等設(shè)備,無法訪問0x20000000,也就是TCM區(qū)的地址。為了讓我們代碼使用DMA搬運(yùn)數(shù)據(jù),整個(gè)代碼的變量可以放在RAM D1區(qū)域,或者叫AXI區(qū)域,就要在.ld腳本中定義.data段,.bss段到 0x24000000. 這一塊我們有320KB可以用。

  2. 而DTCM(0x20000000)的128K由于不能DMA訪問,但是速度又很快,我們可以用于存放圖像數(shù)據(jù),高速ADC緩存數(shù)據(jù),或者把定義RAMCode函數(shù)。

  3. 而涉及到ETH,以及Lwip 的收發(fā)緩存相關(guān)的地址,把他們定義到D2區(qū)域的固定地址。這樣就可以使用MPU設(shè)置Cache規(guī)則,讓CPU拿到正確的數(shù)據(jù)。

2.準(zhǔn)備工作

有了以上2點(diǎn)準(zhǔn)備,還要注意,如果使用的是CubeMXIDE 1.9.0 , FW庫 1.9.0 以下的版本。 由于芯片比較新,ST官方仍然在進(jìn)行迭代,最好進(jìn)行升級(jí),否則生成代碼后仍然是不工作,不好查問題?,F(xiàn)在是2022-12月, 下面基于1.11.0版本。
STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)
軟件自動(dòng)下載的固件庫也是同樣:STM32Cube_FW_H7_V1.11.0

調(diào)試過程中看了2個(gè)參考文章:

https://community.st.com/s/article/How-to-create-project-for-STM32H7-with-Ethernet-and-LwIP-stack-working
(其中提到到多處H723系列的特殊內(nèi)存地址的問題,這個(gè)很關(guān)鍵)

https://blog.csdn.net/Motseturtle/article/details/126165780
(基本步驟有參考意義,但這個(gè)CSDN博文有一處內(nèi)存地址0x3007ffff沒寫對(duì)是超范圍的。另外幾個(gè)步驟不適用于最新的1.11.0版本)

下面是具體生成步驟:

  1. 選擇芯片
    STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)
  2. 如果本機(jī)沒有H7固件庫會(huì)下載。1G,大概2分鐘左右。STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)
3.配置基本時(shí)鐘外設(shè)

配置RCC,開啟外置晶振,以太網(wǎng)不適合使用內(nèi)置晶振。開啟內(nèi)置LDO,設(shè)置0檔,這樣支持芯片內(nèi)核跑到500Mhz以上。
STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)
進(jìn)入Clock Configuration, 自動(dòng)求解時(shí)鐘配置。一般硬件上是 16Mhz 或者 25Mhz無源晶振。按自己板子輸入。路徑選擇圓點(diǎn)也要點(diǎn)上, 主頻最高可以跑550Mhz。自動(dòng)求解后,沒有出現(xiàn)紅色部分即可。
STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)

4.配置FreeRTOS

接下來準(zhǔn)備配置 FreeRTOS。
把SYS內(nèi)選擇一個(gè)沒用到的計(jì)時(shí)器。 用于HAL時(shí)鐘,如自帶的Delay,HAL API內(nèi)超時(shí)等。
而原本的Systick要被RTOS占用,用于操作系統(tǒng)時(shí)鐘節(jié)拍,上下文切換。
STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)
在中間件選項(xiàng),打開Freertos,接口選擇“CMSIS_V1”,這樣代碼體積小一些。功能是一樣。
STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)

把默認(rèn)任務(wù)的堆棧從128改為512以上,因?yàn)槟J(rèn)任務(wù)內(nèi)有比較大的 LWIP 初始化。默認(rèn)的128太小會(huì)導(dǎo)致初始化會(huì)Hardfault。 一般1024可以很夠用了。
STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)

5.配置 Ethernet + Lwip

我用的LAN8742 / LAN8720(平替), 價(jià)格高一點(diǎn),但是好處是可以代碼全兼容不加額外PHY代碼。組要要改的是 ETH涉及的GPIO要手動(dòng)改為VeryHigh模式。默認(rèn)是Low,是會(huì)導(dǎo)致PHY通信失敗。
STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)
打開ETH全局中斷
STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)
當(dāng)使用CubeMXIDE時(shí),是使用Gcc編譯器, TX/RX Descriptor的內(nèi)存地址由 *.LD鏈接腳本決定。這里可以不設(shè)置,但也可以設(shè)置一下。

TX/RX Descriptor 是給dma用的, 里面包括了 內(nèi)存搬運(yùn)的起始地址 結(jié)束地址 什么的,dma 分析這個(gè)結(jié)構(gòu)體完成數(shù)據(jù)傳輸。所以這部分要單獨(dú)存儲(chǔ),并且用MPU保護(hù)防止Cache引起的數(shù)據(jù)不一致。
STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)
接下來配置 LWIP
由于我要固定IP地址,把DHCP設(shè)為Disbale,下面輸入固定IP的信息。
STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)
由于 STM32H723 / STM32H733 的 D2 RAM 是0x3000000開始,它的頭16K用于ETH的DMA,后16K可以用于LWIP堆棧。默認(rèn)的值0x30044000是適用于H743系列等,這里一定要改對(duì),否則LWIP開機(jī)內(nèi)存初始化函數(shù)會(huì)訪問0x30044000(不存在于H723)會(huì)導(dǎo)致HardFault。
STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)
PHY就選一下,而且只有一種選項(xiàng)。 如果要改為DP83848或者RTL8201 低成本PHY可以參考其他文章,就是代碼內(nèi)PHY相關(guān)寄存器和地址改一下。
STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)
LWIP其余選項(xiàng)默認(rèn)就行。

6.配置MPU

關(guān)于H7的MPU和Cache 可以看這個(gè)文章有了解
番外篇:STM32H7的Cache和MPU以及內(nèi)存分配問題

H7主頻工作在400MHz-550Mhz,除了ITCM DTCM 和Cache以滿速度工作,其它AXI SRAM,SRAM1-4等都是以200MHz工作。數(shù)據(jù)緩存D-Cache就是解決CPU加速訪問SRAM。

而以太網(wǎng)數(shù)據(jù)由于數(shù)據(jù)流量大,會(huì)被快速更新。被D-Cache緩存后已經(jīng)是面目全非,所以我們使用MPU關(guān)閉以太網(wǎng)用的相關(guān)內(nèi)存區(qū)域的Cache訪問權(quán),一旦Cache失效,CPU就老實(shí)去真實(shí)地址拿數(shù)據(jù)。這部分?jǐn)?shù)據(jù)會(huì)慢一點(diǎn),但是由于不是CPU自己生成的,來源于外部所以只能這樣。
STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)
STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)
第一部分,把32K整個(gè) D2區(qū)的SRAM 1 /2 處理為L(zhǎng)evel 1,關(guān)閉所有Cache行為。
第二部分,把頭256B,也就是DMA描述符部分配置為L(zhǎng)evel 0。具體這里不展開。
可以參考:
STM32H743+CubeMX-梳理MPU的設(shè)置

7.配置LD腳本

根據(jù)ST支持論壇,1.11.0 版本的以太網(wǎng)驅(qū)動(dòng)經(jīng)過重構(gòu)要手動(dòng)加上一塊代碼,讓我們能夠指定RX_buff區(qū)域。打開 LWIP\Target\ethernetif.c, #120行附近
實(shí)現(xiàn) memp_memory_RX_POOL_base 數(shù)組由.Rx_PoolSection段指定地址

/* USER CODE BEGIN 2 */
#if defined ( __ICCARM__ ) /*!< IAR Compiler */
#pragma location = 0x30000400
extern u8_t memp_memory_RX_POOL_base[];

#elif defined ( __CC_ARM )  /* MDK ARM Compiler */
__attribute__((at(0x30000400)) extern u8_t memp_memory_RX_POOL_base[];

#elif defined ( __GNUC__ ) /* GNU Compiler */
__attribute__((section(".Rx_PoolSection"))) extern u8_t memp_memory_RX_POOL_base[];

#endif
/* USER CODE END 2 */

在LD腳本 STM32H723VETX_FLASH.ld 下部添加:

  .lwip_sec (NOLOAD) : {
    . = ABSOLUTE(0x30000000);
    *(.RxDecripSection) 
    
    . = ABSOLUTE(0x30000200);
    *(.TxDecripSection)
    
    . = ABSOLUTE(0x30000400);
    *(.Rx_PoolSection) 
  } >RAM_D2 AT> FLASH

到此配置結(jié)束,測(cè)試 Ping
STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)

后記: 測(cè)試發(fā)現(xiàn),UDP接受超過1180字節(jié)后,LWIP協(xié)議棧停止工作,無法ping通收發(fā)數(shù)據(jù)。排查后發(fā)現(xiàn)是LWIP的TX堆棧位置(下圖是設(shè)置為0x30004000)有問題,因?yàn)镽AM2 的32K已經(jīng)被ETH DMA用完了。改為0x2404B000,占用320K的RAM D1的末尾20KB就行了。同時(shí)在LD腳本把RAM D1 改小一點(diǎn),改為300K,防止編譯器占用我們需要的20K。STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)
LD腳本把RAM D1 改小一點(diǎn),改為300K,防止編譯器占用我們需要的20K。STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)
LD腳本把RAM D1 改小一點(diǎn),改為300K,防止編譯器占用最后20K。文章來源地址http://www.zghlxwxcb.cn/news/detail-417079.html

到了這里,關(guān)于STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32的以太網(wǎng)外設(shè)+PHY(LAN8720)使用詳解(5):MAC及DMA配置

    STM32的以太網(wǎng)外設(shè)+PHY(LAN8720)使用詳解(5):MAC及DMA配置

    stm32的ETH外設(shè)掛載在AHB1總線上,位于RCC_AHB1ENR的bit25-bit27: 相關(guān)語句如下: 直接調(diào)用ETH_DeInit函數(shù)來復(fù)位ETH外設(shè) 上述語句操作的寄存器如下: 首先設(shè)置位25為1復(fù)位以太網(wǎng)MAC(復(fù)位MAC寄存器到默認(rèn)值),然后設(shè)置為0取消復(fù)位。 首先調(diào)用ETH_SoftwareReset函數(shù)復(fù)位MAC的DMA 上述語句操

    2024年02月03日
    瀏覽(22)
  • STM32以太網(wǎng)通信-LWIP簡(jiǎn)介

    STM32以太網(wǎng)通信-LWIP簡(jiǎn)介

    LwIP全名:Light weight IP,意思是輕量化的TCP/IP協(xié)議,是瑞典計(jì)算機(jī)科學(xué)院(SICS)的Adam Dunkels 開發(fā)的一個(gè)小型開源的TCP/IP協(xié)議棧。 LwIP的設(shè)計(jì)初衷是:用少量的資源消耗實(shí)現(xiàn)一個(gè)較為完整的TCP/IP協(xié)議棧,其中“完整”主要指的是TCP協(xié)議的完整性,實(shí)現(xiàn)的重點(diǎn)是在保持TCP協(xié)議主要功能

    2024年02月07日
    瀏覽(24)
  • STM32的以太網(wǎng)外設(shè)+PHY(LAN8720)使用詳解(6):以太網(wǎng)數(shù)據(jù)接收及發(fā)送

    STM32的以太網(wǎng)外設(shè)+PHY(LAN8720)使用詳解(6):以太網(wǎng)數(shù)據(jù)接收及發(fā)送

    1.1.1 檢查是否接收到一幀完整報(bào)文 使用輪詢的方式接收以太網(wǎng)數(shù)據(jù)是一種簡(jiǎn)單但是效率低下的方法,為了保證及時(shí)處理以太網(wǎng)數(shù)據(jù)我們需要在主循環(huán)內(nèi)高頻輪詢是否接收到了以太網(wǎng)數(shù)據(jù)。輪詢的函數(shù)為ETH_CheckFrameReceived,內(nèi)容如下: 當(dāng)以太網(wǎng)幀大于我們?cè)O(shè)置的DMA描述符buffer大

    2024年01月23日
    瀏覽(33)
  • STM32+W5500實(shí)現(xiàn)以太網(wǎng)通信

    STM32+W5500實(shí)現(xiàn)以太網(wǎng)通信

    STM32系列32位微控制器基于Arm? Cortex?-M處理器,旨在為MCU用戶提供新的開發(fā)自由度。它包括一系列產(chǎn)品,集高性能、實(shí)時(shí)功能、數(shù)字信號(hào)處理、低功耗/低電壓操作、連接性等特性于一身,同時(shí)還保持了集成度高和易于開發(fā)的特點(diǎn)。本例采用STM32作為MCU。 W5500是一款全硬件TCP/

    2023年04月22日
    瀏覽(24)
  • STM32F407+LWIP+DP83848以太網(wǎng)驅(qū)動(dòng)移植

    STM32F407+LWIP+DP83848以太網(wǎng)驅(qū)動(dòng)移植

    ??最近有個(gè)項(xiàng)目上需要用到網(wǎng)絡(luò)功能,于是開始移植網(wǎng)絡(luò)相關(guān)代碼。在移植的過程中感覺好難,網(wǎng)上找各種資料都沒有和自己項(xiàng)目符合的,移植廢了廢了好的大勁。不過現(xiàn)在回頭看看,其實(shí)移植很簡(jiǎn)單,主要是當(dāng)時(shí)剛開始接觸網(wǎng)絡(luò),各種新的知識(shí)和概念撲面而來,加上LWI

    2024年02月12日
    瀏覽(18)
  • 【STM32F1】以太網(wǎng)通信之UDP/TCP實(shí)驗(yàn)

    在本實(shí)驗(yàn)中,開發(fā)板主控芯片通過 SPI 接口與 CH395Q 以太網(wǎng)芯片進(jìn)行通訊,從而完成對(duì) CH395Q 以太網(wǎng)芯片的功能配置、數(shù)據(jù)接收等功能,同時(shí)將 CH395Q 以太網(wǎng)芯片的 Socket0 配 置為 UDP 模式,并可通過按鍵發(fā)送 UDP 廣播數(shù)據(jù)至其他的 UDP 客戶端,也能夠接收其他 UDP 客戶端廣播的數(shù)

    2024年02月07日
    瀏覽(27)
  • STM32的以太網(wǎng)外設(shè)+PHY(LAN8720)使用詳解(2):硬件設(shè)計(jì)

    STM32的以太網(wǎng)外設(shè)+PHY(LAN8720)使用詳解(2):硬件設(shè)計(jì)

    在LAN8720上電或復(fù)位時(shí)會(huì)讀取一些特定引腳的電平,根據(jù)電平來進(jìn)行硬件配置。LAN8720的引腳分布如下: 注意,LAN8720有些引腳內(nèi)部自帶上/下拉,定義如下: LAN8720的PHYAD[0]用來配置PHY地址的bit0,當(dāng)接入了多個(gè)PHY時(shí)可以用來區(qū)分不同的PHY。該引腳自帶內(nèi)部下拉,同時(shí)我們也只用到

    2024年04月14日
    瀏覽(27)
  • STM32F407以太網(wǎng)DMA描述符和數(shù)據(jù)鏈路層收發(fā)數(shù)據(jù)

    STM32F407以太網(wǎng)DMA描述符和數(shù)據(jù)鏈路層收發(fā)數(shù)據(jù)

    本文主要介紹STM32F407單片機(jī)MAC內(nèi)核的DMA描述符,以及如何實(shí)現(xiàn)以太網(wǎng)二層的數(shù)據(jù)收發(fā)。這一篇先實(shí)現(xiàn)數(shù)據(jù)鏈路層的正常收發(fā),下一篇再去介紹如何把LWIP移植到單片機(jī)上。大部分資料都是把LWIP移植和以太網(wǎng)卡驅(qū)動(dòng)放在一起介紹,對(duì)新手不友好。所以我在這篇文章先把網(wǎng)卡驅(qū)動(dòng)

    2024年02月10日
    瀏覽(62)
  • STM32的以太網(wǎng)外設(shè)+PHY(LAN8720)使用詳解(1):ETH和PHY介紹

    STM32的以太網(wǎng)外設(shè)+PHY(LAN8720)使用詳解(1):ETH和PHY介紹

    STM32F4系列MCU內(nèi)部集成了一個(gè)以太網(wǎng)外設(shè)(ETH),可以通過介質(zhì)獨(dú)立接口(MII)或簡(jiǎn)化介質(zhì)獨(dú)立接口(RMII)和外部PHY(如LAN8720)相連實(shí)現(xiàn)MCU的聯(lián)網(wǎng)功能。 STM32F4系列的以太網(wǎng)外設(shè)(ETH)框圖如下: 以太網(wǎng)外設(shè)框圖中包含了MII、RMII、SMI三種接口,它們的詳細(xì)介紹如下: 1.2.1 介

    2024年01月23日
    瀏覽(22)
  • STM32的以太網(wǎng)外設(shè)+PHY(LAN8720)使用詳解(3):PHY寄存器詳解

    STM32的以太網(wǎng)外設(shè)+PHY(LAN8720)使用詳解(3):PHY寄存器詳解

    前面介紹到,站管理接口(SMI)允許應(yīng)用程序通過2線時(shí)鐘和數(shù)據(jù)線訪問任意PHY寄存器,同時(shí)該接口支持訪問最多32個(gè)PHY,也就是說PHY地址共有5位。 應(yīng)用程序可以從32個(gè)PHY中選擇一個(gè)PHY,然后從任意PHY包含的32個(gè)寄存器中選擇一個(gè)寄存器,發(fā)送控制數(shù)據(jù)或接收狀態(tài)信息。任意給

    2024年02月03日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包