電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 73|回復(fù): 0
收起左側(cè)

STM32F103驅(qū)動(dòng)ENC28J60實(shí)現(xiàn)裸機(jī)TCP/UDP通信方案

[復(fù)制鏈接]

563

主題

563

帖子

3387

積分

四級(jí)會(huì)員

Rank: 4

積分
3387
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-11-2 08:01:00 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

, T( g# X, J0 J; H1 Q點(diǎn)擊上方藍(lán)色字體,關(guān)注我們
! k! j' k1 p' h1 {6 I8 R4 E來源于粉絲提問。
. M; R9 f: l1 g: e6 Y& T; Y0 R7 {2 n7 Y

$ W1 |; V' I" M$ o" m0 ]) g* s2 U. @; x9 B( Y9 W. }' v2 b
這位朋友的項(xiàng)目中采用了STM32F103芯片和ENC28J60網(wǎng)絡(luò)適配器,通過SPI實(shí)現(xiàn)通信,目標(biāo)是開發(fā)不依賴OS的裸機(jī)程序,實(shí)現(xiàn)TCP和UDP協(xié)議的支持。. q* T7 B# r9 z* H7 P- p+ i$ i! @4 Y

1 {5 A; D$ A5 O先說結(jié)論:HAL庫不直接支持TCP/IP協(xié)議,因此需引入其他協(xié)議棧。5 W' \$ K3 c# ?7 q0 }
12 L: r$ s; K; ^% ~& W2 T
問題 1:HAL庫是否支持TCP/IP?
0 F  Z" t" v8 ]+ {+ \! eSTM32的HAL庫本身不直接支持TCP/IP協(xié)議。HAL庫主要提供對(duì)STM32芯片外設(shè)(如GPIO、SPI、UART等)的基礎(chǔ)控制接口,而不包含任何網(wǎng)絡(luò)協(xié)議棧實(shí)現(xiàn),因此無法直接用于TCP/IP通信。, P' x3 R# M( O. ^+ a

; B( [! R/ y8 p% |HAL庫的職責(zé)在于硬件層面上提供一種通用的、方便的硬件訪問方法,但它并不涉及較高級(jí)別的通信協(xié)議,比如TCP/IP。
; T$ ?4 J8 Z9 @( r3 F22 f3 M+ r  X- w/ J: s- J
問題 2:如果HAL不支持TCP/IP,那么用什么實(shí)現(xiàn)?2 k0 X! i- ^% J
由于HAL庫不支持TCP/IP協(xié)議,您需要引入一個(gè)適用于裸機(jī)環(huán)境的TCP/IP協(xié)議棧。以下是幾種常用方法:
7 P% H; r- ]3 X4 `: o
) [* B; e" Y' q" c2 `2 ^8 Z* WlwIP(Lightweight IP)協(xié)議棧/ V* F4 q; C- W' _- Y  Z

9 Y2 I, F0 F- O
  • 優(yōu)點(diǎn):相對(duì)成熟,文檔豐富,易于移植;開源,社區(qū)支持度高。
  • 缺點(diǎn):內(nèi)存占用相對(duì)較大(對(duì)于STM32F103的20KB SRAM需嚴(yán)格優(yōu)化),配置相對(duì)復(fù)雜。
  • 簡介:lwIP是一款開源、輕量級(jí)的TCP/IP協(xié)議棧,設(shè)計(jì)專注于資源受限的嵌入式系統(tǒng)。它支持TCP、UDP、ICMP等基本協(xié)議,是很多嵌入式網(wǎng)絡(luò)開發(fā)的首選。
  • 適用性:lwIP可以在裸機(jī)模式下運(yùn)行,并且已經(jīng)被廣泛用于STM32平臺(tái)中。其架構(gòu)模塊化,允許選擇性的編譯和裁剪,使得它可以適應(yīng)STM32F103這種資源有限的芯片。
  • 與ENC28J60適配:lwIP本身不直接支持ENC28J60,因此需要實(shí)現(xiàn)一個(gè)網(wǎng)卡驅(qū)動(dòng),將ENC28J60通過SPI接口接入到lwIP中。這需要在lwIP配置中定義ENC28J60的SPI驅(qū)動(dòng),主要包括發(fā)送、接收、初始化等函數(shù)的實(shí)現(xiàn)。* y6 C% \3 K. n, r  N, v
    [/ol]
    2 \' T8 ]5 A8 z) g3 {$ @

    : D0 R+ _7 _0 S! `9 ^2 JuIP協(xié)議棧. C  c( Q1 v7 W0 {! H1 \  d
    $ N' m: z4 u! s
  • 優(yōu)點(diǎn):內(nèi)存占用極低,代碼量少,便于移植。
  • 缺點(diǎn):不支持多連接,協(xié)議實(shí)現(xiàn)較為簡化,性能較低,主要適用于低速率、單連接的簡單應(yīng)用。
  • 簡介:uIP是由Adam Dunkels開發(fā)的極簡TCP/IP協(xié)議棧,專為低內(nèi)存的嵌入式系統(tǒng)設(shè)計(jì),目標(biāo)是在幾KB的RAM中實(shí)現(xiàn)基本的TCP/IP功能。
  • 適用性:uIP的代碼量更小,占用的內(nèi)存和計(jì)算資源少,非常適合STM32F103這種RAM有限的環(huán)境。
  • 與ENC28J60適配:由于uIP體積小巧,通常需要自行編寫與ENC28J60的驅(qū)動(dòng)接口代碼。
  • 和lwIP類似,需要編寫ENC28J60的SPI驅(qū)動(dòng)層,實(shí)現(xiàn)uIP的接口。
    ) J9 I9 l* o( P" c5 J5 a
    [/ol]
    2 K, D  H5 U7 \
    . s! a, h4 w2 g. Q' j
    自定義輕量級(jí)TCP/IP協(xié)議棧) M( @4 R0 V: B) j% e

    ( F$ R& r/ W7 _. w5 ]' r' G: V
  • 優(yōu)點(diǎn):極大地節(jié)省內(nèi)存和資源,簡化特定功能的實(shí)現(xiàn)。
  • 缺點(diǎn):開發(fā)周期長,維護(hù)困難,不適合較為復(fù)雜的網(wǎng)絡(luò)通信需求。
  • 簡介:針對(duì)非常特殊的應(yīng)用場景,可以選擇編寫一個(gè)定制的、極簡TCP/IP協(xié)議棧,專注于特定的功能(例如僅支持UDP或僅支持單連接的TCP)。
  • 適用性:在內(nèi)存極其緊張的情況下,可以手動(dòng)編寫僅包含所需功能的簡單協(xié)議棧。
  • 與ENC28J60適配:這種方式需要完整的驅(qū)動(dòng)和協(xié)議棧的實(shí)現(xiàn),并非通用方案,因此通常不建議初次嘗試網(wǎng)絡(luò)編程時(shí)使用。
    6 S' i4 O  {3 E4 t6 @
    [/ol]0 O4 S4 I9 i3 k" Z
    3/ u- m$ P' p' c% o1 {% a" L! j
    具體實(shí)現(xiàn)建議
    + A0 R+ @0 K7 m9 D8 ^推薦方法
    / \+ E# q9 X% \" O4 O: C
    , Y# E- @& ~/ G  h, u基于STM32F103的資源限制,lwIP是較為合適的選擇,但需要對(duì)配置進(jìn)行裁剪,關(guān)閉不必要的功能(如DNS、DHCP等),以減小內(nèi)存占用。
    . L3 v9 x' h# j2 h2 P; }
    ; |$ o- x; w" d: Z* V) Q同時(shí),需自行實(shí)現(xiàn)ENC28J60的驅(qū)動(dòng)代碼,建立SPI接口通信,確保數(shù)據(jù)收發(fā)的效率和穩(wěn)定性。
    ( a8 \6 d; x; ^
    * ?5 F# |/ z- s) X5 y
    ; S$ I. e, V+ X/ ]
    調(diào)試工具3 v4 d. C, @3 r, t2 l
    / f* }  `; P2 |/ i  n6 y# z, `
    在開發(fā)和調(diào)試過程中,“網(wǎng)絡(luò)調(diào)試助手”可以用于PC端測試下位機(jī)的TCP和UDP通信。% {4 B7 x( X; \
    + `& m) z1 _4 ]! i$ W
    可以通過這種方式測試lwIP或uIP棧的通信穩(wěn)定性、數(shù)據(jù)吞吐量,并確保下位機(jī)的響應(yīng)符合預(yù)期。
    % g/ C: r# v5 k% @
    ! f& T* |5 t) h* y+ Z3 Z. r: J
    4 R1 N; `5 l9 [$ A" x3 G$ }
    5 {0 e$ J2 c0 k7 |, t* g( I1 O點(diǎn)擊閱讀原文,更精彩~
  • 發(fā)表回復(fù)

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表