硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1909|回复: 13
收起左侧

[以太网] STM32H7 UDP能收不能发

[复制链接]

9

主题

32

回帖

59

积分

初级会员

积分
59
发表于 2022-4-14 15:38:56 | 显示全部楼层 |阅读模式
采用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[0], remote_REC_IP_ADDRESS[1], remote_REC_IP_ADDRESS[2], remote_REC_IP_ADDRESS[3]);
                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);
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106749
QQ
发表于 2022-4-14 16:11:02 | 显示全部楼层
大概率的你的底层移植还有点问题。还有就是MPU Cache配置问题。
回复

使用道具 举报

9

主题

32

回帖

59

积分

初级会员

积分
59
 楼主| 发表于 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);
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106749
QQ
发表于 2022-4-15 01:35:36 | 显示全部楼层
zhangzhang 发表于 2022-4-14 17:52
大佬,我的MPU配置如下,目前还是发送不了,而且STM32打开发送时,都ping不通了,关闭发送时,能收到也能 ...

这部分看,没什么问题。
回复

使用道具 举报

9

主题

32

回帖

59

积分

初级会员

积分
59
 楼主| 发表于 2022-4-15 17:49:40 | 显示全部楼层
eric2013 发表于 2022-4-15 01:35
这部分看,没什么问题。

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

使用道具 举报

9

主题

32

回帖

59

积分

初级会员

积分
59
 楼主| 发表于 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,请问这种问题有遇到过吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106749
QQ
发表于 2022-4-16 01:31:17 | 显示全部楼层
zhangzhang 发表于 2022-4-15 18:06
大佬,前边我的回复不对,问题定位于打开UDP发送后运行两次HAL_ETH_Transmit,第三次进入HAL_ETH_Transmi ...

这个情况没遇到过。
回复

使用道具 举报

9

主题

32

回帖

59

积分

初级会员

积分
59
 楼主| 发表于 2022-4-18 14:54:23 | 显示全部楼层
eric2013 发表于 2022-4-16 01:31
这个情况没遇到过。

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

使用道具 举报

9

主题

32

回帖

59

积分

初级会员

积分
59
 楼主| 发表于 2022-4-18 15:17:13 | 显示全部楼层
DMACCATxBR由0x3004401A变为0x20016D96,DMACTxDTPR为0x300400A8,DMACCATxDR为0x30040090
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

使用道具 举报

9

主题

32

回帖

59

积分

初级会员

积分
59
 楼主| 发表于 2022-4-19 10:32:22 | 显示全部楼层
eric2013 发表于 2022-4-19 01:56
看来程序还是有点问题,你的PHY芯片用的什么

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106749
QQ
发表于 2022-4-20 08:54:46 | 显示全部楼层
zhangzhang 发表于 2022-4-19 10:32
谢谢大佬,程序的问题,从github上找了一个,终于UDP收发正常了,大佬,请问你们测开发板网速的软件叫啥 ...

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

使用道具 举报

9

主题

32

回帖

59

积分

初级会员

积分
59
 楼主| 发表于 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 ...

谢大佬,已下
回复

使用道具 举报

2

主题

37

回帖

43

积分

新手上路

积分
43
发表于 2024-3-21 10:22:57 | 显示全部楼层

你好,能分享下github地址吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-4 07:12 , Processed in 0.255558 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表