[STM32L4] STM32L4R5硬件SPI驱动W5500网口的问题

[复制链接]
 楼主| 比神乐 发表于 2023-6-7 16:39 | 显示全部楼层 |阅读模式
我用STM32F303硬件SPI驱动W5500网口好了,TCP服务器好了,UDP好了,只有TCP客户端不行。
这次我用STM32L4R5硬件SPI驱动W5500网口,TCP服务器模式。
读写寄存器不对。
原来是好的板子我用逻辑分析仪抓包
Write_W5500_1Byte(0x0001,169);
抓到0x00,0x01,0x05,0xA9
可是现在抓到的是
0x00,0x01,0x07,0x05,0x36,0xa9,0xac
我参考STM32F303写的,怎么差别这么大呢?
初始化部分是用STM32CubeMX自动生成的。
请问高手,可能哪里出了问题?谢谢
LLGTR 发表于 2023-6-7 18:05 | 显示全部楼层
时钟配置对了吗?
天天向善 发表于 2023-6-7 18:05 | 显示全部楼层
感觉有点问题,应该不少CubeMX软件的问题。
芯路例程 发表于 2023-6-7 18:06 | 显示全部楼层
你把CubeMX的配置参数发一下看看呗。
MessageRing 发表于 2023-6-7 23:05 | 显示全部楼层
初始化配置发一下
hjl2832 发表于 2023-6-8 08:24 | 显示全部楼层
第一,看下SPI的4种工作模式是否配置为第一种,第二,看看是不是设置为16位数据格式了。正常是要用8位数据格式。
fxyc87 发表于 2023-6-8 08:44 | 显示全部楼层
同一个贴子发多个论坛是不道德的。
大道至简 发表于 2023-6-8 09:16 | 显示全部楼层
应该是你收发缓冲区管理的问题
 楼主| 比神乐 发表于 2023-6-8 09:23 | 显示全部楼层
LLGTR 发表于 2023-6-7 18:05
时钟配置对了吗?

应该没错吧。
  1. void SystemClock_Config(void)
  2. {
  3.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  4.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  5.   /** Configure the main internal regulator output voltage
  6.   */
  7.   if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK)
  8.   {
  9.     Error_Handler();
  10.   }

  11.   /** Initializes the RCC Oscillators according to the specified parameters
  12.   * in the RCC_OscInitTypeDef structure.
  13.   */
  14.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  15.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  16.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  17.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  18.   RCC_OscInitStruct.PLL.PLLM = 1;
  19.   RCC_OscInitStruct.PLL.PLLN = 8;
  20.   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  21.   RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
  22.   RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
  23.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  24.   {
  25.     Error_Handler();
  26.   }

  27.   /** Initializes the CPU, AHB and APB buses clocks
  28.   */
  29.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  30.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  31.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  32.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  33.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  34.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  35.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
  36.   {
  37.     Error_Handler();
  38.   }
  39. }


 楼主| 比神乐 发表于 2023-6-8 09:25 | 显示全部楼层
芯路例程 发表于 2023-6-7 18:06
你把CubeMX的配置参数发一下看看呗。

void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Configure the main internal regulator output voltage
  */
  if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK)
  {
    Error_Handler();
  }

  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 1;
  RCC_OscInitStruct.PLL.PLLN = 8;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
  RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
  {
    Error_Handler();
  }
}

/**
  * @brief SPI1 Initialization Function
  * @param None
  * @retval None
  */
static void MX_SPI1_Init(void)
{

  /* USER CODE BEGIN SPI1_Init 0 */

  /* USER CODE END SPI1_Init 0 */

  /* USER CODE BEGIN SPI1_Init 1 */

  /* USER CODE END SPI1_Init 1 */
  /* SPI1 parameter configuration*/
  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_ENABLE;
  hspi1.Init.CRCPolynomial = 7;
  hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN SPI1_Init 2 */

  /* USER CODE END SPI1_Init 2 */

}

/**
  * @brief GPIO Initialization Function
  * @param None
  * @retval None
  */
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
/* USER CODE BEGIN MX_GPIO_Init_1 */
/* USER CODE END MX_GPIO_Init_1 */

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(RST_GPIO_Port, RST_Pin, GPIO_PIN_SET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin : CS_Pin */
  GPIO_InitStruct.Pin = CS_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(CS_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pin : RST_Pin */
  GPIO_InitStruct.Pin = RST_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(RST_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pin : LED_Pin */
  GPIO_InitStruct.Pin = LED_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);

/* USER CODE BEGIN MX_GPIO_Init_2 */
/* USER CODE END MX_GPIO_Init_2 */
}

 楼主| 比神乐 发表于 2023-6-8 09:27 | 显示全部楼层
fxyc87 发表于 2023-6-8 08:44
同一个贴子发多个论坛是不道德的。

你什么意思?这有什么不道德的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3535

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部