STM32 CDC_Transmit_FS:为什么使用 sprintf() 或 strcat() 时会出现'x'?



我正试图使用";CDC_Transmit_FS((";

在接收端,我使用readline((接收数据,并将"string"解码为"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,  "%un", ((adcbuff[i] * 5000) / 0xFFFF)-2000); 
strcat( txbuff,tempbuff);
}

strcat( txbuff,endofpacket);
CDC_Transmit_FS( (uint8_t*)txbuff, strlen(txbuff));  
strcpy(txtbuff,"");
}

没有足够的代表作为评论发布

通常x是十六进制值的指示。可能是收到了一个非字母数字的值吗?为了进行故障排除,我会临时更改

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

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

b'\x00234\n'-这意味着第一个字节是0!不是ASCII 0=0x30,而是0。这可能是strcat的作用——连接此函数后,在字符串末尾添加"\0"。

不使用sprintf,只需将stdout重定向到USB-CDC并使用printf:

int _write(int file, char *ptr, int len)
{
UNUSED(file);
CDC_Transmit_FS((uint8_t*)ptr, len);
while (hcdc->TxState != 0);
return len;
}

如果您想一次发送所有消息,请使用带有_IOFBF的stdoutsetvbuf并调用fflush(stdout(;

相关内容

  • 没有找到相关文章

最新更新