★ 您好,欢迎大驾光临!!服务热线:0512-57750678  18021615678
Logo
网站首页 关于我们 产品中心 企业文化
新闻资讯 优势产品 在线留言 联系我们
您现在的位置:网站首页 >> 新闻资讯 >> STM8串口打印调试信息

STM8串口打印调试信息

API函数


static void uart1SendMsg(char msg[], uint16_t length)

{

       uint16_t i;


    for (i =0 ;i < length;i++)

    {

        UART1_SendData8(msg[i]);

        while(UART1_GetFlagStatus(UART1_FLAG_TC) == RESET);

    }

}

"`

void myPrintfAscii(char *msg)

{

    while((*msg) != '\0')

    {

        uart1SendMsg(msg, 1);

        msg++;

    }

}


void myPrintfInt8(uint8_t msg[], int length)

{

    char int2Ascii[64];

    uint16_t i, m, intLength;

    int n;

    long temp;


    for (i = 0;i < length;i++)

    {

        m = 0;

        temp = msg[i];

        while(m <= 64)

        {

            int2Ascii[m++] = temp % 10;

            temp /= 10;

            if (0 == temp)

            {

                break;

            }

        }

        intLength = m;

        for (n = intLength - 1;n >= 0;n--)

        {

            int2Ascii[n] += '0';

            uart1SendMsg(int2Ascii + n, 1);

        }

        myPrintfAscii(" ");

    }

}


void myPrintfInt16(uint16_t msg[], int length)

{

    char int2Ascii[64];

    uint16_t i, m, intLength;

    int n;

    long temp;


    for (i = 0;i < length;i++)

    {

        m = 0;

        temp = msg[i];

        while(m <= 64)

        {

            int2Ascii[m++] = temp % 10;

            temp /= 10;

            if (0 == temp)

            {

                break;

            }

        }

        intLength = m;

        for (n = intLength - 1;n >= 0;n--)

        {

            int2Ascii[n] += '0';

            uart1SendMsg(int2Ascii + n, 1);

        }


        myPrintfAscii("\r\n");

    }

}


void myPrintfInt32(uint32_t msg[], int length)

{

    char int2Ascii[64];

    uint16_t i, m, intLength;

    int n;

    long temp;


    for (i = 0;i < length;i++)

    {

        m = 0;

        temp = msg[i];

        while(m <= 64)

        {

            int2Ascii[m++] = temp % 10;

            temp /= 10;

            if (0 == temp)

            {

                break;

            }

        }

        intLength = m;

        for (n = intLength - 1;n >= 0;n--)

        {

            int2Ascii[n] += '0';

            uart1SendMsg(int2Ascii + n, 1);

        }

        myPrintfAscii(" ");

    }

}


上述方法相对笨一点,而且无法打印负数,浮点数。下面直接使用printf标准输入输出函数,将调试信息串口打印出来。


printf 函数重映射


使用printf函数将调试信息用串口打印出来,首先在有printf函数的C文件下包含 #include ,其次将printf函数重定向串口输出1, 参考网址1。贴代码:


重映射代码,myPrintf.c


#include "stm8s.h"

#include

/*

 由于不同的编译器 putcha 和 getchar 形参和返回值略有不同。

 因此此处采用宏定义的方式区别。

 _RAISONANCE_ 和 _COSMIC_ 这2个宏是由编译器自动添加的预编译宏

*/

#ifdef _RAISONANCE_

 #define PUTCHAR_PROTOTYPE int putchar (char c)

 #define GETCHAR_PROTOTYPE int getchar (void)

#elif defined (_COSMIC_)

 #define PUTCHAR_PROTOTYPE char putchar (char c)

 #define GETCHAR_PROTOTYPE char getchar (void)

#else /* _IAR_ */

 #define PUTCHAR_PROTOTYPE int putchar (int c)

 #define GETCHAR_PROTOTYPE int getchar (void)

#endif /* _RAISONANCE_ */



PUTCHAR_PROTOTYPE

{

 /* 发送一个字符 c 到UART1 */

 UART1_SendData8(c);

 /* 等待发送完毕 */

 while (UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET);

 return (c);

}



GETCHAR_PROTOTYPE

{

 #ifdef _COSMIC_

  char c = 0;

 #else

  int c = 0;

 #endif

 /* 等待新数据到达  */

 while (UART1_GetFlagStatus(UART1_FLAG_RXNE) == RESET);

 /* 读取数据寄存器 */

 c = UART1_ReceiveData8();

 return (c);

}


main.c 主要输出部分:


#include

void main(void)

{       

    myUart1Init (115200);


    printf ("STM8S Start.\r\n");

    while(1)

    {   

    }


}


上一篇:第51章 设置FLASH的读写保护及解除—零死角玩转STM32-F429系列
下一篇:stm8之OptionByte的使用
返回顶部

江苏豹发力电子科技有限公司 版权所有 未经授权禁止复制或镜像
CopyRight 2022   www.baofali.net  All rights reserved

电话:0512-57750678   E-mai:1989186555@qq.com  苏ICP备2022026117号-1