天线|RF射频
直播中

张婷

8年用户 198经验值
私信 关注
[问答]

如何才能实现在以太网子程序里面再次接收以太网命令?

大家好,小弟最近的项目遇到了一个问题 , 还请大家多多指教 ,谢谢!
问题是这样的,以太网芯片是ENC28J60, 程序是在战舰板的例程基础上来修改的, 上位机会发送不同的指令到 STM32,  STM32接收到以太网的命令后开始执行子程序, 但是子程序在运行过程中也要能实时接收从上位机通过以太网发过来的其他的命令, 比如像急停,复位等命令, 我反复研究了多日, 还是没能实现在以太网子程序里面再次接收以太网命令的功能,大家 可以提供下思路吗, 谢谢,不甚感激

回帖(3)

沈家春

2019-6-26 14:11:44
你就用tcp链接,然后实现数据通信,定义好数据格式(比如类似modbus协议),然后解析这部分数据即可实现各种控制。
举报

王淑英

2019-6-26 14:19:12
谢谢原子哥的解答, 现在控制是可以控制, 就是要在控制子程序里面再次接收以太网命令无法实现, 比如
if(tcp_server_tsta!=tcp_server_sta)//TCP Server×?????±?

 if(tcp_server_sta&(1<<6))
{
if((tcp_server_databuf[0] == 0x02)  )
{
                                      。。。。。。
                                      。。。。。。
                                }
                          }
                }
要在中间的句号语句里面再次接收以太网命令, 这个应该是怎么弄呢
举报

谭雪

2019-6-26 14:31:47
我也做过相同的网口通信,不过我用的是UDP,起初也有你这样的想法,但是我测试了在程序中根本接收不到数据,
像你这么做是实现不了的,必需跳出这段程序再重新接受数据,因为STM32同一时刻只能执行一句,所以你想在处
理程序的同时还要检测是否接收到以太网命令是不行的,
如果想做的话加入中断试一下,中断来临就检测是否接收到数据,但是你执行的程序里不能有发送数据的程序。
如果不用中断,也可以试着把控制子程序的将进入条件记下来,然后执行一边跳出循环,在检测是否接收到数据,
如果未接收到,则还执行控制子程序,否则执行接收到的命令,
这只是我的想法,不知道可不可以。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分