OpenEdv-开源电子网

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

战舰版实验代码移植到最小系统版STM32F103C8的过程 后 网卡初始化失败 求助!!!

[复制链接]

24

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-8-29
在线时间
3 小时
发表于 2012-12-5 19:41:25 | 显示全部楼层 |阅读模式
【战舰版实验代码移植到最小系统版STM32F103C8的过程】
1 Target组件里移除 key.c
  lcd.c
  beep.c
   
2 Target Option-Device重新选择MCU为 STM32F103C8
   
3 Target Option-Debug  
Use  Cortex-M/R JTAG/J-Trace—Setting-  
Flash Download-Programming Algorithm 更改为 STM32F10X Med-density Flash On-chip Flash 128K
   
4 Rebuild All Target  
   
5 从代码中注释掉第1条中去掉的硬件的相关代码  
main.c BEEP_Init()
  KEY_Init
  KEY_Scan()
   
  LCD_Init()
  LCD_Fill
  LCD_Pow(将该函数复制到main.c中)
  LCD_ShowString
  Point_COLOR
  Draw_Circle
  LCD_Clear
  LCD_DrawLine
  LCD_DrawRectangle
  LCD_ShowNum
  LCD_Dis_Content
   
在main.c中注释掉三个硬件的引用 include key.c
  lcd.c
  beep.c
   
注释掉与KEY_Scan相关的代码  
   
6 修改启动文件为中容量  
清除CORE-startup_stm32f10x_hd.s 添加CORE-startup_stm32f10x_hd.s
   
   
7 修改与容量有关的宏定义  
Target Option-C/C++  
Preprocessor Symbols-Define  
清除STM32F10X_HD,USE_STDPERIPH_DRIVER 添加STM32F10X_MD,USE_STDPERIPH_DRIVER
   
   
8 编译后,报错,然后将Timer6改为Timer4  
提示:timerx.c中的 TIM6_IRQn is undefined  
查询STM32中文参考手册:15 基本定时器(TIM6和TIM7)描述: 本章描述的模块仅适用于大容量的STM32F101xx和STM32F103xx系列,和互联型产品。
  本芯片闪存为64K,属于中等容量的产品,没有基本定时器TIM6和TIM7
因此,修改为通用定时器TIM4  
在timerx.c中  
原内容 新内容
   
函数 void TIM6_IRQHandler(void) void TIM4_IRQHandler(void)
if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
TIM_ClearITPendingBit(TIM6, TIM_IT_Update  ); TIM_ClearITPendingBit(TIM4, TIM_IT_Update  );
   
函数void TIM6_Int_Init(u16 arr,u16 psc) void TIM4_Int_Init(u16 arr,u16 psc)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure); TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
TIM_ITConfig( TIM6,TIM_IT_Update|TIM_IT_Trigger,ENABLE); TIM_ITConfig( TIM4,TIM_IT_Update|TIM_IT_Trigger,ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;  NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; 
   
   
在timerx.h中  
原内容 新内容
void TIM6_Int_Init(u16 arr,u16 psc); void TIM4_Int_Init(u16 arr,u16 psc);
   
在enc28j60.c中  
在函数void ENC28J60_Reset(void)里  
TIM6_Int_Init(1000,719); TIM4_Int_Init(1000,719);
   
   
10 修改网卡的引脚(阴影部分)  
原来的引脚 更改后的引脚
VC3.3 VC3.3
G8 B5
D2 B12
B15 B15
B13 B13
B14 B14
G6 B6
GND GND
PB.8 PB.8
   
在enc28j60.c中static void ENC28J60_SPI2_Init(void)的函数体修改如下:  
原文件内容 修改后的内容
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG, ENABLE );//PORTB,D,G时钟使能 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );//PORTB时钟使能
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //端口配置  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //端口配置
GPIO_Init(GPIOD, &GPIO_InitStructure);      //根据设定参数初始化 GPIOD.2 GPIO_Init(GPIOB, &GPIO_InitStructure);      //根据设定参数初始化 GPIOB.12
GPIO_SetBits(GPIOD,GPIO_Pin_2);       //PD.2上拉 GPIO_SetBits(GPIOB,GPIO_Pin_12);   //PB.12上拉
   
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;//PG6/7/8 推挽,拉高 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;//PB5/6/ 推挽,拉高
GPIO_Init(GPIOG, &GPIO_InitStructure);  //根据设定参数初始化PG6/7/8 GPIO_Init(GPIOB, &GPIO_InitStructure);  //根据设定参数初始化PB5/6
GPIO_SetBits(GPIOG,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8);//PG6/7/8上拉 GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6);//PB5/6上拉
   
   
 //这里PG7和PB12拉高,是为了防止NRF24L01和SPI FLASH影响.
 //因为他们共用一个SPI口.

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;     //PB12 推挽   上拉
  GPIO_Init(GPIOB, &GPIO_InitStructure);      //根据设定参数初始化GPIOB.12
  GPIO_SetBits(GPIOB,GPIO_Pin_12);       //PB.12上拉
// STM32最小系统板 STM32F103C8T6 下述3行与上面相同,

因此需要注释掉: 左边的三行
   
   
9 修改LED的针脚  
原战舰版配置 新的最小系统版配置
PB.5  LED0 PB.8       LED0
PE.5  LED1 PB.9       LED1(板载绿灯)
   
led.c中具体修改初始化函数的内容:  
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);  //使能PB,PE端口时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);                      //使能PB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;     //LED0-->B.5 端口配置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;     //LED0-->B.8 端口配置
GPIO_SetBits(GPIOB,GPIO_Pin_5);       //PB.5 输出高 GPIO_SetBits(GPIOB,GPIO_Pin_8);       //PB.8 输出高
   
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;       //LED1-->E.5 端口配置, 推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;       //LED1-->B.9 端口配置, 推挽输出
GPIO_Init(GPIOE, &GPIO_InitStructure);       //推挽输出 ,IO口速度为50MHz GPIO_Init(GPIOB, &GPIO_InitStructure);       //推挽输出 ,IO口速度为50MHz
GPIO_SetBits(GPIOE,GPIO_Pin_5);        //PE.5 输出高 GPIO_SetBits(GPIOB,GPIO_Pin_9);        //PB.9 输出高
   
led.h中修改定义:  
#define LED0 PBout(5)// PB5 #define LED0 PBout(8)  // PB8
#define LED1 PEout(5)// PE5 #define LED1 PEout(9)  // PB9
   
   
   
10 修改Uart1的针脚  
原战舰版配置 新的最小系统版配置
PA.9  TX 相同,不需要改
PA.10 BX 相同,不需要改
   
修改文件uart.c中的串口初始化函数  
  相同,不需要改
   
   
   
11 全部编译,通过  
   
故障现象:用JTAG V8 下载调试后,程序始终在初始化网卡  
在enc28j60.c文件中的函数:  
u8 ENC28J60_Init(u8* macaddr)一直运行失败  
 while(!(ENC28J60_Read(ESTAT)&ESTAT_CLKRDY)&&retry<500)//等待时钟稳定
 {
  retry++;
  delay_ms(10);   
 };
 if(retry>=500)return 1;//循环超过500次,ENC28J60初始化失败
 
   
硬件检测:
1 以太网模块的电压稳定在3.28V
2 以太网各个针脚接线无误;
3 以太网模块上的蓝灯常亮,绿灯常亮,黄灯偶尔闪烁
 
如果去掉以太网初始化,其它代码及其硬件运行正常。
请原子大师看看,这个怎么办啊?

战舰与Mini的硬件资源对比.pdf

76.95 KB, 下载次数: 877

我白天是个程序员,晚上就是个有抱负的演员。住在天朝的魔都,有条同名的狗......
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-5 21:29:32 | 显示全部楼层
在enc28j60.h里面的:

#define ENC28J60_CS PGout(8)  //ENC28J60片选信号
#define ENC28J60_RST PGout(6) //ENC28J60复位信号

这里改过了么?
另外,有jtag吧?可以跟踪下,看看进入ENC28J60_Read之前,各IO口的配置是否正常!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-8-29
在线时间
3 小时
 楼主| 发表于 2012-12-5 22:59:18 | 显示全部楼层
大师,您说得对啊,我就把你说的那2个给忘掉了,在enc28j60.h中修改如下后就OK了:

  
//#define ENC28J60_CS PGout(8)  //ENC28J60片选信号
#define ENC28J60_CS PBout(5)  //ENC28J60片选信号

//#define ENC28J60_RST PGout(6) //ENC28J60复位信号
#define ENC28J60_RST PBout(6) //ENC28J60复位信号

真是太感激您了,我琢磨了一晚上,简直太开心了啊。现在成功运行了。虽然还是上下线,但是我用了TCP ACK应答累计来自诊断是否还在正常连接中,拔掉网线很快就可以判断出来了。谢谢了!!!

有了网络真好,我连锂电池都省了,每次直接从服务器得到最新的系统时间。

再次感谢!!!
我白天是个程序员,晚上就是个有抱负的演员。住在天朝的魔都,有条同名的狗......
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2201
金钱
2201
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-12-5 23:47:31 | 显示全部楼层
记录得这么详细, 赞!
https://github.com/roxma
回复 支持 反对

使用道具 举报

24

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-8-29
在线时间
3 小时
 楼主| 发表于 2012-12-6 09:01:25 | 显示全部楼层
便于分析诊断问题,另外,可以为以后的移植参考。
我白天是个程序员,晚上就是个有抱负的演员。住在天朝的魔都,有条同名的狗......
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2013-4-2
在线时间
0 小时
发表于 2013-4-7 20:58:34 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
谢谢您,太感谢了,我都差点换片子了
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2013-4-2
在线时间
0 小时
发表于 2013-4-7 20:59:12 | 显示全部楼层
回复【3楼】liwanfei:
---------------------------------
谢谢楼主这个帖子,真的很全
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-7 21:57:21 | 显示全部楼层
其他提问题的网友,真应该好好学学楼主。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-8-29
在线时间
3 小时
 楼主| 发表于 2013-4-11 23:14:32 | 显示全部楼层
原子大人过奖了。。。
我白天是个程序员,晚上就是个有抱负的演员。住在天朝的魔都,有条同名的狗......
回复 支持 反对

使用道具 举报

55

主题

243

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1608
金钱
1608
注册时间
2012-12-30
在线时间
241 小时
发表于 2013-5-22 16:55:02 | 显示全部楼层
移植到mini板也是初始化失败 我是用SPI1连接ENC28J60 
时钟信号用定时器 TIM3 
RCC->APB2ENR|=1<<2;       //PORTA时钟使能 

GPIOA->CRL&=0XFFF000FF;   ///PA3 INT A2 RST A4 SPI_CS
GPIOA->CRL|=0X00033300;
GPIOA->ODR|=0x7<<2;

#define ENC28J60_CS PAout(4)  //ENC28J60片选信号
#define ENC28J60_RST PAout(2) //ENC28J60复位信号 

跟LZ一样初始化不通过 我定义好CS RST一样还是初始化不通过
回复 支持 反对

使用道具 举报

1

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2013-8-23
在线时间
7 小时
发表于 2013-11-3 11:47:55 | 显示全部楼层
真是太好了!太感谢了!
If you run, you stand a chance losing ,but if you don’t run , you’ve already lost. 如果你在努力奋斗,你有可能会失败,但是,如果你不奋斗你就已经输了。
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2013-3-28
在线时间
0 小时
发表于 2014-10-13 14:33:00 | 显示全部楼层
大牛 好不容易找到你的帖子  最近我也在做这个  但是SPI那一直没通,  请问方便共享下你的代码 ,学习下吗??谢谢!! 1968986846@qq.com
回复 支持 反对

使用道具 举报

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2014-4-1
在线时间
17 小时
发表于 2015-11-26 14:38:15 | 显示全部楼层
第六点,
清除CORE-startup_stm32f10x_hd.s 添加CORE-startup_stm32f10x_hd.s

是不是应该添加添加CORE-startup_stm32f10x_md.s啊
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 14:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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