野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12299|回复: 3

【在线等】void USART_printf(USART_TypeDef* USARTx,char *Data,...);函数的问题

[复制链接]
发表于 2016-12-7 21:47:23 | 显示全部楼层 |阅读模式
野火的旧版图书中会有如下2个函数可是使用现象是一只输出一个字符0xD0.

请问这个什么情况啊。串口是测试通的,但就是使用这个void USART_printf(USART_TypeDef* USARTx,char *Data,...);函数会出问题。

主函数使用如下:USART_printf(UART5,"\r\nTHIS is USART_PRINTF_DEMO %d,%s",50,"XYZ");打印输出


static char *itoa(int value,char *string,int radix)
{
int i,d;
int flag = 0;
char *ptr = string;
if(radix != 10)
{
  *ptr = 0;
  return string;
}
if(!value)
{
  *ptr++ = 0x30;
  *ptr = 0;
  return string;
}

if(value < 0)
{
  *ptr++ = '-';
  value *=-1;
}

for(i=10000;i>0;i/=10)
{
  d = value/i;
  if(d||flag)
  {
   *ptr++ = (char)(d+0x30);
   value -= (d*i);
   flag = 1;
  }
}
*ptr = 0;
return string;
}
void USART_printf(USART_TypeDef *USARTx,char *Data,...)
{
const char *s;
int d;
char but[16];
va_list ap;
va_start(ap,Data);
while(*Data !=0)    //&Aring;&ETH;&para;&Iuml;&Ecirc;&Ccedil;·&ntilde;&micro;&frac12;&acute;&iuml;×&Ouml;·&ucirc;&acute;&reg;&frac12;á&Ecirc;&oslash;·&ucirc;
{
  if(*Data==0x5c)  //&Aring;&ETH;&para;&Iuml;&Ecirc;&Ccedil;·&ntilde;&Ecirc;&Ccedil;'\'
  {
   switch(*++Data)
   {
    case'r':       //&raquo;&Oslash;&sup3;&micro;·&ucirc;
     USART_SendData(USARTx,0x0d);
      Data++;
     break;
    case'n':        //&raquo;&raquo;&ETH;&ETH;·&ucirc;
     USART_SendData(USARTx,0x0a);
      Data++;
     break;
    default:
     Data++;
     break;
   }
  }
  else if(*Data == '%')
  {
   switch(*++Data)
   {
    case's':  //×&Ouml;·&ucirc;&acute;&reg;
     s = va_arg(ap,const char*);
     for(;*s;s++)
     {
      USART_SendData(USARTx,*s);
      while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE) == RESET);
     }
     Data++;
     break;
    case'd':
     d=va_arg(ap,int);
     itoa(d,but,10);
     for(s = but;*s;s++)
     {
      USART_SendData(USARTx,*s);
      while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE) == RESET);
     }
     Data++;
     break;
    default:
     Data++;
     break;
     
   }   
  }
  else USART_SendData(USARTx,*Data);
  while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE) == RESET);
}
}

  1. sdasd
复制代码

QQ截图20161207214558.png
回复

使用道具 举报

 楼主| 发表于 2016-12-7 21:48:54 | 显示全部楼层
按照野火旧版书的打发,有没有遇到这样问题的,搞了2天了,还是搞不定。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-7 21:56:24 | 显示全部楼层
有人来吗?
回复

使用道具 举报

 楼主| 发表于 2016-12-7 22:10:07 | 显示全部楼层
问题已成功解决,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-22 19:42 , Processed in 0.035514 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表