RT-Thread项目AT32F437调试LAN8720以太网芯片遇到的问题

本文介绍了在RT-Thread项目中配置以太网LAN8720的过程,包括添加PHY_USING_LAN8720A宏、修改寄存器定义以解决编译错误,以及设置EMAC速度和双工模式以实现完整配置。
摘要由CSDN通过智能技术生成

1.新建项目后找到board.h中的ETH CONFIG BEGIN,开启以太网配置。

2.找到phy_reset()并修改其中复位引脚至自己的板卡。这里我的与历程相同,无需修改。

3.找到at32_msp_emac_init(void *instance)并根据自己的板卡修改。

4.配置iwIp组件。

        1)使能以太网物理层设备驱动程序

        2)配置如下,注意红线框住处不能使能,否则IPV4配置无法生效。

5.编译报错。error: 'PHY_CONTROL_REG' undeclared (first use in this function); did you mean 'PHY_BASIC_CONTROL_REG'?

问题发现:

经查,我所使用的RT-Thread项目中,虽board.h头文件中存在LAN8720头文件的宏定义,但该工程中并没有对LAN8720相关的寄存器做定义,以至于上图报错。

解决方法:

将下列代码复制到drv_emac.h中。如下图,复制后编译即可(下列代码可能因网页格式问题,复制进RT-thread中会报错,需要将空格删除)。

#elif defined (PHY_USING_LAN8720A)
    #define PHY_CONTROL_REG               (0x00)/*!< basic mode control register 1 等价于 basic_control_reg*/
    #define PHY_STATUS_REG                (0x01)/*!< basic mode status register 1 等价于 PHY_BASIC_STATUS_REG*/
    #define PHY_SPECIFIED_CS_REG          (0x1FU)/*!< phy status register 22 读取这个寄存器, 获取连接状态*/
    /* phy control register */
    #define PHY_AUTO_NEGOTIATION_BIT      (0x1000)/*!< enable auto negotiation 基础控制寄存器上, 写了这个寄存器位, 就代表使能自动协商了 */
    // #define PHY_LOOPBACK_BIT              (0x4000)     /*!< enable loopback */
    #define PHY_RESET_BIT                 (0x8000)/*!< reset phy 软件复位的寄存器位, 对的*/
    /* phy status register */
    #define PHY_LINKED_STATUS_BIT         (0x0004)/*!< link status 基础状态寄存器读取来的, 0x4*/
    #define PHY_NEGO_COMPLETE_BIT         (0x0020)/*!< auto negotiation complete 基础状态寄存器读取来的, 没问题 */
    #define PHY_DUPLEX_MODE               (1<<4) //(0x0004)/*!< x----  full duplex mode 特别状态寄存器, 2位 10MBbit 3 位 100m , 4位表示半全双工 */
    #define PHY_SPEED_MODE                (1<<2) //)(0x0002)/*!< -10 mbps 标识位  51页 */
    /*  the phy interrupt source flag register. */
    #define PHY_INTERRUPT_FLAG_REG        0x1DU  /* 数据手册上为 interrupt souce register 第42页 */
    // #define PHY_LINK_CHANGE_FLAG          (1<<13)  8720 没有用到这玩意
    /*  the phy interrupt control register. */
    //#define PHY_INTERRUPT_CTRL_REG        0x11U 没有这玩意, 只有dp83848 有
    // #define PHY_INTERRUPT_EN              ((1<<0)|(1<<1))//没有这玩意, 只有dp83848 有
    /*  the phy interrupt mask register. */
    #define PHY_INTERRUPT_MASK_REG         0x1EU //
#endif

复制进来后如下图。

6.此时编译无问题,配置项仍不全面,须添加下图代码配置。

7.烧录运行,ifconfig命令使用参考

love潇潇熊的博客
rt-thread studio中添加lan8720网络驱动_rt-thread studio cube mx lan8720a-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值