OpenEdv-开源电子网

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

请教关于STM32F103+W5500的全双工问题

[复制链接]

2

主题

4

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2019-11-3
在线时间
6 小时
发表于 2020-6-24 14:49:29 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 lyjbighead 于 2020-6-24 14:54 编辑

本人目前在做STM32F103+W5500的串口与网络互传的一个模块。
双串口转网络。板卡设置为TCP服务器模式,上位机设置为TCP客户端。

使用SOCKET 1用于串口1的透传,SOCKET 2用于串口2的透传。

SOCKET 1 收发缓存2K,SOCKET2 收发缓存2K。

处理流程如下:

串口转换网络:
串口1采用DMA接收+IDLE总线空闲中断,接收完一帧以后到串口中断函数里读取接收数据长度,置接收一帧完成标志,关闭DMA。
主函数大循环里检测接收帧标志,然后通过W5500将数据发送出去,再次打开串口DMA进行下一次接收。

网络转串口:
W5500初始化,设置使能三个中断:连接中断/断开中断/接收帧完成中断,使用STM32的GPIO下降沿检测该中断。
W5500网络接收数据后,触发网口帧接收中断,进中断服务程序里,置网口接收完成标志。
主函数大循环里检测网口接收帧标志,然后通过串口转发出去(轮训方式和串口DMA发送都试过)。

以上处理方式,在单独的串口转网络,或者网络转串口时,都是很稳定的,几乎不丢数据。
但是在两者同时传输时,几乎每次都会出现卡死,大部分是网络转串口无反应,个别出现串口转换网络也无反应。

卡死后,经过测量,发现W5500的中断线一直为低电平,似乎是在中断函数里处理的时候,被什么打断了,或者进入什么状态出不来了。。。本人的在中断函数里,基本只处理一些标志位,不会做大规模数据处理,所以非常奇怪。

串口和SPI-W5500都设置成了全双工方式,使能收发了。。。

W5500手册看了无数遍,实在是找不到原因,请版面上的大神指教,多谢。

PS:W5500这个模块是不是无法进行真正的全双工?

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2020-6-25 00:37:04 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 06:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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