jzgpgmtvfz564087473522.png
; f) p/ i% i5 H+ C
% P4 _. I3 J, [# m I/ O9 a- K由于有国产化要求,需要将以太网及主控芯片全部换成国产,参考例程是基于GD32F450的,在移植过程中遇到一些容易忽略的地方,导致程序卡在gd32fxx_enet.c中enet_phy_config的位置。将GD32F450上的代码全部移植到GD32F470平台后,一直卡在卡在gd32fxx_enet.c中enet_phy_config,经过排查发现GD32的官方库文件也需要修改,分别为gd32f4xx_enet.h和gd32f4xx_enet.c。( h$ F( H+ D6 j! P7 h j4 K" U
需要修改的地方如下:. w3 I9 Q. i. r) Q2 J
1,如下添加宏定义:#ifndef _PHY_H_#define DP83848 0#define LAN8700 1#define SR8201F 2#define PHY_TYPE SR8201F
& o/ a1 H2 H: f+ i- e5 B: V) n4 \3 V#define PHY_ADDRESS ((uint16_t)0x3U) /*!5 L* Z. h0 Y: B
2,在头文件88行位置添加如下内容:9 {, p) K' D6 i+ n& N1 U( [! a
#if(PHY_TYPE == LAN8700) #define PHY_SR 31U /*!#define PHY_SPEED_STATUS ((uint16_t)0x0004) /*!#define PHY_DUPLEX_STATUS ((uint16_t)0x0010) /*!#elif(PHY_TYPE == DP83848)#define PHY_SR 16U /*!#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!#elif(PHY_TYPE == SR8201F)#define PHY_SR PHY_REG_BCR /*!#define PHY_SPEED_STATUS ((uint16_t)0x2000) /*!#define PHY_DUPLEX_STATUS ((uint16_t)0x0100) /*!#endif /* PHY_TYPE */
' R- g( O, R. ?3,修改函数ErrStatus enet_init,修改内容如下图所示& ~3 X/ m, b* Y! o# x
bdwd53xtjhd64087473622.png
5 p5 e/ I% |: S! e2 P/ n; F+ v* a; _ Z8 [! J' u9 S
4,修改static void enet_default_init,修改内容如下图所示:7 }: b8 i* `& ]' s$ g4 y1 f: Y8 g
pj4brcc00er64087473722.png
# Y6 j+ o _' ~$ x" m; k, d0 U# \$ u+ B$ \1 G# r/ U: b
修改以上内容后,程序可以正确运行:
( i7 g& d+ W! t( H, K
pddyblwvxz364087473822.png
; n# {# w' O4 l) D) J9 G
==========
- b& d$ Z6 o/ k0 F2 b& O往期回顾:【蓝桥杯更新通知】
' W1 E9 @& Y6 W) X! R传输距离达到1500米的485电路
2 h" L( z! o; T) S! I) t结构体与指针的关系- g y$ P! X0 [% _
琢磨了一天的CAN协议" t+ A8 j( z- U
什么是Modbus协议?7 \! i2 L& s( |$ `
============作者:探索者515平台:CSDN链接:
4 k5 |6 i9 R; M- E) x: I2 z" B. ]" q
iojdpu1he5564087473922.png
: }( J9 w( w& ]4 A* {) {, X# l
1 T6 @% @% j8 R6 F3 P5 {" u- M
e3jvjul2a5l64087474023.png
9 L; W! f' w9 f: i4 F7 A; d" ?; H! |! Q# u: S7 G( Z
why23zcsnyp64087474123.png
|