
非常感谢你的观看,我在用STM32CUBEMx +FreeRTOS+LWIP遇到一些问题,希望能指导一下 配置:cpu是stm32f107vct6 、PHY是DP83848、LWIP是UDP通信,选择disable DHCP 我用了两个版本的CUBEMx,建立了两个工程(两个工程里面用的udpclient.C.H和83848.C.H都是一样的) 我来列举一下我的问题 工程太大,只能以网盘的方式发送 ![]() ![]() 1.开始使用的是STM32CubeMX-4.15.0版本 我建立了OldETH文件的工程,在 MX_LWIP_Init()之后使用UDP_client_init(server_ip,server_port)来绑定IP和port,我成功的ping通了,udp中断接收数据没问题,但是我udp发送数据的时候出问题了。 我是通过UDP_DataSend(u8* buf,u8 len)这个函数来发送数据的, uint8_t UDPData[20]="I am udp client!\r\n"; void UDP_DataSend(u8* buf,u8 len) { struct pbuf *udp_pbuf; udp_pbuf=pbuf_alloc(PBUF_RAW,len,PBUF_RAM); if(udp_pbuf != NULL) { udp_pbuf -> payload = buf; udp_send(udp_pcb,udp_pbuf); //udp_pcb是 UDP_client_init建立的udp控制块 } pbuf_free(udp_pbuf); } 当我发送测试数据UDP_DataSend(UDPData,sizeof(UDPData)) 这个是没有问题的, 然而当我要发送我以太网接受回调中所接受到的数据时,UDP_DataSend(udpReceiveData.buf,udpReceiveData.len)出错了,我必须将UDP_DataSend函数改成下面这样才能发送成功,要不然就会进入HardFault_Handler出错中断里面,这是我不能理解的 void UDP_DataSend(u8* buf,u8 len) { struct pbuf *udp_pbuf; udp_pbuf=pbuf_alloc(PBUF_RAW,len,PBUF_RAM); if(udp_pbuf != NULL) { uint8_t UDPDataSendBuf[256]; memcpy(UDPDataSendBuf,buf,len); udp_pbuf -> payload = UDPDataSendBuf; udp_send(udp_pcb,udp_pbuf); //udp_pcb是 UDP_client_init建立的udp控制块 } pbuf_free(udp_pbuf); } 2.使用的是新版STM32CubeMX-4.25.0版本 建立了NewETH文件里面的工程,在 MX_LWIP_Init()之后使用UDP_client_init(server_ip,server_port)来绑定IP和port,这时候我也ping通了,也能接收数据了。问题来了,现在不管是发送测试数据还是发送以太网接受回调中所接受到的数据都进入HardFault_Handler出错中断里面。 以上就是我现在遇到的问题,感谢你的帮忙 |
评分
查看全部评分
对的,不知道什么原因
评分
查看全部评分