×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-06-05 发布时间:
|

我现在已经用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字节的缓冲区,然后向缓冲区打印数据,最后就是通过串口发送到上位机啦.


测试代码:

测试结果




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析