STM32
直播中

吕珠峰

10年用户 794经验值
擅长:可编程逻辑
私信 关注
[问答]

STM32f429 vcp上位机概率性收不到数据是怎么回事?

用VCP官方库,修改VCP_DataTx函数如下: static uint16_t VCP_DataTx(unit8_t* Buf, uint32_t Len)
{
       u8 i;
       if(linecoding.datatype == 7)
       {}
      else if (linecoding.datatype == 8)
      {
            for(i=0;Soft_VER!=0;i++)
               {
                  APP_Rx_Buffer[APP_Rx_ptr_in]=Soft_VER;
                  APP_Rx_ptr_in++;
                  if(APP_Rx_ptr_in == APP_RX_DATA_SIZE)
                   {APP_Rx_ptr_in = 0;}
              }
      }
}
  字符串Soft_VER里面有30个数据;
发现底层在往上位机发送数据时,上位机会概率性收不到,只要发生收不到的情况,之后发送的数据上位机全部都收不到;


通过调试对比发现:
上位机能收到数据时,每次发送数据,底层会进两次DCD_HandleInEP_ISR中断,第一次是进入(diepint.b.emptyintr),第二次进入(diepint.b.xfercoml);
上位机收不到数据时,只进入一次这个中断(diepint.b.emptyintr)


想请问是什么原因,万分感谢!!!!stm



回帖(2)

徐婷婷

2024-4-26 16:42:41
接收异常数据丢失是不是超过字节了 
举报

douyin8

2024-4-26 17:22:47
STM32F429 VCP(虚拟串口通信)上位机概率性收不到数据的问题可能由多种原因引起。在分析问题之前,我们需要了解STM32F429的VCP功能以及您提供的代码片段。

STM32F429是一款基于ARM Cortex-M4处理器的微控制器,具有丰富的外设和较高的性能。VCP是一种虚拟串口通信功能,允许STM32F429通过USB接口与上位机进行串行通信。在STM32F429中,VCP功能通常通过USB设备固件库(USB Device Firmware Library,简称UDF)实现。

您提供的代码片段是VCP_DataTx函数的修改版本,该函数用于发送数据。函数接收两个参数:一个指向数据缓冲区的指针(Buf)和一个表示数据长度的整数(Len)。在函数内部,您检查了linecoding.datatype的值,这是一个与串口通信相关的参数,用于表示数据位(data bits)的数量。您的代码在linecoding.datatype为7或8时执行不同的操作。

现在,我们来分析可能导致上位机概率性收不到数据的原因:

1. 缓冲区溢出:如果发送的数据量超过了缓冲区的最大容量,可能会导致数据丢失。请确保您的缓冲区足够大,以容纳要发送的所有数据。

2. 传输速率不匹配:如果STM32F429和上位机之间的通信速率不匹配,可能会导致数据丢失或错误。请检查您的代码,确保设置了正确的波特率和数据位。

3. USB中断处理:STM32F429的USB通信依赖于中断处理。如果中断处理不当,可能会导致数据传输不稳定。请检查您的中断处理函数,确保它们正确地处理了USB传输事件。

4. 上位机软件问题:上位机的串口通信软件可能存在问题,导致数据接收不稳定。尝试使用不同的上位机软件,以排除软件问题。

5. 硬件连接问题:检查STM32F429与上位机之间的USB连接,确保连接稳定且无损坏。

6. 电源干扰:电源干扰可能会影响STM32F429的USB通信。请确保您的电源稳定且无干扰。

7. 代码逻辑问题:您的代码中可能存在逻辑错误,导致数据传输不稳定。仔细检查您的代码,确保所有条件分支和循环都正确执行。

为了解决这个问题,您可以尝试以下步骤:

1. 确保缓冲区足够大,以容纳要发送的所有数据。

2. 检查并设置正确的波特率和数据位。

3. 检查并优化中断处理函数,确保它们正确地处理了USB传输事件。

4. 尝试使用不同的上位机软件。

5. 检查STM32F429与上位机之间的USB连接。

6. 确保电源稳定且无干扰。

7. 仔细检查并调试您的代码,以排除逻辑错误。

通过以上步骤,您应该能够找到并解决STM32F429 VCP上位机概率性收不到数据的问题。
举报

更多回帖

×
20
完善资料,
赚取积分