STM32
直播中

贺服窍

7年用户 976经验值
私信 关注
[问答]

如何解决STM32F103CBT6的printf重定向后%x输出16进制数的问题?

如何解决STM32F103CBT6的printf重定向后%x输出16进制数的问题?

回帖(1)

徐小婷

2021-12-1 09:51:38
在使用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++;
        }
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分