硬汉嵌入式论坛

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

[STM32H7] 有大佬用过STM32H750VBT6配合W5500芯片将ADC采集的数据用过TCP协议上传到PC端的吗?

  [复制链接]

18

主题

92

回帖

146

积分

初级会员

积分
146
QQ
发表于 2024-6-19 23:49:29 | 显示全部楼层 |阅读模式
请教一下,就是我想把ADC采集的数据传给PC端吗,然后我开启了ADC的DMA这个传输的是从外设到内存,然后SPI我也开启了DMA,然后SPI的DMA我应该用SPI_TX把这个数据发给W5500的缓冲区,然后使用TCP传给上位机的端口吗?还是说不需要SPI的TX,再用一个新的DMA函数HAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength):定义好起始内存地址还有数据长度,直接用Socket发送?

W5500和STM32连接ping通了,但是好像只修改了tcp的socket发送函数好像不太行
希望有大佬给指点一下。

#define ADC_DATA_LENGTH  2048  //定义采集数据长度为2048
uint8_t g_adc3_dma_data1[ADC_DATA_LENGTH];//定义adc3采集数据存放数组
uint8_t g_adc3_dma_complete_flag = 0;//adc3数据dma采集完成标志,在dma采集完成回调函数设置

HAL_ADC_Start_DMA(&hadc3,g_adc3_dma_data1,ADC_DATA_LENGTH);//ADC的dma开始采集

void do_tcp_server(void)
{       
       
        uint16 len=0;  
        uint8_t *adc_data_ptr = (uint8_t *)g_adc3_dma_data1[ADC_DATA_LENGTH]; // 指向ADC数据的指针
       
        switch(getSn_SR(SOCK_TCPS))                                                                                                            /*获取socket的状态*/
        {
                case SOCK_CLOSED:                                                                                                                          /*socket处于关闭状态*/
                        socket(SOCK_TCPS ,Sn_MR_TCP,local_port,Sn_MR_ND);                /*打开socket*/
                  break;     
                case SOCK_INIT:                                                                                                                                  /*socket已初始化状态*/
                        listen(SOCK_TCPS);                                                                                                                /*socket建立监听*/
                        RxNum = 0;TxNum = 0;
                  break;
                case SOCK_ESTABLISHED:                                                                                                              /*socket处于连接建立状态*/
                {
                        if(getSn_IR(SOCK_TCPS) & Sn_IR_CON){setSn_IR(SOCK_TCPS, Sn_IR_CON);}/*清除接收中断标志位*/
                        len=getSn_RX_RSR(SOCK_TCPS);                                                                                    /*定义len为已接收数据的长度*/
                        if(len>0)
                        {
                                recv(SOCK_TCPS,buff,len);                                                                                      /*接收来自Client的数据*/
                                RxNum += len;
                                buff[len]=0x00;                                                                                                     /*添加字符串结束符*/
                                send(SOCK_TCPS,buff,len);                                                                                      /*向Client发送数据*/
                                TxNum += len;
                        }
                        if(len>0 && g_adc3_dma_complete_flag == 1)  //adc的dma采集完成
                        {
                        uint16 adc_data_length = ADC_DATA_LENGTH * sizeof(uint32_t);
                        send(SOCK_TCPS, adc_data_ptr, adc_data_length);
            TxNum += adc_data_length;
             // 发送完成后,重置DMA完成标志
             g_adc3_dma_complete_flag = 0;
                        }                       
                }break;
                case SOCK_CLOSE_WAIT:                                                                                                                /*socket处于等待关闭状态*/
                        close(SOCK_TCPS);
                  break;
        }
}

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115488
QQ
发表于 2024-6-20 08:37:44 | 显示全部楼层
先不管任何其他功能,仅测试TCP数据收发正常吗
回复

使用道具 举报

5

主题

224

回帖

244

积分

高级会员

积分
244
发表于 2024-6-20 09:43:11 | 显示全部楼层
信息太少看不出问题
回复

使用道具 举报

18

主题

92

回帖

146

积分

初级会员

积分
146
QQ
 楼主| 发表于 2024-6-20 10:15:55 | 显示全部楼层
eric2013 发表于 2024-6-20 08:37
先不管任何其他功能,仅测试TCP数据收发正常吗

测试了收发数据正常
图片1.png
回复

使用道具 举报

18

主题

92

回帖

146

积分

初级会员

积分
146
QQ
 楼主| 发表于 2024-6-20 10:22:42 | 显示全部楼层
旮旯旭 发表于 2024-6-20 09:43
信息太少看不出问题


#include "adc.h"

#include "spi.h"

ADC_HandleTypeDef hadc3;

DMA_HandleTypeDef hdma_adc3;



void MX_ADC3_Init(void)

{

  ADC_ChannelConfTypeDef sConfig = {0};

  hadc3.Instance = ADC3;

  hadc3.Init.Resolution = ADC_RESOLUTION_8B;

  hadc3.Init.ScanConvMode = ADC_SCAN_DISABLE;

  hadc3.Init.EOCSelection = ADC_EOC_SINGLE_CONV;

  hadc3.Init.LowPowerAutoWait = DISABLE;

  hadc3.Init.ContinuousConvMode = ENABLE;

  hadc3.Init.NbrOfConversion = 1;

  hadc3.Init.DiscontinuousConvMode = DISABLE;

  hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;

  hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;

  hadc3.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_ONESHOT;

  hadc3.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;

  hadc3.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;

  hadc3.Init.OversamplingMode = DISABLE;

  if (HAL_ADC_Init(&hadc3) != HAL_OK)

  {

    Error_Handler();

  }



  sConfig.Channel = ADC_CHANNEL_1;

  sConfig.Rank = ADC_REGULAR_RANK_1;

  sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;

  sConfig.SingleDiff = ADC_SINGLE_ENDED;

  sConfig.OffsetNumber = ADC_OFFSET_NONE;

  sConfig.Offset = 0;

  sConfig.OffsetSignedSaturation = DISABLE;

  if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)

  {

    Error_Handler();

  }

}



void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)

{



  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};

  if(adcHandle->Instance==ADC3)

  {



    PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADC;

    PeriphClkInitStruct.PLL3.PLL3M = 25;

    PeriphClkInitStruct.PLL3.PLL3N = 200;

    PeriphClkInitStruct.PLL3.PLL3P = 2;

    PeriphClkInitStruct.PLL3.PLL3Q = 2;

    PeriphClkInitStruct.PLL3.PLL3R = 2;

    PeriphClkInitStruct.PLL3.PLL3RGE = RCC_PLL3VCIRANGE_0;

    PeriphClkInitStruct.PLL3.PLL3VCOSEL = RCC_PLL3VCOWIDE;

    PeriphClkInitStruct.PLL3.PLL3FRACN = 0;

    PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL3;

    if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)

    {

      Error_Handler();

    }



    /* ADC3 clock enable */

    __HAL_RCC_ADC3_CLK_ENABLE();



    __HAL_RCC_GPIOC_CLK_ENABLE();

    /**ADC3 GPIO Configuration

    PC3_C     ------> ADC3_INP1

    */

    HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PC3, SYSCFG_SWITCH_PC3_OPEN);



    /* ADC3 DMA Init */

    /* ADC3 Init */

    hdma_adc3.Instance = DMA1_Stream2;

    hdma_adc3.Init.Request = DMA_REQUEST_ADC3;

    hdma_adc3.Init.Direction = DMA_PERIPH_TO_MEMORY;

    hdma_adc3.Init.PeriphInc = DMA_PINC_DISABLE;

    hdma_adc3.Init.MemInc = DMA_MINC_ENABLE;

    hdma_adc3.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;

    hdma_adc3.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;

    hdma_adc3.Init.Mode = DMA_NORMAL;

    hdma_adc3.Init.Priority = DMA_PRIORITY_HIGH;

    hdma_adc3.Init.FIFOMode = DMA_FIFOMODE_DISABLE;

    if (HAL_DMA_Init(&hdma_adc3) != HAL_OK)

    {

      Error_Handler();

    }



    __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc3);



  }

}



void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)

{



  if(adcHandle->Instance==ADC3)

  {



    __HAL_RCC_ADC3_CLK_DISABLE();



    /* ADC3 DMA DeInit */

    HAL_DMA_DeInit(adcHandle->DMA_Handle);



  }

}

//ADC回调函数,ADC采集完成后进入回调函数

//adc端口号

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)

{       

        if(hadc->Instance==ADC3)

        {

                TriggerSPI_DMA();

                g_adc3_dma_complete_flag = 1;//采集完成标志

                HAL_ADC_Stop_DMA(&hadc3);

        }

}

这是ADC+DMA的代码





#include "spi.h"
#include "adc.h"
#include "main.h"
SPI_HandleTypeDef hspi2;
DMA_HandleTypeDef hdma_spi2_rx;
DMA_HandleTypeDef hdma_spi2_tx;

void MX_SPI2_Init(void)
{
  hspi2.Instance = SPI2;
  hspi2.Init.Mode = SPI_MODE_MASTER;
  hspi2.Init.Direction = SPI_DIRECTION_2LINES;
  hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi2.Init.CLKPolarity = SPI_POLARITY_HIGH;
  hspi2.Init.CLKPhase = SPI_PHASE_2EDGE;
  hspi2.Init.NSS = SPI_NSS_SOFT;
  hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi2.Init.CRCPolynomial = 0x0;
  hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
  hspi2.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
  hspi2.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
  hspi2.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
  hspi2.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
  hspi2.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
  hspi2.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
  hspi2.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
  hspi2.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE;
  hspi2.Init.IOSwap = SPI_IO_SWAP_DISABLE;
  if (HAL_SPI_Init(&hspi2) != HAL_OK)
  {
    Error_Handler();
  }
}
void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  if(spiHandle->Instance==SPI2)
  {

    PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI2;
    PeriphClkInitStruct.PLL2.PLL2M = 25;
    PeriphClkInitStruct.PLL2.PLL2N = 200;
    PeriphClkInitStruct.PLL2.PLL2P = 1;
    PeriphClkInitStruct.PLL2.PLL2Q = 1;
    PeriphClkInitStruct.PLL2.PLL2R = 2;
    PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_0;
    PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE;
    PeriphClkInitStruct.PLL2.PLL2FRACN = 0;
    PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL2;
    if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
    {
      Error_Handler();
    }

    /* SPI2 clock enable */
    __HAL_RCC_SPI2_CLK_ENABLE();

    __HAL_RCC_GPIOC_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();
    /**SPI2 GPIO Configuration
    PC1     ------> SPI2_MOSI
    PC2_C     ------> SPI2_MISO
    PB10     ------> SPI2_SCK
    */
    GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_10;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    /* SPI2 DMA Init */
    /* SPI2_RX Init */
    hdma_spi2_rx.Instance = DMA1_Stream0;
    hdma_spi2_rx.Init.Request = DMA_REQUEST_SPI2_RX;
    hdma_spi2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
    hdma_spi2_rx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_spi2_rx.Init.MemInc = DMA_MINC_ENABLE;
    hdma_spi2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
    hdma_spi2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
    hdma_spi2_rx.Init.Mode = DMA_NORMAL;
    hdma_spi2_rx.Init.Priority = DMA_PRIORITY_LOW;
    hdma_spi2_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
    if (HAL_DMA_Init(&hdma_spi2_rx) != HAL_OK)
    {
      Error_Handler();
    }
    __HAL_LINKDMA(spiHandle,hdmarx,hdma_spi2_rx);
    /* SPI2_TX Init */
    hdma_spi2_tx.Instance = DMA1_Stream1;
    hdma_spi2_tx.Init.Request = DMA_REQUEST_SPI2_TX;
    hdma_spi2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
    hdma_spi2_tx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_spi2_tx.Init.MemInc = DMA_MINC_ENABLE;
    hdma_spi2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
    hdma_spi2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
    hdma_spi2_tx.Init.Mode = DMA_NORMAL;
    hdma_spi2_tx.Init.Priority = DMA_PRIORITY_LOW;
    hdma_spi2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
    if (HAL_DMA_Init(&hdma_spi2_tx) != HAL_OK)
    {
      Error_Handler();
    }
    __HAL_LINKDMA(spiHandle,hdmatx,hdma_spi2_tx);
//        HAL_DMA_Init(&hdma_spi2_tx); // 初始化了用于SPI传输的DMA
       
       
    /* SPI2 interrupt Init */
    HAL_NVIC_SetPriority(SPI2_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(SPI2_IRQn);
  }
}

void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
{

  if(spiHandle->Instance==SPI2)
  {
    __HAL_RCC_SPI2_CLK_DISABLE();

    /**SPI2 GPIO Configuration
    PC1     ------> SPI2_MOSI
    PC2_C     ------> SPI2_MISO
    PB10     ------> SPI2_SCK
    */
    HAL_GPIO_DeInit(GPIOC, GPIO_PIN_1|GPIO_PIN_2);

    HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10);

    /* SPI2 DMA DeInit */
    HAL_DMA_DeInit(spiHandle->hdmarx);
    HAL_DMA_DeInit(spiHandle->hdmatx);

    /* SPI2 interrupt Deinit */
    HAL_NVIC_DisableIRQ(SPI2_IRQn);
  }
}
void TriggerSPI_DMA(void)
{
    // 检查ADC DMA是否至少传输了一个数据项
    if (__HAL_DMA_GET_COUNTER(&hdma_adc3) == 1) {
        // 启动SPI DMA传输
        HAL_SPI_Transmit_DMA(&hspi2,g_adc3_dma_data1, 1);
    }
}
这是SPI+SPI_DMA的代码


void do_tcp_server(void)
{       
       
        uint16 len=0;  
       
       
        switch(getSn_SR(SOCK_TCPS))                                                                                                            /*获取socket的状态*/
        {
                case SOCK_CLOSED:                                                                                                                          /*socket处于关闭状态*/
                        socket(SOCK_TCPS ,Sn_MR_TCP,local_port,Sn_MR_ND);                /*打开socket*/
                  break;     
                case SOCK_INIT:                                                                                                                                  /*socket已初始化状态*/
                        listen(SOCK_TCPS);                                                                                                                /*socket建立监听*/
                        RxNum = 0;TxNum = 0;
                  break;
                case SOCK_ESTABLISHED:                                                                                                              /*socket处于连接建立状态*/
                {
                        if(getSn_IR(SOCK_TCPS) & Sn_IR_CON){setSn_IR(SOCK_TCPS, Sn_IR_CON);}/*清除接收中断标志位*/
                        len=getSn_RX_RSR(SOCK_TCPS);                                                                                    /*定义len为已接收数据的长度*/
//                        if(len>0)
//                        {
//                                recv(SOCK_TCPS,buff,len);                                                                                      /*接收来自Client的数据*/
//                                RxNum += len;
//                                buff[len]=0x00;                                                                                                     /*添加字符串结束符*/
//                                send(SOCK_TCPS,buff,len);                                                                                      /*向Client发送数据*/
//                                TxNum += len;
//                        }
                        if(len>0 && g_adc3_dma_complete_flag == 1)  //adc的dma采集完成
                        {
                        uint16 adc_data_length = ADC_DATA_LENGTH * sizeof(uint32_t);
                        send(SOCK_TCPS, g_adc3_dma_data1, adc_data_length);
            TxNum += adc_data_length;
             // 发送完成后,重置DMA完成标志
             g_adc3_dma_complete_flag = 0;
                        }                       
                }break;
                case SOCK_CLOSE_WAIT:                                                                                                                /*socket处于等待关闭状态*/
                        close(SOCK_TCPS);
                  break;
        }
}
这是TCP_发送的代码




#define ADC_DATA_LENGTH  2048  //定义采集数据长度为2048
uint8_t g_adc3_dma_data1[ADC_DATA_LENGTH];//定义adc3采集数据存放数组
uint8_t g_adc3_dma_complete_flag = 0;//adc3数据dma采集完成标志,在dma采集完成回调函数设置

void SystemClock_Config(void);

int main(void)
{
//        int j = 0;
  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART6_UART_Init();
  MX_ADC3_Init();
  MX_TIM6_Init();
  MX_SPI2_Init();
  HAL_ADC_Start_DMA(&hadc3,(uint32_t *)g_adc3_dma_data1,ADC_DATA_LENGTH);//ADC的dma开始采集,强制转换为uint32_t

//        HAL_DMA_Start(hspi->hdmatx, (uint32_t)pData, W5500_TX_BUFFER_ADDRESS, Size);
  /* USER CODE BEGIN 2 */
        gpio_for_w5500_config();                                                /*初始化MCU相关引脚*/
        reset_w5500();                                                                                        /*硬复位W5500*/
        set_w5500_mac();                                                                                /*配置MAC地址*/
  socket_buf_init(txsize, rxsize);                /*初始化8个Socket的发送接收缓存大小*/
  IP_AutoSet(3500);

  while (1)
  {
//                                if(g_adc3_dma_complete_flag == 1)//采集数据没完成,采集完成后再发送 111
//                        {
//                                for(j=0;j<2048;j++)
//                                {
//                                        printf("%d\r\n",g_adc3_dma_data1[j]&0x0000ffff);
//                                        //printf("%f\r\n",g_adc1_dma_data1*3.3/255);//采集到的值传到上位机串口,注意用仿真器的串口容易死机。
//                       
//                                }
//                                g_adc3_dma_complete_flag = 0;               
//                                memset(g_adc3_dma_data1,0,ADC_DATA_LENGTH);//清除数据
//                                HAL_ADC_Start_DMA(&hadc3,(uint32_t *)g_adc3_dma_data1,ADC_DATA_LENGTH);//ADC的dma开始采集
//                        }
                        do_tcp_server();
  }

}这是我的主函数的代码,注释掉的是我之前只用ADC+串口打印的,测试没有问题。








然后现在就是下载好程序,可以ping通,并且客户端发送数据也可以返回数据,但是ADC采集的数据没法从W5500服务端发送到PC。


















回复

使用道具 举报

7

主题

33

回帖

54

积分

初级会员

积分
54
发表于 2024-6-20 10:38:29 | 显示全部楼层
之前的毕业设计用的就是使用STM32F4+W5500+OV2640,往pc发送图片流,有个地方要注意一下,W5500好像一次性socket只能发送1024还是2048个字节的数据,要修改W5500某个寄存器。
回复

使用道具 举报

18

主题

92

回帖

146

积分

初级会员

积分
146
QQ
 楼主| 发表于 2024-6-20 11:14:51 | 显示全部楼层
Yhlr 发表于 2024-6-20 10:38
之前的毕业设计用的就是使用STM32F4+W5500+OV2640,往pc发送图片流,有个地方要注意一下,W5500好像一次性so ...

是因为W5500的16KB缓存分配给了8个SOCKET吗,我现在是想实现ADC3 5M采样率然后W5500上传到PC端,然后再处理,不知道这个通信速度够不够,虽然我配置了SPI的速度最高,但是这个W5500的收发速度还没有测试
回复

使用道具 举报

22

主题

182

回帖

248

积分

高级会员

积分
248
QQ
发表于 2024-6-20 11:22:39 | 显示全部楼层
这种SPI转以太网方案,和用ETH外设与PHY做有什么区别吗?我看这个W5500和一个PHY收发器价格都差不多,用外设做好麻烦。
回复

使用道具 举报

18

主题

92

回帖

146

积分

初级会员

积分
146
QQ
 楼主| 发表于 2024-6-20 13:45:13 来自手机 | 显示全部楼层
yono 发表于 2024-6-20 11:22
这种SPI转以太网方案,和用ETH外设与PHY做有什么区别吗?我看这个W5500和一个PHY收发器价格都差不多,用外 ...

我当时感觉w5500都给集成好了 然后直接移植官方给的就行了 图方便嘛
回复

使用道具 举报

22

主题

320

回帖

386

积分

高级会员

积分
386
发表于 2024-6-20 14:24:39 | 显示全部楼层
请问层主,使用W5500的时候发热吗,我自己画的板子,发现W5500工作的时候带着LDO一起发热严重,软件暂时工作正常。
回复

使用道具 举报

18

主题

92

回帖

146

积分

初级会员

积分
146
QQ
 楼主| 发表于 2024-6-20 16:23:53 | 显示全部楼层
tovinz 发表于 2024-6-20 14:24
请问层主,使用W5500的时候发热吗,我自己画的板子,发现W5500工作的时候带着LDO一起发热严重,软件暂时工 ...

没有,我程序还没成功呢,只是PING通了,然后客户端发送收据可以收到,但是我ADC采集的数据源源不断的发送还没有实现,所以不知道这个发热严重的问题
回复

使用道具 举报

18

主题

92

回帖

146

积分

初级会员

积分
146
QQ
 楼主| 发表于 2024-6-25 17:10:50 | 显示全部楼层
旮旯旭 发表于 2024-6-20 09:43
信息太少看不出问题

请问我就是用W5500发送采集的数据,可以帮我指导一下嘛,发送的数据全是0,我ADC采集的数据直接放在一个uint32的缓冲区了,然后直接强制转换该数据为uint8然后发送,但是结果全是0是怎么回事?
回复

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

积分
55
发表于 2024-7-24 10:22:07 | 显示全部楼层
Yhlr 发表于 2024-6-20 10:38
之前的毕业设计用的就是使用STM32F4+W5500+OV2640,往pc发送图片流,有个地方要注意一下,W5500好像一次性so ...

可以分享一下你w5500那一块的代码?大哥  
回复

使用道具 举报

7

主题

33

回帖

54

积分

初级会员

积分
54
发表于 2024-7-24 10:43:41 | 显示全部楼层
hadc3.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_ONESHOT;

DMA模式吗,使用DMA_ONESHOT不对吧
DMA模式一般使用定时器的TRGO触发
回复

使用道具 举报

18

主题

92

回帖

146

积分

初级会员

积分
146
QQ
 楼主| 发表于 2024-7-28 17:03:59 | 显示全部楼层
capw 发表于 2024-7-24 10:43
hadc3.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_ONESHOT;

DMA模式吗,使用DMA_ONESHOT ...

请问这个是啥意思?DMA oneshot不是一次全部传输吗?我用ADC采集的是没问题的。
就是现在我改成外部的一个上升沿事件触发ADC采样+DMA传输,还用oneshot这样对不对?
回复

使用道具 举报

18

主题

92

回帖

146

积分

初级会员

积分
146
QQ
 楼主| 发表于 2024-9-6 18:12:00 | 显示全部楼层
tovinz 发表于 2024-6-20 14:24
请问层主,使用W5500的时候发热吗,我自己画的板子,发现W5500工作的时候带着LDO一起发热严重,软件暂时工 ...

您好,我现在也发现我的W5500发热严重,请问您是怎么解决的?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115488
QQ
发表于 2024-9-7 08:46:39 | 显示全部楼层
不吃鱼的猫大人 发表于 2024-9-6 18:12
您好,我现在也发现我的W5500发热严重,请问您是怎么解决的?

发热是正常的,只要不是非常烫手的状态就没问题,
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2024-9-9 10:13:06 | 显示全部楼层
不吃鱼的猫大人 发表于 2024-9-6 18:12
您好,我现在也发现我的W5500发热严重,请问您是怎么解决的?

大佬可以分享一下代码不,我学习一下
回复

使用道具 举报

18

主题

92

回帖

146

积分

初级会员

积分
146
QQ
 楼主| 发表于 2024-12-18 09:59:40 | 显示全部楼层
gugualaoyao 发表于 2024-9-9 10:13
大佬可以分享一下代码不,我学习一下

okok 不好意思刚刚看到
回复

使用道具 举报

18

主题

92

回帖

146

积分

初级会员

积分
146
QQ
 楼主| 发表于 2024-12-18 10:04:21 | 显示全部楼层
gugualaoyao 发表于 2024-9-9 10:13
大佬可以分享一下代码不,我学习一下

通过网盘分享的文件:H750_W5500_DMA SPI1-8.9.zip
链接: https://pan.baidu.com/s/1X8WxaLxf2gH9-Y0LJqW7iA?pwd=9fbi 提取码: 9fbi                     我附件有点大,只能通过这种方式了,要是不可以的话你就邮箱联系我  21625473@qq.com
回复

使用道具 举报

18

主题

92

回帖

146

积分

初级会员

积分
146
QQ
 楼主| 发表于 2024-12-18 10:08:24 | 显示全部楼层
tovinz 发表于 2024-6-20 14:24
请问层主,使用W5500的时候发热吗,我自己画的板子,发现W5500工作的时候带着LDO一起发热严重,软件暂时工 ...

我也是发热严重
回复

使用道具 举报

15

主题

49

回帖

94

积分

初级会员

积分
94
发表于 2024-12-26 09:54:03 | 显示全部楼层
带操作系统的tcp没用过,不过裸机tcp,udp我都发送过ADC的数据,每个包长tcp最大包是1470字节(tcp有点忘了,不知道对不对),UDP是1472字节,超过包长发送不了,需要进行手动分包发送,带操作系统的接口不知道有没有这个限制
回复

使用道具 举报

18

主题

92

回帖

146

积分

初级会员

积分
146
QQ
 楼主| 发表于 2024-12-26 11:44:40 | 显示全部楼层
海米阿门 发表于 2024-12-26 09:54
带操作系统的tcp没用过,不过裸机tcp,udp我都发送过ADC的数据,每个包长tcp最大包是1470字节(tcp有点忘了 ...

请问您的ADC采集的数据是多少bit的?uint8 还是uint16?
回复

使用道具 举报

15

主题

49

回帖

94

积分

初级会员

积分
94
发表于 2024-12-27 08:33:34 | 显示全部楼层
不吃鱼的猫大人 发表于 2024-12-26 11:44
请问您的ADC采集的数据是多少bit的?uint8 还是uint16?

uint16 ,16位的,我的一帧数据有6000个16bit的ADC数据,需要手动把这120000字节拆成很多个1472字节的小包才能通过LWIP发送,裸机是这样,代操作系统的没看不是很清楚
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-28 16:19 , Processed in 0.418886 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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