佚名通过本文主要向大家介绍了stm32串口接收字符串,stm32接收字符串,stm32中断接收字符串,stm32串口发送字符串,stm32发送字符串等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: STM32接收字符串,数据中有00,应该如何处理?
描述:
void USART2_printf( USART_TypeDef* USARTx, char *Data, ... )
{
const char *s;
int d;
char buf[16];
va_list ap;
va_start(ap, Data);
while ( *Data != 0 )
{
if ( *Data == 0x5c )
{
switch ( *++Data )
{
case 'r':
USART_SendData(USARTx, 0x0d);
Data ++;
break;
case 'n':
USART_SendData(USARTx, 0x0a);
Data ++;
break;
default:
Data ++;
break;
}
}
现在我有组数据,数据的HEX码如下:01 03 05 00 00 00 00 7F 7A 00 00 2C E5由于上面函数的原因,串口只能打印:01 03 05 但我想调用数据7F 7A 应该如何修改这个函数或者有什么其他方法呢?谢谢大神指点。

解决方案1:
描述:
stm32printfc语言数据
小弟初学STM32不久,用的是野火中的一个例程,其中有个函数:USART2_printfvoid USART2_printf( USART_TypeDef* USARTx, char *Data, ... )
{
const char *s;
int d;
char buf[16];
va_list ap;
va_start(ap, Data);
while ( *Data != 0 )
{
if ( *Data == 0x5c )
{
switch ( *++Data )
{
case 'r':
USART_SendData(USARTx, 0x0d);
Data ++;
break;
case 'n':
USART_SendData(USARTx, 0x0a);
Data ++;
break;
default:
Data ++;
break;
}
}
现在我有组数据,数据的HEX码如下:01 03 05 00 00 00 00 7F 7A 00 00 2C E5由于上面函数的原因,串口只能打印:01 03 05 但我想调用数据7F 7A 应该如何修改这个函数或者有什么其他方法呢?谢谢大神指点。


解决方案1:
for (i=0;i<n;i++) 改为 for (i=0;i<n;)
或者 for (i=0;i<n;i++) 改为 for (i=0;i<n;i++, Data++) 同时把代码中的
Data++;
i++;
都去掉。
很多种方法:
1 用其他值表示串结束,例如:
while ( *Data != 0 ) 改为 while ( *Data != 0x5E )
2 不使用结束符的方式,增加长度参数。如 1 楼。
3 打印前,将 0 替换成其他不影响操作的值
4 打印前,将串在 0 处拆分,每一段均不含 0。对各段依次打印。
……
你那个 n=sizeof(Data); 不灵的。 还是会截取到第一个0数据
需要另想办法。如果数据大小不变,可以用个常量控制。否则,老老实实加一个长度变量
看情况把
va_list ap;
va_start(ap, Data);
加上
void USART2_printf( USART_TypeDef* USARTx, char *Data, uint n)
{
uint i;
for(i=0;i<n;i++)
{
USART_SendData(USARTx, *Data);
Data++;
}
}