OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4266|回复: 4

STM32H743与LAN8720A初始化

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2017-1-5
在线时间
7 小时
发表于 2022-1-12 13:39:58 | 显示全部楼层 |阅读模式
本帖最后由 tzzzzi 于 2022-1-12 13:51 编辑

前提:使用阿波罗底板初始化LAN8720A没问题;自己按照正点原子原理图做了一块系统板(带网口,带内存);LAN8720A使用的是IO引脚复位(使用PB10)。
         1)使用正点原子的程序调试网口程序时调不通;
         int32_t LAN8720_Init(void)
        {         
                ......
                INTX_DISABLE();                                      //关闭所有中断,复位过程不能被打断!
                //PCF8574_WriteBit(ETH_RESET_IO,1);       //硬件复位
                //改成自定义IO口复位
                HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_SET);
                delay_ms(100);
                //PCF8574_WriteBit(ETH_RESET_IO,0);       //复位结束
                //改成自定义IO口复位
                HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET);
                delay_ms(100);
                INTX_ENABLE();                                       //开启所有中断
                ......
                HAL_ETH_Init(&LAN8720_ETHHandle);      //初始化ETH
                ......
          }
          void HAL_ETH_MspInit(ETH_HandleTypeDef *heth)
          {
        GPIO_InitTypeDef GPIO_Initure;
        __HAL_RCC_GPIOA_CLK_ENABLE();           //开启GPIOA时钟
        __HAL_RCC_GPIOB_CLK_ENABLE();           //开启GPIOB时钟
        __HAL_RCC_GPIOC_CLK_ENABLE();           //开启GPIOC时钟
        __HAL_RCC_GPIOG_CLK_ENABLE();           //开启GPIOG时钟
        __HAL_RCC_ETH1MAC_CLK_ENABLE();         //使能ETH1 MAC时钟
        __HAL_RCC_ETH1TX_CLK_ENABLE();          //使能ETH1发送时钟
        __HAL_RCC_ETH1RX_CLK_ENABLE();          //使能ETH1接收时钟
        //在网口IO中初始化复位脚
        GPIO_Initure.Pin=GPIO_PIN_10;
        GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;
        GPIO_Initure.Pull=GPIO_PULLUP;
        GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;
        HAL_GPIO_Init(GPIOB,&GPIO_Initure);
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET);
        ......
          }
这样的思路看起来没毛病;但程序就是调不通。其实这是因为PB10还未初始化就被使用的原因;
正确的做法是:
         int32_t LAN8720_Init(void)
        {         
                GPIO_InitTypeDef GPIO_Initure;                __HAL_RCC_GPIOB_CLK_ENABLE();          //开启GPIOB时钟
                GPIO_Initure.Pin=GPIO_PIN_10;
                GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;
                GPIO_Initure.Pull=GPIO_PULLUP;
                GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;
                HAL_GPIO_Init(GPIOB,&GPIO_Initure);
                ......
                INTX_DISABLE();                                      //关闭所有中断,复位过程不能被打断!
                //PCF8574_WriteBit(ETH_RESET_IO,1);       //硬件复位
                //改成自定义IO口复位
                HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_SET);
                delay_ms(100);
                //PCF8574_WriteBit(ETH_RESET_IO,0);       //复位结束
                //改成自定义IO口复位
                HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET);
                delay_ms(100);
                INTX_ENABLE();                                       //开启所有中断
                ......
                HAL_ETH_Init(&LAN8720_ETHHandle);       //初始化ETH
                ......
          }





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

890

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1477
金钱
1477
注册时间
2020-8-19
在线时间
335 小时
发表于 2022-1-12 15:52:35 | 显示全部楼层
有一种可能就是你的硬件有问题
回复 支持 反对

使用道具 举报

13

主题

644

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1976
金钱
1976
注册时间
2021-4-16
在线时间
505 小时
发表于 2022-1-12 17:49:44 | 显示全部楼层
开发板没问题的话,那只能是硬件问题了
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2017-1-5
在线时间
7 小时
 楼主| 发表于 2022-1-17 13:46:46 | 显示全部楼层
问题解决了;发帖只是告诉和我遇到相同情况的朋友,要注意正点原子的程序的网口IO初始化的顺序问题。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2022-2-7
在线时间
0 小时
发表于 2022-2-7 12:47:40 | 显示全部楼层
tzzzzi 发表于 2022-1-17 13:46
问题解决了;发帖只是告诉和我遇到相同情况的朋友,要注意正点原子的程序的网口IO初始化的顺序问题。

你那解决了吗,怎么解决的说一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 02:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表