zhangzhang 发表于 2022-4-14 15:38:56

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);
}

eric2013 发表于 2022-4-14 16:11:02

大概率的你的底层移植还有点问题。还有就是MPU Cache配置问题。

zhangzhang 发表于 2022-4-14 17:52:43

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);

eric2013 发表于 2022-4-15 01:35:36

zhangzhang 发表于 2022-4-14 17:52
大佬,我的MPU配置如下,目前还是发送不了,而且STM32打开发送时,都ping不通了,关闭发送时,能收到也能 ...

这部分看,没什么问题。

zhangzhang 发表于 2022-4-15 17:49:40

eric2013 发表于 2022-4-15 01:35
这部分看,没什么问题。

大佬,想问下我打开发送后,heth->gState初始化的时候就为HAL_ETH_STATE_ERROR,导致数据没有通过DMA发出去,这种情况大佬有遇到过吗

zhangzhang 发表于 2022-4-15 18:06:57

eric2013 发表于 2022-4-15 01:35
这部分看,没什么问题。

大佬,前边我的回复不对,问题定位于打开UDP发送后运行两次HAL_ETH_Transmit,第三次进入HAL_ETH_Transmit时在该函数中heth->gState = HAL_ETH_STATE_ERROR,请问这种问题有遇到过吗

eric2013 发表于 2022-4-16 01:31:17

zhangzhang 发表于 2022-4-15 18:06
大佬,前边我的回复不对,问题定位于打开UDP发送后运行两次HAL_ETH_Transmit,第三次进入HAL_ETH_Transmi ...

这个情况没遇到过。

zhangzhang 发表于 2022-4-18 14:54:23

eric2013 发表于 2022-4-16 01:31
这个情况没遇到过。

大佬,请问你知道ETH_DMACSR状态寄存器位18:16显示读取传输时出错和访问数据缓冲区时出错这个该怎么解决吗

zhangzhang 发表于 2022-4-18 15:17:13

DMACCATxBR由0x3004401A变为0x20016D96,DMACTxDTPR为0x300400A8,DMACCATxDR为0x30040090

eric2013 发表于 2022-4-19 01:56:54

zhangzhang 发表于 2022-4-18 14:54
大佬,请问你知道ETH_DMACSR状态寄存器位18:16显示读取传输时出错和访问数据缓冲区时出错这个该怎么解决 ...

看来程序还是有点问题,你的PHY芯片用的什么

zhangzhang 发表于 2022-4-19 10:32:22

eric2013 发表于 2022-4-19 01:56
看来程序还是有点问题,你的PHY芯片用的什么

谢谢大佬,程序的问题,从github上找了一个,终于UDP收发正常了,大佬,请问你们测开发板网速的软件叫啥名字啊

eric2013 发表于 2022-4-20 08:54:46

zhangzhang 发表于 2022-4-19 10:32
谢谢大佬,程序的问题,从github上找了一个,终于UDP收发正常了,大佬,请问你们测开发板网速的软件叫啥 ...

TCPUDPDbg(TCP UDP 网络调试工具)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=1568&fromuid=58
(出处: 硬汉嵌入式论坛)

zhangzhang 发表于 2022-4-20 10:32:34

eric2013 发表于 2022-4-20 08:54
TCPUDPDbg(TCP UDP 网络调试工具)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=1568&fromuid=5 ...

谢大佬,已下

风过不留痕 发表于 2024-3-21 10:22:57

zhangzhang 发表于 2022-4-20 10:32
谢大佬,已下

你好,能分享下github地址吗
页: [1]
查看完整版本: STM32H7 UDP能收不能发