OpenEdv-开源电子网

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

求助:ENC28J60接SPI1初始化失败问题

[复制链接]

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2014-3-6
在线时间
31 小时
发表于 2014-3-18 11:16:00 | 显示全部楼层 |阅读模式

最近用STM32F103VE的SPI1做 ENC28J60测试的时候,运行程序卡在初始化上面。
原来的程序用的是SPI2,
原来引脚
CS    INT    MISO   MOSI   SCK    RST
PG8   PD2    B14   PB15   PB13   PG6
现在的引脚
CS    INT    MISO   MOSI   SCK    RST

PC12  C1    A6    A7    A5    B1

修改之后的程序:
    SPI_InitTypeDef SPI_InitStructure;
   GPIO_InitTypeDef GPIO_InitStructure;
   RCC_APB1PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;  
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_SetBits(GPIOB,GPIO_Pin_1);

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_12;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_Init(GPIOC, &GPIO_InitStructure);
   GPIO_SetBits(GPIOC,GPIO_Pin_1|GPIO_Pin_12);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_Init(GPIOA, &GPIO_InitStructure);
   GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);

   SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
   SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
   SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
   SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
   SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
   SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
   SPI_InitStructure.SPI_CRCPolynomial = 7;
   SPI_Init(SPI1, &SPI_InitStructure);

   SPI_Cmd(SPI1, ENABLE);
    SPI1_ReadWriteByte(0xff);

在ENC28J60.h里
#define ENC28J60_CS PCout(12) //ENC28J60片选信号
#define ENC28J60_RST PBout(1) //ENC28J60复位信号

这款MCU的RAM只有20k,我在C/C++上修改成了STM32F10X_MD,USE_STDPERIPH_DRIVER,并在工程添加了startup_stm32f10x_md.s文件
用的是TIM3时钟。


运行之后程序一直卡在这个地方
while(!(ENC28J60_Read(ESTAT)&ESTAT_CLKRDY)&&retry<500)//等待时钟稳定
{
retry++;
delay_ms(1);
};
if(retry>=500)return 1;//ENC28J60初始化失败

网口的绿灯一直亮着,黄灯会偶尔闪烁

本人初学STM32,求各位大神给看看是不是哪里有问题?



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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-18 17:00:39 | 显示全部楼层
回复【楼主位】xiaosi204:
---------------------------------
通过杜邦线连接的?
还是直接ENC做在板子上了?
供电足不足?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2014-3-6
在线时间
31 小时
 楼主| 发表于 2014-3-19 14:25:11 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原来那个是ENC28J60是直接焊在板子上的,配置了不行。后面整了一块ENC28J60模块(杜邦线引出的),用在SPI2接口上可以使用,但是接在SPI1上初始化就不行。后来我就干脆把SPI的MISO,MOSI和SCK从SPI2换到SPI1引脚上,其它的引脚不变动。程序配置SPI1初始化也是卡在初始化失败。。。
回复 支持 反对

使用道具 举报

22

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-6-14
在线时间
0 小时
发表于 2014-3-21 18:02:17 | 显示全部楼层
回复【3楼】xiaosi204:
---------------------------------
回复【3楼】xiaosi204:
---------------------------------
回复【3楼】xiaosi204:
---------------------------------
我也遇到同样的问题,现在我测试是只用了STM32做客服端,运行程序一直在运行之后程序一直卡在这个地方
while(!(ENC28J60_Read(ESTAT)&ESTAT_CLKRDY)&&retry<500)//等待时钟稳定
{
retry++;
delay_ms(1);
};
if(retry>=500)return 1;//ENC28J60初始化失败。
检测了单步跟踪发现还是初始化失败。不知道为什么!原子哥!
越是自由的环境中越要自律
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-21 18:58:38 | 显示全部楼层
回复【4楼】bingge191:
---------------------------------
你这是初始化都没过,你的测试平台是?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

22

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-6-14
在线时间
0 小时
发表于 2014-3-21 21:50:49 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
测试平台就是基于STM32F103CBT6的串口转以太网模块。
越是自由的环境中越要自律
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-22 00:12:50 | 显示全部楼层
回复【6楼】bingge191:
---------------------------------
自己做的还是买的?
买的话,可以问问卖家,有没有驱动代码。
自己做的的话,得检查下电路是否有问题,再查软件什么的。ENC28J60很是耗电...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

22

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-6-14
在线时间
0 小时
发表于 2014-3-22 13:42:49 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
直接用你的模块连接电脑,中间网线必须是交叉网线吗??原子哥!驱动代码我是移植原子哥你的战舰板子,电脑没有问题!!
越是自由的环境中越要自律
回复 支持 反对

使用道具 举报

22

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-6-14
在线时间
0 小时
发表于 2014-3-22 13:43:07 | 显示全部楼层
回复【8楼】bingge191:
---------------------------------
电路  和 接口没有问题!!
越是自由的环境中越要自律
回复 支持 反对

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2014-3-6
在线时间
31 小时
 楼主| 发表于 2014-5-8 11:02:18 | 显示全部楼层
原来是SPI1的时钟没有改过来,查找了里面的时钟,SPI1只支持APB2时钟,改完就好了
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
回复 支持 反对

使用道具 举报

13

主题

225

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
金钱
289
注册时间
2013-11-12
在线时间
29 小时
发表于 2014-7-7 17:35:09 | 显示全部楼层
回复【10楼】xiaosi204:
---------------------------------
回复【10楼】xiaosi204:
---------------------------------
大哥啊,你拯救了我啊,我看到你这句话才发现我的也没有改,在这个上面浪费了一天了啊啊啊啊啊啊啊啊
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2015-2-11
在线时间
0 小时
发表于 2015-2-11 16:52:31 | 显示全部楼层
我的改了时钟怎么还是不行啊,搞了一天了,头都大了
我心飞翔
回复 支持 反对

使用道具 举报

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-5-8
在线时间
0 小时
发表于 2015-5-11 22:37:00 | 显示全部楼层
回复【10楼】xiaosi204:
---------------------------------
我用了你的代码,还是显示初始化错误
回复 支持 反对

使用道具 举报

19

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2014-5-23
在线时间
0 小时
发表于 2015-6-8 15:07:37 | 显示全部楼层
楼主还修改了哪里?
回复 支持 反对

使用道具 举报

19

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2014-5-23
在线时间
0 小时
发表于 2015-6-8 15:08:14 | 显示全部楼层
回复【13楼】study-c:
---------------------------------
请问你用SPI1驱动enc28j60成功了么?
回复 支持 反对

使用道具 举报

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-5-8
在线时间
0 小时
发表于 2015-6-8 19:02:18 | 显示全部楼层
回复【15楼】LVsler:
---------------------------------
成功了,要注意SPI1的时钟是用的APB2
回复 支持 反对

使用道具 举报

19

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2014-5-23
在线时间
0 小时
发表于 2015-6-10 09:38:53 | 显示全部楼层
回复【16楼】study-c:
----------------------------嗯嗯,我的也是,忙活了半天。。。蛋蛋都碎了
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-11-2
在线时间
0 小时
发表于 2015-11-25 11:08:52 | 显示全部楼层
CS    INT    MISO   MOSI   SCK    RST
PA4   A8    A6    A7    A5    A15
楼主,我也是用SPI1驱动ENC28J60,用的是F107VCT6芯片,引脚连接是上面那样的,该写的都写了,一直ping不同求解。
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-11-2
在线时间
0 小时
发表于 2015-11-25 11:14:10 | 显示全部楼层
回复【18楼】fangwer1:
---------------------------------
void SPI1_Init(void)
{
   SPI_InitTypeDef SPI_InitStructure;
   GPIO_InitTypeDef GPIO_InitStructure;

   /* Enable SPI1 and GPIOA clocks */
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);


   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;  
   GPIO_Init(GPIOA, &GPIO_InitStructure);
   GPIO_SetBits(GPIOA,GPIO_Pin_15);

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_8;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_Init(GPIOA, &GPIO_InitStructure);
   GPIO_SetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_8);
   
   /* Configure SPI1 pins: NSS, SCK, MISO and MOSI */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_Init(GPIOA, &GPIO_InitStructure); 

   //GPIO_SetBits(GPIOA,GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);
   /* SPI1 configuration */ 
   SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
   SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
   SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
   SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
   SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
   SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
   SPI_InitStructure.SPI_CRCPolynomial = 7;
   SPI_Init(SPI1, &SPI_InitStructure);

   /* Enable SPI1  */
   SPI_Cmd(SPI1, ENABLE);
}

这是我的程序。我用的是《原子教你玩STM32 库函数版》 50章的例程改的,想实现TCP Server 和TCP Client功能,一直ping不通,求大神帮忙啊,谢谢,已经搞了我好几天了。
回复 支持 反对

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2014-3-6
在线时间
31 小时
 楼主| 发表于 2015-12-8 09:38:14 | 显示全部楼层
回复【19楼】fangwer1:
---------------------------------
你看下ENC28J60.H里面的CS管脚有没有改过来?
ping不通的话你单步调试下看下是不是一直停在28j60的初始化上面,要是的话,很有可能是你的管脚没有接对
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-11-2
在线时间
0 小时
发表于 2015-12-8 17:15:32 | 显示全部楼层
回复【20楼】xiaosi204:
---------------------------------
OK 我试试吧 ENC28J60头文件里面关于CS和INT的定义都改过来了的呢,我再试试吧,谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 01:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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