printf - 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,"");
}
解决方案
没有足够的代表发表评论
通常\x
是十六进制值的指示。是否正在接收非字母数字值?对于故障排除,我会暂时更改
sprintf (tempbuff, "%u\n", ((adcbuff[i] * 5000) / 0xFFFF)-2000);
至
sprintf (tempbuff, "%s\n", ((adcbuff[i] * 5000) / 0xFFFF)-2000);
查看正在发送的字符类型。(也许 sprintf 改为 tmp 文件。)