STM32H7 UDP能收不能发
采用STM32H7+FREERTOS+LWIP +UDP,想实现UDP发送接收,目前现象为能正确收到数据,但发不出去数据。当在任务中只使能udp_recv()函数时,能正确收到数,但网络调试助手没发送数据也会一直进入ETH中断;只使能udp_send()函数时,发不出去数;同时使用udp_recv()函数和udp_send()函数时,收不到数也发不出去数,进不了ETH中断,任务代码如下(在low_level_output函数里也加了SCB_CleanInvalidateDCache),烦请大佬们帮解答定位一下g_upcb = udp_new();
if (g_upcb)
{
IP4_ADDR(&remoteddr, remote_REC_IP_ADDRESS, remote_REC_IP_ADDRESS, remote_REC_IP_ADDRESS, remote_REC_IP_ADDRESS);
err=udp_connect(g_upcb,&remoteddr,UDP_REMOTE_PORT);//UDP客户端连接到指定IP地址和端口号的服务器
if(err==ERR_OK)
{
err = udp_bind(g_upcb, IP_ADDR_ANY, UDP_HOME_PORT);
}
}
while(1)
{
udp_recv(g_upcb, udp_receive_callback, NULL);//接收
udp_demo_senddata(g_upcb);//发送
HAL_GPIO_TogglePin(LED_RED_GPIO_Port,LED_RED_Pin);
osDelay(2000);
}
void ETH_IRQHandler(void)
{
HAL_ETH_IRQHandler(&heth);
}
大概率的你的底层移植还有点问题。还有就是MPU Cache配置问题。 eric2013 发表于 2022-4-14 16:11
大概率的你的底层移植还有点问题。还有就是MPU Cache配置问题。
大佬,我的MPU配置如下,目前还是发送不了,而且STM32打开发送时,都ping不通了,关闭发送时,能收到也能ping通
MPU_Region_InitTypeDef MPU_InitStruct = {0};
/* Disables the MPU */
HAL_MPU_Disable();
/** Initializes and configures the Region and the memory to be protected
*/
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER0;
MPU_InitStruct.BaseAddress = 0x30040000;
MPU_InitStruct.Size = MPU_REGION_SIZE_256B;
MPU_InitStruct.SubRegionDisable = 0x0;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
/** Initializes and configures the Region and the memory to be protected
*/
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER1;
MPU_InitStruct.BaseAddress = 0x30044000;
MPU_InitStruct.Size = MPU_REGION_SIZE_16KB;
MPU_InitStruct.SubRegionDisable = 0x0;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
/* Enables the MPU */
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT); zhangzhang 发表于 2022-4-14 17:52
大佬,我的MPU配置如下,目前还是发送不了,而且STM32打开发送时,都ping不通了,关闭发送时,能收到也能 ...
这部分看,没什么问题。 eric2013 发表于 2022-4-15 01:35
这部分看,没什么问题。
大佬,想问下我打开发送后,heth->gState初始化的时候就为HAL_ETH_STATE_ERROR,导致数据没有通过DMA发出去,这种情况大佬有遇到过吗 eric2013 发表于 2022-4-15 01:35
这部分看,没什么问题。
大佬,前边我的回复不对,问题定位于打开UDP发送后运行两次HAL_ETH_Transmit,第三次进入HAL_ETH_Transmit时在该函数中heth->gState = HAL_ETH_STATE_ERROR,请问这种问题有遇到过吗 zhangzhang 发表于 2022-4-15 18:06
大佬,前边我的回复不对,问题定位于打开UDP发送后运行两次HAL_ETH_Transmit,第三次进入HAL_ETH_Transmi ...
这个情况没遇到过。 eric2013 发表于 2022-4-16 01:31
这个情况没遇到过。
大佬,请问你知道ETH_DMACSR状态寄存器位18:16显示读取传输时出错和访问数据缓冲区时出错这个该怎么解决吗 DMACCATxBR由0x3004401A变为0x20016D96,DMACTxDTPR为0x300400A8,DMACCATxDR为0x30040090 zhangzhang 发表于 2022-4-18 14:54
大佬,请问你知道ETH_DMACSR状态寄存器位18:16显示读取传输时出错和访问数据缓冲区时出错这个该怎么解决 ...
看来程序还是有点问题,你的PHY芯片用的什么 eric2013 发表于 2022-4-19 01:56
看来程序还是有点问题,你的PHY芯片用的什么
谢谢大佬,程序的问题,从github上找了一个,终于UDP收发正常了,大佬,请问你们测开发板网速的软件叫啥名字啊 zhangzhang 发表于 2022-4-19 10:32
谢谢大佬,程序的问题,从github上找了一个,终于UDP收发正常了,大佬,请问你们测开发板网速的软件叫啥 ...
TCPUDPDbg(TCP UDP 网络调试工具)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=1568&fromuid=58
(出处: 硬汉嵌入式论坛)
eric2013 发表于 2022-4-20 08:54
TCPUDPDbg(TCP UDP 网络调试工具)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=1568&fromuid=5 ...
谢大佬,已下 zhangzhang 发表于 2022-4-20 10:32
谢大佬,已下
你好,能分享下github地址吗
页:
[1]