首页 > 解决方案 > STM32 CDC_Transmit_FS:为什么在使用 sprintf() 或 strcat() 时会出现 '\x'?

问题描述

我正在尝试使用“CDC_Transmit_FS()”通过 USB 从 ADC 发送值

在接收端,我使用 readline() 接收数据并将“字符串”解码为“int”

该代码工作正常,但有时我会收到例如 b'\x00234\n' 而不是 b'1234\n',这会引发解码错误。

你知道为什么会出现'\x'吗?

另一个问题是:有没有更聪明的方法通过 USB 发送 ADC 值而不是将 int 值转换为字符串?

我想让传输更快。提前致谢!

uint32_t adcbuff[sample];
char endofpacket[5] = {'9', '9', '9', '9', '\n'};
char txbuff[sample*5];

while(1)
{

    HAL_ADC_Start_DMA(&hadc2,(uint32_t*)adcbuff, sample);

    for(i = 0; i < sample; i++)
    {
     sprintf (tempbuff,  "%u\n", ((adcbuff[i] * 5000) / 0xFFFF)-2000); 
     strcat( txbuff,tempbuff);
    }
        
    strcat( txbuff,endofpacket);
    CDC_Transmit_FS( (uint8_t*)txbuff, strlen(txbuff));  
    strcpy(txtbuff,"");

}

标签: printfusbstm32strcatcdc

解决方案


没有足够的代表发表评论

通常\x是十六进制值的指示。是否正在接收非字母数字值?对于故障排除,我会暂时更改

sprintf (tempbuff, "%u\n", ((adcbuff[i] * 5000) / 0xFFFF)-2000);

sprintf (tempbuff, "%s\n", ((adcbuff[i] * 5000) / 0xFFFF)-2000);查看正在发送的字符类型。(也许 sprintf 改为 tmp 文件。)


推荐阅读