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

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

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

STM32F103驅(qū)動ENC28J60實現(xiàn)裸機TCP/UDP通信方案

[復(fù)制鏈接]

544

主題

544

帖子

3204

積分

四級會員

Rank: 4

積分
3204
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 昨天 08:01 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
/ i3 A3 {& }; Y$ g. b& `' p# V' p: ^
點擊上方藍(lán)色字體,關(guān)注我們
% U# h7 B1 M5 v來源于粉絲提問。
5 n# |7 O: |" I* y4 T  y& D
3 |7 C7 g# Y  b  ? ( u( V. G# F' u# F$ @
% O/ p! Q1 g, {( H5 j$ \2 y3 m7 Z
這位朋友的項目中采用了STM32F103芯片和ENC28J60網(wǎng)絡(luò)適配器,通過SPI實現(xiàn)通信,目標(biāo)是開發(fā)不依賴OS的裸機程序,實現(xiàn)TCP和UDP協(xié)議的支持。  x/ t- c8 P8 a7 @

. c" `3 q1 u4 d0 T# t' V: x先說結(jié)論:HAL庫不直接支持TCP/IP協(xié)議,因此需引入其他協(xié)議棧。
  ?& R8 B7 m/ ^& `; X17 P5 j. ]; l: Y; i
問題 1:HAL庫是否支持TCP/IP?( o1 w5 s2 v5 T0 A" o# H0 x0 C8 ~
STM32的HAL庫本身不直接支持TCP/IP協(xié)議。HAL庫主要提供對STM32芯片外設(shè)(如GPIO、SPI、UART等)的基礎(chǔ)控制接口,而不包含任何網(wǎng)絡(luò)協(xié)議棧實現(xiàn),因此無法直接用于TCP/IP通信。
/ T/ y6 J; u- D" J- I
3 ?: k. f" V1 p& r; U8 |HAL庫的職責(zé)在于硬件層面上提供一種通用的、方便的硬件訪問方法,但它并不涉及較高級別的通信協(xié)議,比如TCP/IP。4 [6 z# m$ {8 l) R* j
20 _4 f8 L' v0 o5 K5 H
問題 2:如果HAL不支持TCP/IP,那么用什么實現(xiàn)?: Q9 W! I9 J7 D3 r& k6 j* k
由于HAL庫不支持TCP/IP協(xié)議,您需要引入一個適用于裸機環(huán)境的TCP/IP協(xié)議棧。以下是幾種常用方法:
) d% M! {! p0 W4 Y1 Z" x, L. s- T# h, x% K  m. j' `, T
lwIP(Lightweight IP)協(xié)議棧% A/ s1 I( L$ C" a4 h! Q

% a/ ^" s7 D+ f6 [' e7 \2 J
  • 優(yōu)點:相對成熟,文檔豐富,易于移植;開源,社區(qū)支持度高。
  • 缺點:內(nèi)存占用相對較大(對于STM32F103的20KB SRAM需嚴(yán)格優(yōu)化),配置相對復(fù)雜。
  • 簡介:lwIP是一款開源、輕量級的TCP/IP協(xié)議棧,設(shè)計專注于資源受限的嵌入式系統(tǒng)。它支持TCP、UDP、ICMP等基本協(xié)議,是很多嵌入式網(wǎng)絡(luò)開發(fā)的首選。
  • 適用性:lwIP可以在裸機模式下運行,并且已經(jīng)被廣泛用于STM32平臺中。其架構(gòu)模塊化,允許選擇性的編譯和裁剪,使得它可以適應(yīng)STM32F103這種資源有限的芯片。
  • 與ENC28J60適配:lwIP本身不直接支持ENC28J60,因此需要實現(xiàn)一個網(wǎng)卡驅(qū)動,將ENC28J60通過SPI接口接入到lwIP中。這需要在lwIP配置中定義ENC28J60的SPI驅(qū)動,主要包括發(fā)送、接收、初始化等函數(shù)的實現(xiàn)。
    5 X. b$ d& Y- _( D$ B
    [/ol]' l/ v! q% G0 k" |
    " \% \' c* y$ d$ @! N' H
    uIP協(xié)議棧( @% w$ [! ]; e- c
    % N- `' _0 R1 N; \, r' q
  • 優(yōu)點:內(nèi)存占用極低,代碼量少,便于移植。
  • 缺點:不支持多連接,協(xié)議實現(xiàn)較為簡化,性能較低,主要適用于低速率、單連接的簡單應(yīng)用。
  • 簡介:uIP是由Adam Dunkels開發(fā)的極簡TCP/IP協(xié)議棧,專為低內(nèi)存的嵌入式系統(tǒng)設(shè)計,目標(biāo)是在幾KB的RAM中實現(xiàn)基本的TCP/IP功能。
  • 適用性:uIP的代碼量更小,占用的內(nèi)存和計算資源少,非常適合STM32F103這種RAM有限的環(huán)境。
  • 與ENC28J60適配:由于uIP體積小巧,通常需要自行編寫與ENC28J60的驅(qū)動接口代碼。
  • 和lwIP類似,需要編寫ENC28J60的SPI驅(qū)動層,實現(xiàn)uIP的接口。
    1 t/ o- g5 h  C7 D9 }# O
    [/ol]6 v: x6 d  t: o: N
    4 M. C  _5 `! s7 C
    自定義輕量級TCP/IP協(xié)議棧
    + G) [' C* h( ^; m/ G! C0 k9 A# n' T; y. [/ E" c
  • 優(yōu)點:極大地節(jié)省內(nèi)存和資源,簡化特定功能的實現(xiàn)。
  • 缺點:開發(fā)周期長,維護(hù)困難,不適合較為復(fù)雜的網(wǎng)絡(luò)通信需求。
  • 簡介:針對非常特殊的應(yīng)用場景,可以選擇編寫一個定制的、極簡TCP/IP協(xié)議棧,專注于特定的功能(例如僅支持UDP或僅支持單連接的TCP)。
  • 適用性:在內(nèi)存極其緊張的情況下,可以手動編寫僅包含所需功能的簡單協(xié)議棧。
  • 與ENC28J60適配:這種方式需要完整的驅(qū)動和協(xié)議棧的實現(xiàn),并非通用方案,因此通常不建議初次嘗試網(wǎng)絡(luò)編程時使用。$ ^2 D$ t( Q' L( L8 k: [
    [/ol]
      C" ?4 D% V4 r3 d$ V7 k6 ~/ m4 p3$ {* c0 w/ x$ D* Y3 b
    具體實現(xiàn)建議
    $ U& V* y% Q8 S2 U推薦方法+ L% w+ x- L; z# c: l

    ' Q3 \* [  |; p# L6 y基于STM32F103的資源限制,lwIP是較為合適的選擇,但需要對配置進(jìn)行裁剪,關(guān)閉不必要的功能(如DNS、DHCP等),以減小內(nèi)存占用。- e4 ^3 _* d2 d' V8 d# y% y. H/ ~: ?
    ! e) H0 X" X1 T! X6 O! i2 R
    同時,需自行實現(xiàn)ENC28J60的驅(qū)動代碼,建立SPI接口通信,確保數(shù)據(jù)收發(fā)的效率和穩(wěn)定性。2 l9 }, G' c" ^
    ) @; h! E+ [# c. S+ k/ ?: l* t( J

    6 {# a% I& U! ^調(diào)試工具
    1 n; v3 f  d3 ~! `6 Y0 O' {5 \
    在開發(fā)和調(diào)試過程中,“網(wǎng)絡(luò)調(diào)試助手”可以用于PC端測試下位機的TCP和UDP通信。9 q) d- R1 H) T6 A2 ?( J* Z

    1 c. L. {5 x. f) \可以通過這種方式測試lwIP或uIP棧的通信穩(wěn)定性、數(shù)據(jù)吞吐量,并確保下位機的響應(yīng)符合預(yù)期。
    ( J' F' K) c1 J, |4 C" N' k6 o8 l+ ^

    5 h& _: ~4 Z3 t , k6 p) E, d( I+ g: `: _6 v$ R
    點擊閱讀原文,更精彩~
  • 回復(fù)

    使用道具 舉報

    發(fā)表回復(fù)

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

    本版積分規(guī)則

    關(guān)閉

    站長推薦上一條 /1 下一條


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