W5500在单片机中的测试及长字节的发送和接收

在W5500模块的使用过程中,遇到ping单片机时字节超过119会发生偏移的异常。尽管已设定最大传输字节,但可能因ping命令本身的限制导致此现象。此外,分享了一次正负极反接导致W5500模块损坏的经验,通过更换电解电容并参考AMS1117-3.3稳压电源电路修复了模块。
摘要由CSDN通过智能技术生成

W5500的学习和使用

拷贝源程序、测试程序、修改传输字节

正在学习和使用W5500,经测试某宝买到的模块所附带的代码可以用,并且效果还不错。但是在使用过程中就会出现一点点的小问题(在TCP服务器下使用出现的情况):
单次发送或者接收的字节大于30个字节的时候,程序就会出现跑飞的情况,通过找其中的原因,发现程序的作者所设定的最大的发送字节是30个,超过了30个字节就会出现内存溢出,程序就跑飞了。
找到了问题的所在,那就好办了,剩下的就是解决这个问题,看W5500的芯片资料,然后知道了修改的方法,首先看一下W5500的芯片手册对这一块的描述:
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
下面是一个使用w5500 dma接收发送的示例,仅供参考: ```c #include "w5500.h" #include "socket.h" #define TX_BUF_SIZE 2048 #define RX_BUF_SIZE 2048 #define DATA_BUF_SIZE (RX_BUF_SIZE - 2) uint8_t tx_buf[TX_BUF_SIZE]; uint8_t rx_buf[RX_BUF_SIZE]; uint8_t data_buf[DATA_BUF_SIZE]; void dma_send_callback(void); void dma_recv_callback(void); int main(void) { // 初始化W5500芯片 W5500_Init(); // 设置socket0工作模式为TCP服务器模式 socket(0, Sn_MR_TCP, 5000, 0); // 分配接收缓存和发送缓存 setSn_RXBUF_SIZE(0, RX_BUF_SIZE); setSn_TXBUF_SIZE(0, TX_BUF_SIZE); // 设置DMA接收发送的回调函数 setSn_DMA_SEND_CB(0, dma_send_callback); setSn_DMA_RECV_CB(0, dma_recv_callback); // 等待客户端连接 listen(0); while(1) { // 检查socket0是否有数据到达 if(getSn_RX_RSR(0) > 0) { // 读取数据 int recv_size = recv(0, data_buf, DATA_BUF_SIZE); // 处理数据 // TODO: ... // 发送数据 send(0, tx_buf, TX_BUF_SIZE); } } } void dma_send_callback(void) { // DMA发送完成回调函数 // TODO: ... } void dma_recv_callback(void) { // DMA接收完成回调函数 // TODO: ... } ``` 在上面的示例,我们使用了w5500的DMA接收发送功能,通过设置回调函数来处理接收发送完成后的操作。在主循环,我们使用`getSn_RX_RSR`函数来检查socket0是否有数据到达,如果有数据到达,我们使用`recv`函数将数据读取到`data_buf`,然后进行处理,最后使用`send`函数将数据发送回客户端。 需要注意的是,在使用w5500的DMA功能时,需要设置每个socket的接收发送缓存大小,以及设置接收发送的回调函数。在回调函数,可以处理接收发送完成后的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值