新手上路
- 积分
- 32
- 金钱
- 32
- 注册时间
- 2019-11-3
- 在线时间
- 6 小时
|
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这个模块是不是无法进行真正的全双工?
|
|