在使用stm32时,发现用usart重定向printf()后,在输出十六进制数时会出现一些问题,直接使用printf("%x",0x01);时,在串口调试助手上输出的是hex格式的数据为31,相当于ASCII形式的01,原因不详,但有解决方法:
方法一:将printf()中的“%x”该为"%c"则数据正常(如果是工作的项目中,谨慎使用第一种方法)
方法二:使用stm32中usart发送函数
Usart发送函数1(只能发送单个字符):
void Usart_SendDate(unsigned char data)
{
while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE)); //检查发送数据寄存器空标志位,空则开始发送
USART_SendData(USART1, *pt);
while(!USART_GetFlagStatus(USART1, USART_FLAG_TC));
}
Usart发送函数2(指针的形式,发送字符串和单个字符都可以):
/*****************************************************************
*函数:uart发送字符串函数
*入参:要发送的字符串的首地址
*返回值:无
******************************************************************/
void Uart_Sendstrings(char *pt)
{
while(*pt)
{
while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));
USART_SendData(USART1, *pt);
while(!USART_GetFlagStatus(USART1, USART_FLAG_TC));
pt++;
}
}
在使用stm32时,发现用usart重定向printf()后,在输出十六进制数时会出现一些问题,直接使用printf("%x",0x01);时,在串口调试助手上输出的是hex格式的数据为31,相当于ASCII形式的01,原因不详,但有解决方法:
方法一:将printf()中的“%x”该为"%c"则数据正常(如果是工作的项目中,谨慎使用第一种方法)
方法二:使用stm32中usart发送函数
Usart发送函数1(只能发送单个字符):
void Usart_SendDate(unsigned char data)
{
while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE)); //检查发送数据寄存器空标志位,空则开始发送
USART_SendData(USART1, *pt);
while(!USART_GetFlagStatus(USART1, USART_FLAG_TC));
}
Usart发送函数2(指针的形式,发送字符串和单个字符都可以):
/*****************************************************************
*函数:uart发送字符串函数
*入参:要发送的字符串的首地址
*返回值:无
******************************************************************/
void Uart_Sendstrings(char *pt)
{
while(*pt)
{
while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));
USART_SendData(USART1, *pt);
while(!USART_GetFlagStatus(USART1, USART_FLAG_TC));
pt++;
}
}
举报