硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2634|回复: 4
收起左侧

[RL-TCPnet] f107的init_ethernet()问题

[复制链接]

4

主题

17

回帖

29

积分

新手上路

积分
29
发表于 2019-12-23 20:32:24 | 显示全部楼层 |阅读模式
本帖最后由 lcf144103 于 2019-12-23 20:59 编辑

PHY是DP83848C,到这里就直接进入死循环了,while (ETH->DMABMR & DBMR_SR);

硬汉哥说是所有的内核时钟域完成复位值就为0,我这是哪里出了问题啊。。。


void init_ethernet (void) {
  /* Initialize the ETH ethernet controller. */
  U32 regv,tout,id1,id2;
        
      /* Reset Ethernet MAC */  RCC->AHBRSTR  |= 0x00004000;
        /* Enable RMII, remap RX pins to PD8 .. PD10 */
  AFIO->MAPR   |= 0x00A00000;
  RCC->AHBRSTR  &=~0x00004000;
        
  /* Enable clock for MAC. */
  RCC->AHBENR  |= 0x0001C000;
        
/* Enable clock for Port A,B,C,D and Alternate function */
  RCC->APB2ENR |= 0x0000003D;
#ifdef STM3210C
  /* Use MII on STM3210C-EVAL board. */

  /* Remap MII RX pins to PD8 .. PD12 */
  AFIO->MAPR   |= 0x00200000;

  /* Configure Port A ethernet pins. */
  GPIOA->CRL   &= 0xFFFF0000;
  GPIOA->CRL   |= 0x00004B44;
  GPIOA->CRH   &= 0xFFFFFFF0;
  GPIOA->CRH   |= 0x0000000B;

  /* Configure Port B ethernet pins */
  GPIOB->CRH   &= 0xFF0000F0;
  GPIOB->CRH   |= 0x00BBB40B;

  /* Configure Port C ethernet pins */
  GPIOC->CRL   &= 0xFFFF000F;
  GPIOC->CRL   |= 0x00004BB0;

  /* Configure Port D ethernet pins */
  GPIOD->CRH   &= 0xFFF00000;
  GPIOD->CRH   |= 0x00044444;
#else
  /* Use RMII on MCBSTM32C evaluation board. */



  /* Configure Port A ethernet pins. */
  GPIOA->CRL   &= 0xFFFFF00F;
  GPIOA->CRL   |= 0x00000B40;

  /* Configure Port B ethernet pins */
  GPIOB->CRH   &= 0xFF000FFF;
  GPIOB->CRH   |= 0x00BBB000;

  /* Configure Port C ethernet pins */
  GPIOC->CRL   &= 0xFFFFFF0F;
  GPIOC->CRL   |= 0x000000B0;

  /* Configure Port D ethernet pins */
  GPIOD->CRH   &= 0xFFFFF000;
  GPIOD->CRH   |= 0x00000444;
#endif

  ETH->DMABMR  |= DBMR_SR;
  while (ETH->DMABMR & DBMR_SR);
//到这里就进入了死循环  这是为啥啊。。。想不通。。。。
......
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2019-12-24 09:24:22 | 显示全部楼层
卡死在这里的话,还没有到PHY芯片初始化呢,如果RMII接口,有个共享时钟的,你测试下你这个50MHz的时钟是不是 有问题。
回复

使用道具 举报

4

主题

17

回帖

29

积分

新手上路

积分
29
 楼主| 发表于 2019-12-24 11:55:27 | 显示全部楼层
eric2013 发表于 2019-12-24 09:24
卡死在这里的话,还没有到PHY芯片初始化呢,如果RMII接口,有个共享时钟的,你测试下你这个50MHz的时钟是不 ...

没错,搞了一早上,确实是时钟问题。st的驱动是设置PLL3时钟,配置为由引脚pa8提供时钟。应该也有其它给phy提供时钟方法吧,我去看看。。下面是st的驱动
//配置pa8
/* MCO pin configuration------------------------------------------------- */
  /* Configure MCO (PA8) as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
//pll3时钟
/* Mode RMII with STM3210C-EVAL */
  GPIO_ETH_MediaInterfaceConfig(GPIO_ETH_MediaInterface_RMII);

  /* Set PLL3 clock output to 50MHz (25MHz /5 *10 =50MHz) */
  RCC_PLL3Config(RCC_PLL3Mul_10);
  /* Enable PLL3 */
  RCC_PLL3Cmd(ENABLE);
  /* Wait till PLL3 is ready */
  while (RCC_GetFlagStatus(RCC_FLAG_PLL3RDY) == RESET)
  {}

  /* Get PLL3 clock on PA8 pin (MCO) */
  RCC_MCOConfig(RCC_MCO_PLL3CLK);

回复

使用道具 举报

4

主题

17

回帖

29

积分

新手上路

积分
29
 楼主| 发表于 2019-12-24 14:55:43 | 显示全部楼层
总结一下。大家看下是不是这样

我配置了f207跟f107两块板子。看原理图,207自带50M晶振,所以不需要板子的MCO(PA8引脚)提供时钟,而107没有,必须使用MCO引脚提供时钟。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2019-12-24 21:33:45 | 显示全部楼层
lcf144103 发表于 2019-12-24 14:55
总结一下。大家看下是不是这样

我配置了f207跟f107两块板子。看原理图,207自带50M晶振,所以不需要板子 ...

是这样的。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-14 17:12 , Processed in 0.156941 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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