|
yx12ksqzpju64078633910.gif (60.41 KB, 下載次數(shù): 1)
下載附件
保存到相冊
yx12ksqzpju64078633910.gif
2024-11-2 22:09 上傳
; p5 `4 j4 P6 d; Q! ?. D
點擊上方藍色字體,關(guān)注我們
7 U% \- T4 ^7 M) \' E+ W r來源于粉絲提問。3 f' b1 `- d& y5 N( O* L
$ g3 R b& N- k# ]% y- {
d5yxkomrvpp64078634010.png (82.89 KB, 下載次數(shù): 1)
下載附件
保存到相冊
d5yxkomrvpp64078634010.png
2024-11-2 22:09 上傳
+ R1 b: Y" c. E) [8 y9 k
. N, U5 `" M9 l這位朋友的項目中采用了STM32F103芯片和ENC28J60網(wǎng)絡(luò)適配器,通過SPI實現(xiàn)通信,目標是開發(fā)不依賴OS的裸機程序,實現(xiàn)TCP和UDP協(xié)議的支持。) G5 O+ j9 o+ a
$ l6 s" @4 }4 h; e先說結(jié)論:HAL庫不直接支持TCP/IP協(xié)議,因此需引入其他協(xié)議棧。1 K' P* B& }/ F& W5 H
1
, _' G! Q4 M9 |+ k9 {/ M: ^, T問題 1:HAL庫是否支持TCP/IP?* @% U, [ ~9 m1 m0 `
STM32的HAL庫本身不直接支持TCP/IP協(xié)議。HAL庫主要提供對STM32芯片外設(shè)(如GPIO、SPI、UART等)的基礎(chǔ)控制接口,而不包含任何網(wǎng)絡(luò)協(xié)議棧實現(xiàn),因此無法直接用于TCP/IP通信。0 l) E6 U4 @* u8 ]# [
; i3 f/ @' e* j8 s
HAL庫的職責在于硬件層面上提供一種通用的、方便的硬件訪問方法,但它并不涉及較高級別的通信協(xié)議,比如TCP/IP。 K" c" |7 T! c# C/ q5 q# |
2
1 k6 t7 Z: V- F* o/ x% D# x問題 2:如果HAL不支持TCP/IP,那么用什么實現(xiàn)?5 U0 a* W4 M6 [; ]/ s* ^" U9 `
由于HAL庫不支持TCP/IP協(xié)議,您需要引入一個適用于裸機環(huán)境的TCP/IP協(xié)議棧。以下是幾種常用方法:! q- a9 c$ v7 E" n; A
# W) o0 q: i5 E7 S5 z# ]lwIP(Lightweight IP)協(xié)議棧
2 l, e8 H' ~ A+ q W
& w- v$ ~! e3 J \優(yōu)點:相對成熟,文檔豐富,易于移植;開源,社區(qū)支持度高。缺點:內(nèi)存占用相對較大(對于STM32F103的20KB SRAM需嚴格優(yōu)化),配置相對復雜。簡介: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)。 Q2 N4 a- O) o% }5 `& J
[/ol]
: f' h0 F/ L B0 H; D$ a% s6 }7 @. W# _9 Q0 s! p
uIP協(xié)議棧( |1 ^: D6 i: \; d- i3 @$ Q
3 n! s% j4 t3 i" M5 K* c
優(yōu)點:內(nèi)存占用極低,代碼量少,便于移植。缺點:不支持多連接,協(xié)議實現(xiàn)較為簡化,性能較低,主要適用于低速率、單連接的簡單應(yīng)用。簡介:uIP是由Adam Dunkels開發(fā)的極簡TCP/IP協(xié)議棧,專為低內(nèi)存的嵌入式系統(tǒng)設(shè)計,目標是在幾KB的RAM中實現(xiàn)基本的TCP/IP功能。適用性:uIP的代碼量更小,占用的內(nèi)存和計算資源少,非常適合STM32F103這種RAM有限的環(huán)境。與ENC28J60適配:由于uIP體積小巧,通常需要自行編寫與ENC28J60的驅(qū)動接口代碼。和lwIP類似,需要編寫ENC28J60的SPI驅(qū)動層,實現(xiàn)uIP的接口。$ E* J3 i |. q
[/ol]
% Q/ d& `! z% j) ]8 k$ G( G# [( a7 P6 v, [" w$ J7 H( h* a2 d
自定義輕量級TCP/IP協(xié)議棧0 d$ e3 m9 N, k; p) s# w2 k" l
; C$ Y9 ~( }3 J, n4 s優(yōu)點:極大地節(jié)省內(nèi)存和資源,簡化特定功能的實現(xiàn)。缺點:開發(fā)周期長,維護困難,不適合較為復雜的網(wǎng)絡(luò)通信需求。簡介:針對非常特殊的應(yīng)用場景,可以選擇編寫一個定制的、極簡TCP/IP協(xié)議棧,專注于特定的功能(例如僅支持UDP或僅支持單連接的TCP)。適用性:在內(nèi)存極其緊張的情況下,可以手動編寫僅包含所需功能的簡單協(xié)議棧。與ENC28J60適配:這種方式需要完整的驅(qū)動和協(xié)議棧的實現(xiàn),并非通用方案,因此通常不建議初次嘗試網(wǎng)絡(luò)編程時使用。
* X8 l4 v c: A[/ol]
$ {* q8 D! v; [& {" w% u3
U& \" T2 A; O/ }; O# X; N' d具體實現(xiàn)建議% e! V' s7 G2 C3 [
推薦方法
! m* ~5 c$ K+ c7 {$ x& v5 n. n- V6 o& M h% V4 ^4 J8 W! K
基于STM32F103的資源限制,lwIP是較為合適的選擇,但需要對配置進行裁剪,關(guān)閉不必要的功能(如DNS、DHCP等),以減小內(nèi)存占用。4 k T9 Q" m; ?# t, H- c1 i1 y
7 a8 C# C% w4 R% f: G( [' ^
同時,需自行實現(xiàn)ENC28J60的驅(qū)動代碼,建立SPI接口通信,確保數(shù)據(jù)收發(fā)的效率和穩(wěn)定性。' a O! I( L, _# B
e' F7 j8 J/ [2 Z- k' e; ?
0 D$ I0 r$ H2 p8 V5 |: N
調(diào)試工具, f9 F9 n0 l6 u0 i+ j& M; a( D
9 O3 d V2 ~& n* j# F! J% a6 x$ s
在開發(fā)和調(diào)試過程中,“網(wǎng)絡(luò)調(diào)試助手”可以用于PC端測試下位機的TCP和UDP通信。* @8 d3 Z1 m2 M0 U9 l
, K* c3 ?0 G& u# I+ E6 v& ?) q
可以通過這種方式測試lwIP或uIP棧的通信穩(wěn)定性、數(shù)據(jù)吞吐量,并確保下位機的響應(yīng)符合預(yù)期。9 F, M0 ^1 B0 h7 H ?
0 Q7 B( W* u- I+ H, q
anukql4ggvl64078634110.jpg (71.14 KB, 下載次數(shù): 0)
下載附件
保存到相冊
anukql4ggvl64078634110.jpg
2024-11-2 22:09 上傳
: s7 E# W, J Z4 T d. F9 [+ O
kcle00o0bke64078634210.gif (45.46 KB, 下載次數(shù): 0)
下載附件
保存到相冊
kcle00o0bke64078634210.gif
2024-11-2 22:09 上傳
+ h5 y, C e* Q, ^點擊閱讀原文,更精彩~ |
|