[STM32F3] STM32F303板子写TCP客户端拼不通

[复制链接]
804|2
 楼主| 比神乐 发表于 2023-5-7 08:31 | 显示全部楼层 |阅读模式
我有一块F103C8T6的板子,有例程,可实现正常TCP客户端通信。发送函数为:
  1. void SPI1_Send_Byte(unsigned char dat)
  2. {
  3.         SPI_I2S_SendData(SPI1,dat);//写1个字节数据
  4.         while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);//等待数据寄存器空
  5. }
  1. void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data)
  2. {
  3.   /* Check the parameters */
  4.   assert_param(IS_SPI_ALL_PERIPH(SPIx));
  5.   
  6.   /* Write in the DR register the data to be sent */
  7.   SPIx->DR = Data;
  8. }
  1. FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG)
  2. {
  3.   FlagStatus bitstatus = RESET;
  4.   /* Check the parameters */
  5.   assert_param(IS_SPI_ALL_PERIPH(SPIx));
  6.   assert_param(IS_SPI_I2S_GET_FLAG(SPI_I2S_FLAG));
  7.   /* Check the status of the specified SPI/I2S flag */
  8.   if ((SPIx->SR & SPI_I2S_FLAG) != (uint16_t)RESET)
  9.   {
  10.     /* SPI_I2S_FLAG is set */
  11.     bitstatus = SET;
  12.   }
  13.   else
  14.   {
  15.     /* SPI_I2S_FLAG is reset */
  16.     bitstatus = RESET;
  17.   }
  18.   /* Return the SPI_I2S_FLAG status */
  19.   return  bitstatus;
  20. }
接收函数
  1. uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx)
  2. {
  3.   /* Check the parameters */
  4.   assert_param(IS_SPI_ALL_PERIPH(SPIx));
  5.   
  6.   /* Return the data in the DR register */
  7.   return SPIx->DR;
  8. }
  1. unsigned char Read_W5500_1Byte(unsigned short reg)
  2. {
  3.         unsigned char i;

  4.         GPIO_ResetBits(W5500_SCS_PORT, W5500_SCS);//置W5500的SCS为低电平
  5.                        
  6.         SPI1_Send_Short(reg);//通过SPI1写16位寄存器地址
  7.         SPI1_Send_Byte(FDM1|RWB_READ|COMMON_R);//通过SPI1写控制字节,1个字节数据长度,读数据,选择通用寄存器

  8.         i=SPI_I2S_ReceiveData(SPI1);
  9.         SPI1_Send_Byte(0x00);//发送一个哑数据
  10.         i=SPI_I2S_ReceiveData(SPI1);//读取1个字节数据

  11.         GPIO_SetBits(W5500_SCS_PORT, W5500_SCS);//置W5500的SCS为高电平
  12.         return i;//返回读取到的寄存器数据
  13. }


我另一块板子F303ZET6,用STM32CubeMX生成TCP客户端初始化代码。

生成的发送函数原型:
  1. HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
接收函数原型:
  1. HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
我的发送函数:
  1. void SPI1_Send_Byte(unsigned char dat)
  2. {
  3.         unsigned char Data[1];
  4.         Data[0]=dat;
  5.         HAL_SPI_Transmit(&hspi1, Data, 1, 1000);
  6.        
  7. }
接收函数
  1. unsigned char Read_W5500_1Byte(unsigned short reg)
  2. {
  3.         unsigned char i;
  4.         uint8_t pData[1]={0};

  5.        
  6.        
  7.         HAL_GPIO_WritePin(W5500_SCS_PORT, W5500_SCS,GPIO_PIN_RESET);//置W5500的SCS为低电平
  8.                        
  9.         SPI1_Send_Short(reg);//通过SPI1写16位寄存器地址
  10.         SPI1_Send_Byte(FDM1|RWB_READ|COMMON_R);//通过SPI1写控制字节,1个字节数据长度,读数据,选择通用寄存器


  11.         HAL_SPI_Receive(&hspi1, pData, 1, 1000);
  12.         HAL_SPI_Transmit(&hspi1, 0x00, 1, 1000);
  13.         HAL_SPI_Receive(&hspi1, pData, 1, 1000);
  14.         i=pData[0];
  15.         HAL_GPIO_WritePin(W5500_SCS_PORT, W5500_SCS,GPIO_PIN_SET);
  16.         return i;//返回读取到的寄存器数据
  17. }
程序下载进去,拼不通。
仿真:
1.jpg
卡在这条语句。
请问高手,如何解决呀?谢谢!
Undshing 发表于 2023-5-9 23:29 | 显示全部楼层
可以正常通信的话为什么ping不通?
 楼主| 比神乐 发表于 2023-5-10 06:48 | 显示全部楼层
Undshing 发表于 2023-5-9 23:29
可以正常通信的话为什么ping不通?

你没仔细看我的帖子吧。
STM32F103可以拼通。
STM32F303拼不通。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3537

帖子

7

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