OpenEdv-开源电子网

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

原子哥~关于ENC28J60以太网口接口和串口的实验

[复制链接]

2

主题

19

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2013-4-17
在线时间
0 小时
发表于 2013-5-21 17:02:09 | 显示全部楼层 |阅读模式

用原子的网口程序,可是串口发送没办法在主函数里面调用,一调用就ENC28J60 INIT ERROR,这是为什么

STM32我跟你拼了!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-5-21 21:12:12 | 显示全部楼层
不会吧,我们的标准例程就都有初始化串口的啊。
int main(void)
{    
u8 key;
u8 tcnt=0;
u8 tcp_server_tsta=0XFF;
u8 tcp_client_tsta=0XFF;
  uip_ipaddr_t ipaddr;  
Stm32_Clock_Init(9); //系统时钟设置
uart_init(72,9600);   //串口初始化为9600
delay_init(72);       //延时初始化 
LED_Init();    //初始化与LED连接的硬件接口
LCD_Init();     //初始化LCD
KEY_Init(); //初始化按键
RTC_Init(); //初始化RTC
Adc_Init(); //初始化ADC     
usmart_dev.init(72); //初始化USMART
  POINT_COLOR=RED; //设置为红色    
LCD_ShowString(60,10,200,16,16,"WarShip STM32");
LCD_ShowString(60,30,200,16,16,"ENC28J60 TEST");
LCD_ShowString(60,50,200,16,16,"ATOM@ALIENTEK");
  while(tapdev_init()) //初始化ENC28J60错误
{    
LCD_ShowString(60,70,200,16,16,"ENC28J60 Init Error!");  
delay_ms(200);
  LCD_Fill(60,70,240,86,WHITE);//清除之前显示
};
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2013-4-17
在线时间
0 小时
 楼主| 发表于 2013-5-22 10:21:44 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我有加进去串口2与串口3,也初始化了,如果他们单独工作的话是没问题的,网口可以单独工作,甚至三个串口都可以同时工作,但是在加入uip_polling后,只要在主函数调用其中的一句串口发送函数,就会出现ENC28J60 INIT ERROR
1.我不知道是不是网口中断有冲突
2.我不跑系统的话
             #ifdef OS_TICKS_PER_SEC  
                                OSIntExit();         #endif
             类似这些的定义还要留着吗?
3.我三个中断的RCC_APB2PeriphClockCmd都有加上|RCC_APB2Periph_AFIO,这样有作用吗?
STM32我跟你拼了!!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-5-22 10:28:19 | 显示全部楼层
回复【3楼】eletric-Claude:
---------------------------------
1,在什么开发板上测试?
2,不跑系统,  #ifdef OS_TICKS_PER_SEC   
                                OSIntExit();         #endif 
这些可以去掉
3,在一处加上即可,不过你都加上也无妨。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2013-4-17
在线时间
0 小时
 楼主| 发表于 2013-5-22 13:36:07 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
谢谢原子哥的回复T^T 我用的是战舰板

1.连接成功后,如果我想发送一个数组,是不是调用这句  s->textptr  就可以了?
2.现在不知道怎么了,在ENC28J60 INIT ERROR 里面大概30秒后,竟然可以运行了,我也不知道为什么?我是把ENC28J60接到PC上的,可以PING通~
STM32我跟你拼了!!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-5-22 15:33:09 | 显示全部楼层
回复【5楼】eletric-Claude:
---------------------------------
1,连接后发送数据,我们的例程不就有么?
2,战舰板的网络和串口2,串口3都没有共用IO,排除IO冲突的可能.应该是其他问题了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2012-11-16
在线时间
6 小时
发表于 2013-5-22 16:33:49 | 显示全部楼层
回复【6楼】正点原子:

回复【5楼】eletric-Claude:
---------------------------------
1,连接后发送数据,我们的例程不就有么?
2,战舰板的网络和串口2,串口3都没有共用IO,排除IO冲突的可能.应该是其他问题了.

---------------------------------
连接后发送数据,能不能定时发送?把这个数据1秒钟发送一次,比如说更新RTC时间。
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2013-4-17
在线时间
0 小时
 楼主| 发表于 2013-5-22 17:30:41 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
回复【7楼】a2696026:
---------------------------------
应该没问题的,主要是要找到发送的函数
我试过:tcp_client_senddata()        uip_send() 可是都没法在网络调试助手上看到
STM32我跟你拼了!!!
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2013-4-17
在线时间
0 小时
 楼主| 发表于 2013-5-23 09:27:59 | 显示全部楼层
回复【7楼】a2696026:
---------------------------------
我看程序有个sprintf(),不知道是不是发送到网络调试助手的接收窗上~
STM32我跟你拼了!!!
回复 支持 反对

使用道具 举报

头像被屏蔽

88

主题

231

帖子

2

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-11
在线时间
40 小时
发表于 2013-5-23 12:46:01 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

10

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2012-11-16
在线时间
6 小时
发表于 2013-5-24 16:25:17 | 显示全部楼层
回复【10楼】nonplus:

回复【9楼】eletric-Claude:
---------------------------------
sprintf是格式化字符串
发送接收原子的历程靠标志位
然后uip_poll查询uip_len决定是否有数据发送接收

---------------------------------
这个是正解
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2013-4-17
在线时间
0 小时
 楼主| 发表于 2013-5-27 13:09:14 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子哥~串口1和串口3现在可以独立工作,一起工作的时候只能读取各自串口的BUF,总而言之是两个串口不能互通,一互通就会出现ENC28J60 INIT ERROR ,我觉得是中断接收会打架,这时候是不是要设置优先级了?
STM32我跟你拼了!!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-5-27 14:12:39 | 显示全部楼层
两个串口不能互通,是指怎么个互通法?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2013-4-17
在线时间
0 小时
 楼主| 发表于 2013-5-27 14:48:30 | 显示全部楼层
回复【13楼】正点原子:
---------------------------------
我看了一下资料,会不会是USART3和网口的SPI2有冲突? 我现在注释掉ENC28J60的程序,两个串口都能正常收发,加上ENC28J60的while(tapdev_init())后就一直停在这里不运行了,我觉得是
1.中断打架了
2.引脚有冲突
不知道是不是要改优先级来处理这个问题?
STM32我跟你拼了!!!
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-4-30
在线时间
1 小时
发表于 2013-6-16 12:32:40 | 显示全部楼层
如存在多中断,必须设置好中断优先级;
回复 支持 反对

使用道具 举报

4

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-1-3
在线时间
6 小时
发表于 2013-12-1 16:36:06 | 显示全部楼层
回复【14楼】eletric-Claude:
---------------------------------
你好,你的出现ENC28J60 INIT ERROR 问题,解决了吗?我也遇到了相同的问题
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-12-1 21:11:08 | 显示全部楼层
回复【16楼】jueying001:
---------------------------------
小改一下ENC28J60_Init的代码,将ENC28J60_Write_Op放到循环里面,可以大大提高初始化成功概率,代码如下:

//初始化ENC28J60
//macaddr:MAC地址
//返回值:0,初始化成功;
//       1,初始化失败;
u8 ENC28J60_Init(u8* macaddr)
{
u16 retry=0;   
ENC28J60_Reset();
while(!(ENC28J60_Read(ESTAT)&ESTAT_CLKRDY)&&retry<500)//等待时钟稳定
{
ENC28J60_Write_Op(ENC28J60_SOFT_RESET,0,ENC28J60_SOFT_RESET);//软件复位,放到循环里面,提高初始化成功几率.
retry++;
delay_ms(10);
};
....
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 17:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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