OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4988|回复: 5

STM32H7 MAC数据发送时时出错

[复制链接]

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2014-11-26
在线时间
6 小时
发表于 2022-5-9 19:41:21 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 hrc2014a 于 2022-5-9 19:47 编辑

STM32H7 MAC数据发送时时出错




[STMH7 MAC + LAN8720]
STM32H7 MAC数据发送时时出错如下图所示

目前还没上LWIP,只是MAC初始化后单纯的想测试一下收发

以下是MAC初始化代码

void MX_ETH_Init(void)
{

        ETH_MACConfigTypeDef MACConf;
        uint32_t regvalue = 0;
        unsigned int ret = -1;
  heth.Instance = ETH;
  heth.Init.MACAddr[0] =   0x00;
  heth.Init.MACAddr[1] =   0x80;
  heth.Init.MACAddr[2] =   0xE1;
  heth.Init.MACAddr[3] =   *(unsigned char *)(UID_BASE + 4);
  heth.Init.MACAddr[4] =   *(unsigned char *)(UID_BASE + 2);
  heth.Init.MACAddr[5] =   *(unsigned char *)(UID_BASE + 0);
  heth.Init.MediaInterface = HAL_ETH_RMII_MODE;
  heth.Init.TxDesc = DMATxDscrTab;
  heth.Init.RxDesc = DMARxDscrTab;
  heth.Init.RxBuffLen = 1524;

  /* USER CODE BEGIN MACADDRESS */

  /* USER CODE END MACADDRESS */
        __HAL_RCC_D2SRAM3_CLK_ENABLE();
        lan8720_reset();
        
        ret = HAL_ETH_Init(&heth);
  if ( ret != HAL_OK)
  {
    Error_Handler();
  }
//HAL_ETH_Start_IT(&heth);
        
  memset(&TxConfig, 0 , sizeof(ETH_TxPacketConfig));
  TxConfig.Attributes = ETH_TX_PACKETS_FEATURES_CSUM | ETH_TX_PACKETS_FEATURES_CRCPAD;
  TxConfig.ChecksumCtrl = ETH_CHECKSUM_IPHDR_PAYLOAD_INSERT_PHDR_CALC;
  TxConfig.CRCPadCtrl = ETH_CRC_PAD_INSERT;
  /* USER CODE BEGIN ETH_Init 2 */

  /* USER CODE END ETH_Init 2 */
        
        
        
          for (int idx = 0; idx < ETH_RX_DESC_CNT; idx++)
    {
        HAL_ETH_DescAssignMemory(&heth, idx, &Rx_Buff[idx][0], NULL);
    }
               
                HAL_ETH_SetMDIOClockRange(&heth);
        
        if(lan8720_SW_RESET() != HAL_OK)
        {
                        LOG_G("LAN8720 SW RESET ERROR\r\n");
                        return;
        }
        
        lan8720_check_SW_RESET_Done();
        my_delay_ms(2000);
        lan8720_AUTO_NEGOTIATION_enable(ENABLE_AUTO_NEGOTIATION);
  HAL_ETH_GetMACConfig(&heth, &MACConf);
  MACConf.DuplexMode = ETH_FULLDUPLEX_MODE;
  MACConf.Speed = ETH_SPEED_100M;
  HAL_ETH_SetMACConfig(&heth, &MACConf);
  HAL_ETH_Start_IT(&heth);

}


以下是发送代码
void bsp_eth_send(ETH_BufferTypeDef * Txbuffer, int frameLen)
{

                int i;
          TxConfig.Length=frameLen;
    TxConfig.TxBuffer=Txbuffer;

                LOG_G("===========================================\r\n");
                for(i = 0; i < ETH_TX_DESC_CNT; i++)
                {
                                if(Txbuffer.buffer == NULL)
                                        continue;
                                
                                        show_log_add_head("NET SEND:", Txbuffer.buffer, Txbuffer.len);
                                        show_log();
                }
                LOG_G("===========================================\r\n");

//   SCB_CleanInvalidateDCache();    //无效化并清除Dcache
    if(HAL_ETH_Transmit(&heth, &TxConfig, 1000) == HAL_OK)
                {
                        LOG_G("MAC send successful...\r\n");
                } else {
               
                        LOG_G("MAC send failt...\r\n");
                }
        
        
        
}


最后DEBUG发现是在发送函数HAL_ETH_Transmit();
      if((heth->Instance->DMACSR & ETH_DMACSR_FBE) != (uint32_t)RESET)
      {
        heth->ErrorCode |= HAL_ETH_ERROR_DMA;
        heth->DMAErrorCode = heth->Instance->DMACSR;
        /* Set ETH HAL State to Ready */
        heth->gState = HAL_ETH_STATE_ERROR;
        /* Return function status */
        return HAL_ERROR; //这里返回ERROR了
      }



最后现现象是:只要不调用发送函数,接收是可以正常接收的,一但调用了发送函数,接收都接收不了

原子哥大神,请赐给我点灵感。啊门!!!!!





错误

错误

最佳答案

查看完整内容[请看2#楼]

十分的无语问苍天啊,把KEIL工程的RAM配置修改一下就可以了,把原来的IRAM1 参数0x20000000 0x20000改成 0x24000000 0x80000 真是人都炸了
天道酬勤!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2014-11-26
在线时间
6 小时
 楼主| 发表于 2022-5-9 19:41:22 | 显示全部楼层
十分的无语问苍天啊,把KEIL工程的RAM配置修改一下就可以了,把原来的IRAM1 参数0x20000000    0x20000改成 0x24000000  0x80000 真是人都炸了
天道酬勤!!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2022-5-10 00:02:07 | 显示全部楼层
帮顶
回复

使用道具 举报

14

主题

821

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2070
金钱
2070
注册时间
2021-7-17
在线时间
647 小时
发表于 2022-5-10 10:10:08 | 显示全部楼层
帮顶   
回复

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2014-11-26
在线时间
6 小时
 楼主| 发表于 2022-5-23 09:53:56 | 显示全部楼层
天道酬勤!!
回复

使用道具 举报

32

主题

300

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1049
金钱
1049
注册时间
2012-3-30
在线时间
321 小时
发表于 2022-5-23 20:13:00 | 显示全部楼层
厉害,厉害
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 18:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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