RT-Thread中Lan8720和lwip协议栈的使用

开发环境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,stm32f4的资源包为0.2.2,agile modbus软件包版本为v1.1.2。新建选择芯片工程。
修改工程使用外部晶振,可参考第一篇文章 rt-thread studio新建stm32f407工程 。
查看野火工程的资料,可知道芯片的使用引脚为:
pg11 : rmii_tx_en;
pg13 : rmii_txd0;
pg14 : rmii_txd1;
pc5 : rmii_rxd1;
pc4 : rmii_rxd0;
pa7 : rmii_crsdv;
pa1 : rmii_ref_clk;
pc1 : rmii_mdc;
pa2 : rmii_mdio;
复位脚 :nrst脚。
接线方式: 笔记本连接路由器,野火开发板也连接路由器。
根据文档需要做的步骤如下:
/*if you want to use eth you can use the following instructions.
*
step 1, define macro related to the ethsuch as bsp_using_ethstep 2, copy your eth init function from stm32xxxx_hal_msp.c generated by stm32cubemx to the end if board.c filesuch as void hal_eth_mspinit(eth_handletypedef* heth)step 3, modify your stm32xxxx_hal_config.h file to support eth peripherals. define macro related to the peripheralssuch as #define hal_eth_module_enabledstep 4, config your phy typesuch as #define phy_using_lan8720a#define phy_using_dm9161cep#define phy_using_dp83848cstep 5, implement your phy reset function in the end of board.c filevoid phy_reset(void)step 6, config your lwip or other network stack
*/
按照要求修改即可,主要讲step2和step6的修改。step2 中的代码使用cubmx生成,生成的代码如下:
void hal_eth_mspinit(eth_handletypedef* ethhandle)
{
gpio_inittypedef gpio_initstruct = {0};
if(ethhandle->instance==eth)
{
/* user code begin eth_mspinit 0 /
/ user code end eth_mspinit 0 /
/ eth clock enable */
__hal_rcc_eth_clk_enable();
__hal_rcc_gpioc_clk_enable();
__hal_rcc_gpioa_clk_enable();
__hal_rcc_gpiog_clk_enable();
/**eth gpio configuration
pc1 ------> eth_mdc
pa1 ------> eth_ref_clk
pa2 ------> eth_mdio
pa7 ------> eth_crs_dv
pc4 ------> eth_rxd0
pc5 ------> eth_rxd1
pg11 ------> eth_tx_en
pg13 ------> eth_txd0
pg14 ------> eth_txd1
/
gpio_initstruct.pin = gpio_pin_1|gpio_pin_4|gpio_pin_5;
gpio_initstruct.mode = gpio_mode_af_pp;
gpio_initstruct.pull = gpio_nopull;
gpio_initstruct.speed = gpio_speed_freq_very_high;
gpio_initstruct.alternate = gpio_af11_eth;
hal_gpio_init(gpioc, &gpio_initstruct);
gpio_initstruct.pin = gpio_pin_1|gpio_pin_2|gpio_pin_7;
gpio_initstruct.mode = gpio_mode_af_pp;
gpio_initstruct.pull = gpio_nopull;
gpio_initstruct.speed = gpio_speed_freq_very_high;
gpio_initstruct.alternate = gpio_af11_eth;
hal_gpio_init(gpioa, &gpio_initstruct);
gpio_initstruct.pin = gpio_pin_11|gpio_pin_13|gpio_pin_14;
gpio_initstruct.mode = gpio_mode_af_pp;
gpio_initstruct.pull = gpio_nopull;
gpio_initstruct.speed = gpio_speed_freq_very_high;
gpio_initstruct.alternate = gpio_af11_eth;
hal_gpio_init(gpiog, &gpio_initstruct);
/ user code begin eth_mspinit 1 /
/ user code end eth_mspinit 1 */
}
}
step6 中是能lwip的协议栈,双击工程下的rt—thread settings,选择组件,选择lwip。右键lwip选择配置项进行配置,选择版本等参数。选择的是v2.0.2。保存配置,等待下载即可。
对程序进行编译,编译正常下载,查看打印信息。
在中断,可看到打印信息 lwip-2.0.2 initialized! 。使用ping指令ping 笔记本ip,可正常ping通。

遥控电扇系统红外遥控发射电路原理图
磁耦合环路的反向
2020年工业物联网有哪些看点
基于LM5036“智能”型半桥DC/DC电源设计方案
解决物联网世界中对更安全产品的需求
RT-Thread中Lan8720和lwip协议栈的使用
七段数码管引脚图
焊接符号标注实例及方法
“AI+车站联动”助力智能加氢站发展
汉能砷化镓(GaAs)技术再获重大突破
3D封装技术开始成为巨头角逐的重要战场
车载HID照明电路图
Porsche又发表了一款Mission E Cross Turismo概念车
网络编码在无线网络安全领域的研究
华为“智能基座”虚拟教研室联合工作组正式成立
3C电子家电柔性智造技术论坛 暨深圳-顺德产业融合协同发展座谈会成功举办
手机厂商积极布局物联网但标准不统一成为了新的挑战
硼扩成结对N型单晶硅电池电阻率的影响
台电首款HD720P高清摄像头粉墨上市
交流接触器为什么要用短路环