OpenEdv-开源电子网

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

STM32F107 LWIP RMII 不映射 调不通,求解决~~

[复制链接]

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
发表于 2016-7-17 22:31:38 | 显示全部楼层 |阅读模式
5金钱
第一次发帖,求助原子哥,以及论坛的各位大神帮忙下。我使用STM32107VCT6的板子,调试LWIP,在使用RMII的映射功能时,程序能跑,但是去掉映射功能后,就跑不起来了,怎么解决?PB11    ETH_MII_TX_EN
PB12    ETH_MII_TXD0
PB13    ETH_MII_TXD1
PD9     ETH_MII_RXD0---------------------------->改成 PC4
PD10   ETH_MII_RXD1---------------------------->改成 PC5
PD8     ETH_MII_RX_DV/ETH_RMII_CRS_DV------>改成 PA7
PC1     ETH_MII_MDC
PA2     ETH_MII_MDIO
PA1     ETH_MII_RX_CLK/ETH_RMII_REF_CLK(模块的晶振已经去掉了)
PA8     MCO

我修改前代码如下:
[mw_shl_code=c,true]void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* ETHERNET pins configuration */
  /* AF Output Push Pull:
  - ETH_MII_MDIO / ETH_RMII_MDIO: PA2
  - ETH_MII_MDC / ETH_RMII_MDC: PC1
  - ETH_MII_TXD2: PC2
  - ETH_MII_TX_EN / ETH_RMII_TX_EN: PB11
  - ETH_MII_TXD0 / ETH_RMII_TXD0: PB12
  - ETH_MII_TXD1 / ETH_RMII_TXD1: PB13
  - ETH_MII_PPS_OUT / ETH_RMII_PPS_OUT: PB5
  - ETH_MII_TXD3: PB8 */

  /* Configure PA2 as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Configure PC1, PC2 and PC3 as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  /* Configure PB5, PB8, PB11, PB12 and PB13 as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_11 |GPIO_Pin_12 | GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /**************************************************************/
  /*               For Remapped Ethernet pins                   */
  /*************************************************************/
  /* Input (Reset Value):
  - ETH_MII_CRS CRS: PA0
  - ETH_MII_RX_CLK / ETH_RMII_REF_CLK: PA1
  - ETH_MII_COL: PA3
  - ETH_MII_RX_DV / ETH_RMII_CRS_DV: PD8
  - ETH_MII_TX_CLK: PC3
  - ETH_MII_RXD0 / ETH_RMII_RXD0: PD9
  - ETH_MII_RXD1 / ETH_RMII_RXD1: PD10
  - ETH_MII_RXD2: PD11
  - ETH_MII_RXD3: PD12
  - ETH_MII_RX_ER: PB10 */

  /* ETHERNET pins remapp in STM3210C-EVAL board: RX_DV and RxD[3:0] */
  GPIO_PinRemapConfig(GPIO_Remap_ETH, ENABLE);

  /* Configure PA0, PA1 and PA3 as input */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Configure PB10 as input */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* Configure PC3 as input */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  /* Configure PD8, PD9, PD10, PD11 and PD12 as input */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOD, &GPIO_InitStructure); /**/

  /* ADC Channel14 config --------------------------------------------------------*/
  /* Relative to STM3210D-EVAL Board   */
  /* Configure PC.04 (ADC Channel14) as analog input -------------------------*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  /* 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);

}[/mw_shl_code]

我修改后如下:
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* ETHERNET pins configuration */
  /* AF Output Push Pull:
  - ETH_MII_MDIO / ETH_RMII_MDIO: PA2
  - ETH_MII_MDC / ETH_RMII_MDC: PC1
  - ETH_MII_TXD2: PC2
  - ETH_MII_TX_EN / ETH_RMII_TX_EN: PB11
  - ETH_MII_TXD0 / ETH_RMII_TXD0: PB12
  - ETH_MII_TXD1 / ETH_RMII_TXD1: PB13
  - ETH_MII_PPS_OUT / ETH_RMII_PPS_OUT: PB5
  - ETH_MII_TXD3: PB8 */

  /* Configure PA2 as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Configure PC1, PC2 and PC3 as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  /* Configure PB5, PB8, PB11, PB12 and PB13 as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_11 |GPIO_Pin_12 | GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /**************************************************************/
  /*               For Remapped Ethernet pins                   */
  /*************************************************************/
  /* Input (Reset Value):
  - ETH_MII_CRS CRS: PA0
  - ETH_MII_RX_CLK / ETH_RMII_REF_CLK: PA1
  - ETH_MII_COL: PA3
  - ETH_MII_RX_DV / ETH_RMII_CRS_DV: PD8
  - ETH_MII_TX_CLK: PC3
  - ETH_MII_RXD0 / ETH_RMII_RXD0: PD9
  - ETH_MII_RXD1 / ETH_RMII_RXD1: PD10
  - ETH_MII_RXD2: PD11
  - ETH_MII_RXD3: PD12
  - ETH_MII_RX_ER: PB10 */

  /* ETHERNET pins remapp in STM3210C-EVAL board: RX_DV and RxD[3:0] */
  //GPIO_PinRemapConfig(GPIO_Remap_ETH, ENABLE);

  //默认PD8->PA7
  /* Configure PA0, PA1 and PA3 as input */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3| GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Configure PB10 as input */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  //默认PD9 PD10 ->PC4 PC5
  /* Configure PC3 as input */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4 | GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  //关闭PD8 PD9 PD10 的映射功能
  /* Configure PD8, PD9, PD10, PD11 and PD12 as input */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOD, &GPIO_InitStructure); /**/

  /* ADC Channel14 config --------------------------------------------------------*/
  /* Relative to STM3210D-EVAL Board   */
  /* Configure PC.04 (ADC Channel14) as analog input -------------------------*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  /* 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);

}







最佳答案

查看完整内容[请看2#楼]

原子哥会么?我用的DP83848的模块,某宝买的,用的也是STM32F107的核心板,同样是某宝买的,因为官网的LWIP使用了映射,占用了一个串口,导致我串口不够用了,所以想去掉LWIP的映射功能,可是一去掉就不行了,以太网的灯还是照常亮,可是程序初始化就是不成功,网上找了好多,全是求助帖,没一个解决的~~郁闷死了!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-7-17 22:31:39 | 显示全部楼层
原子哥会么?我用的DP83848的模块,某宝买的,用的也是STM32F107的核心板,同样是某宝买的,因为官网的LWIP使用了映射,占用了一个串口,导致我串口不够用了,所以想去掉LWIP的映射功能,可是一去掉就不行了,以太网的灯还是照常亮,可是程序初始化就是不成功,网上找了好多,全是求助帖,没一个解决的~~郁闷死了!!
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-7-17 22:40:22 | 显示全部楼层
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-7-17 22:44:43 | 显示全部楼层
工程下载地址 ,这里不知道怎么回事,上传不了,链接:http://pan.baidu.com/s/1qY1UFCw 密码:slbc
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-7-17 23:10:33 | 显示全部楼层
帮顶
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-7-17 23:27:22 | 显示全部楼层


原子哥会么?我用的DP83848的模块,某宝买的,用的也是STM32F107的核心板,同样是某宝买的,因为官网的LWIP使用了映射,占用了一个串口,导致我串口不够用了,所以想去掉LWIP的映射功能,可是一去掉就不行了,以太网的灯还是照常亮,可是程序初始化就是不成功,网上找了好多,全是求助帖,没一个解决的~~郁闷死了!!
回复

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2016-7-18 10:10:05 | 显示全部楼层
开启AFIO时钟了吗?
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-7-18 11:34:20 | 显示全部楼层
FantaSy_ 发表于 2016-7-18 10:10
开启AFIO时钟了吗?

没事了,已经解决了,将代码中的ADC相关的代码去掉,然后将部分不相关的IO初始化代码也去掉,就好了,我的代码因为是参考金龙开发板的。
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-9-20
在线时间
5 小时
发表于 2016-9-20 16:30:39 | 显示全部楼层
GS1101923161 发表于 2016-7-18 11:34
没事了,已经解决了,将代码中的ADC相关的代码去掉,然后将部分不相关的IO初始化代码也去掉,就好了,我 ...

你好,我这边也遇到了这样的情况。我自己做了个板子,用的是PC4、PC5,代码参考的也是金龙的,按照你说的方法试了也不行,求指教!
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-9-20 17:26:00 | 显示全部楼层
zsp1 发表于 2016-9-20 16:30
你好,我这边也遇到了这样的情况。我自己做了个板子,用的是PC4、PC5,代码参考的也是金龙的,按照你说的 ...

将金龙的代码里面与LWIP无关的代码都删除掉,就可以用了,什么ADC的,和一些无关的IO初始化,然后只要去掉金龙代码里面的端口映射,以及修改下初始化IO,就OK了。主要还是那个ADC代码影响了程序
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-9-20
在线时间
5 小时
发表于 2016-9-20 17:31:50 | 显示全部楼层
GS1101923161 发表于 2016-9-20 17:26
将金龙的代码里面与LWIP无关的代码都删除掉,就可以用了,什么ADC的,和一些无关的IO初始化,然后只要去 ...

你好,方便加个QQ吗,3249779034,谢了啊
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-9-20 17:36:11 | 显示全部楼层
zsp1 发表于 2016-9-20 16:30
你好,我这边也遇到了这样的情况。我自己做了个板子,用的是PC4、PC5,代码参考的也是金龙的,按照你说的 ...

这里有个根据金龙的程序改的STM32F107.C的代码,有2个,一个是带映射的,一个是不带映射的,具体哪个是映射的,哪个不是映射的,你看下代码吧,我也忘记了 stm32f107.zip (6.57 KB, 下载次数: 402)
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-9-20
在线时间
5 小时
发表于 2016-9-20 19:40:09 | 显示全部楼层
GS1101923161 发表于 2016-9-20 17:36
这里有个根据金龙的程序改的STM32F107.C的代码,有2个,一个是带映射的,一个是不带映射的,具体哪个是映 ...

按照你说的实现了。但是为什么用PC4、PC5的时候,一定要把PD8改为PA7?
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-9-21 08:29:15 | 显示全部楼层
zsp1 发表于 2016-9-20 19:40
按照你说的实现了。但是为什么用PC4、PC5的时候,一定要把PD8改为PA7?

我用的是2个板子,板子上这个接口有点不一样
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-9-20
在线时间
5 小时
发表于 2016-9-21 08:32:55 | 显示全部楼层
GS1101923161 发表于 2016-9-21 08:29
我用的是2个板子,板子上这个接口有点不一样

我自己画的板子是PD8,死活不行,不知道为啥啊
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-9-21 08:54:52 | 显示全部楼层
zsp1 发表于 2016-9-21 08:32
我自己画的板子是PD8,死活不行,不知道为啥啊

去看下数据手册中对于端口映射的说明,可能是PD8也做了映射,不记得了~~
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-9-20
在线时间
5 小时
发表于 2016-9-21 09:05:58 | 显示全部楼层
GS1101923161 发表于 2016-9-21 08:54
去看下数据手册中对于端口映射的说明,可能是PD8也做了映射,不记得了~~

好的,多谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 22:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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