用VisualStudio开发STM32遇到的问题(一)

2019-07-24 13:23发布

我现在已经用VS2017写STM32的程序有一段时间了,在这段时间里,遇到了不少问题,今天就和大家分享一下有关于printf的故事....
之前用MDK开发STM32的时候用正点原子教给大家的printf,很好用,但是在VS上,一直打印不出来东西,于是,我打算重新写printf
废话不多说,直接上代码
void myPrintf(char* fomat, ...)
{
char buf[1000] = "";
char* p;
u16 i = 0;
int num;
float fnum;
char* str;
char tem[100] = "";
va_list va;
va_start(va, fomat);
p = fomat;
while (*p)
{
  if (*p == '%')
  {
   switch (*(++p))
   {   
   case 'd':
    num = va_arg(va, int);
    itoa(num, tem, 10);
    strcpy(buf + i, tem);
    i += strlen(tem) - 1;
    break;
   case 's':
    str = va_arg(va, char*);
    strcpy(buf + i, str);
    i += strlen(str) - 1;
    break;   
   case 'f':
    fnum = va_arg(va, double);
    gcvt(fnum, 8, tem);
    strcpy(buf + i, tem);
    i += strlen(tem) - 1;
    break;
   }      
  }
  else
  {
   buf = *p;
  }
  i++;
  p++;
}
p = buf;
while (*p)
{
  while ((USART1->SR & 0X40) == 0)
   ;
  USART1->DR = (u8) *p;
  p++;
}
va_end(va);
}

其中,使用了string.h strlib.h strarg.h 这三个头文件
原理很简单,就是一个可变参函数.
建立一个1000字节的缓冲区,然后向缓冲区打印数据,最后就是通过串口发送到上位机啦.
测试代码:
4%8YHCH0_A$H23Q%TV0[P6L.png
测试结果
TMT2EEBCPI0A)W_IG7TV8R6.png


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。