STM8串口打印调试信息

发布者:快乐舞步最新更新时间:2018-05-20 来源: eefocus关键字: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)

    {   

    }


}


关键字:STM8  串口打印  调试信息 引用地址:STM8串口打印调试信息

上一篇:IAR烧写MSP430失败的解决方法
下一篇:stm8之OptionByte的使用

推荐阅读最新更新时间:2024-03-16 16:03

STM8单片机串口发送引脚和接收引脚分开使用
在使用STM8S003单片机时,需要用到ADC采样功能,STM8S003总共有5个ADC采样口,但是其中两个采样口是和串口复用的,如果当ADC口用,就不能用串口,如果当串口用,就不能用ADC口。 通过芯片管脚的原理图可以看到PD5口可以当作模拟采样第5通道使用,也可以用当做串口发送口使用。PD6口可以当做模拟采样第6通道使用,也可以当做串口接收口使用。 在项目中需要将串口当做AD口使用,但是也需要串口向外发送监控数据。AD功能和串口功能需要同时使用,于是想到,串口只用到了发送引脚,那么能不能将串口的接收引脚当做AD功能用。这样PD5口作为串口发送引脚使用,PD6口作为模拟采样第6通道使用。 先写一个简单的测试程序测试一
[单片机]
<font color='red'>STM8</font>单片机<font color='red'>串口</font>发送引脚和接收引脚分开使用
STM8的数据@near@tiny定义
如何分配变量到指定的地址 举例: unsigned char temp_A@0x00; //定义无符号变量temp_A,强制其地址为0x00 unsigned char temp_B@0x100; //定义无符号变量temp_B,强制其地址为0x100 @tiny unsigned char temp_C; //定义无符号变量temp_C,由编译器自动在地址小于0x100的RAM中为其分配一个地址 @near unsigned char temp_D; //定义无符号变量temp_D,由编译器自动在地址大于0xFF的RAM中为其分配一个地址 另外也可以采用伪指令 pragma 将函数或者变量定义到指定的se
[单片机]
ROM版本下系统调试信息的一种显示方法
    摘要: 提出在目标系统脱离开发系统运行时,如何通过串口在Windows的超级终端软件中显示调试信息的一个具体方法。该方法有助于改进调试质量、缩短调试周期。     关键词: 脱机调试 超级终端 可变参数函数 输出函数 1 ROM版本目标系统的调试问题 一般的目标系统在开发工具环境下的调试并不困难,但最终系统必须脱离开发工具独立运行,即使在开发工具环境下完全正常的系统,ROM版本也往往会出现各种问题。原因有两人:一是开发工具硬件环境和最终的目标硬件环境不完全相同;二是外部因素不同,实验室中无法模拟现场的很多外部条件。因此,在脱离开发工具后的现场运行中,也能进行调试,这在产品开发的初期是十分重要的。对
[应用]
STM8单片机学习总结初步02
之前做的PCB板回来前,需构建“驱动代码”的“架构”问题,相对简单,按流程图整理出的文件截图共2页,具体如下: 第1页: 第2页: --------------------------华丽分割线 1------------------------- 编程使用的“版本”为“IAR for STM8 1401”,使用还不错,比较顺手,由于已经完成过部分驱动,并将所有头文件封装进 includes.h 中,包含的头文件如下: #ifndef __INCLUDES_H_FOR_STM8 #define __INCLUDES_H_FOR_STM8 #include ultra_maps.h #include ultra_edi
[单片机]
<font color='red'>STM8</font>单片机学习总结初步02
STM8 单工通信
STM8 单工通信 SPI能够以两种配置工作于单工方式: 1条时钟线和1条双向数据线 1条时钟线和1条数据线(双工或接收方式) 1条时钟线和1条双向数据线 设置SPI_CR2寄存器中的BDM位启用此模式。在这个模式中,SCK用作时钟,主模式中的MOSI或从模式中的MISO用作数据通信。 传输的方向(输入或输出)由SPI_CR2寄存器里的BDOE控制,当这个位是1的时候,数据线是输出,否则是输入。 1条时钟和1条数据线(双工或只接收方式) 为了释放一根I/O脚作为它用,可以通过设置SPI_CR2寄存器中的RXONLY位来禁止SPI输出功能。这样的话,SPI将运行于只接收模式。当RXONLY位置0时,SPI又会恢复到全
[单片机]
STM8 SPI 例程 通信出错
这个STM8的SPI通信也够奇葩的,跟STM32有大区别。光判断发送空和接收空的标志还不行,还必须判断忙标志位,而且读数的时候要等忙标志完毕才能读,废话少说上代码: 这是一段发2字节收2字节的代码,注意如果第二个字节接收才有效的话,也需要发送第二个字节才能提供时钟进行接收: GPIO_WriteLow(GPIOA, GPIO_PIN_3); while (SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET){} SPI_SendData(0x80 | 0x75); while(SPI_GetFlagStatus(SPI_FLAG_BSY) == SET){}
[单片机]
ROM版本下系统调试信息的一种显示方法
    摘要: 提出在目标系统脱离开发系统运行时,如何通过串口在Windows的超级终端软件中显示调试信息的一个具体方法。该方法有助于改进调试质量、缩短调试周期。     关键词: 脱机调试 超级终端 可变参数函数 输出函数 1 ROM版本目标系统的调试问题 一般的目标系统在开发工具环境下的调试并不困难,但最终系统必须脱离开发工具独立运行,即使在开发工具环境下完全正常的系统,ROM版本也往往会出现各种问题。原因有两人:一是开发工具硬件环境和最终的目标硬件环境不完全相同;二是外部因素不同,实验室中无法模拟现场的很多外部条件。因此,在脱离开发工具后的现场运行中,也能进行调试,这在产品开发的初期是十分重要的。对
[嵌入式]
[STM8] - 外部时钟 + 内部时钟 的切换
STM8S103K3: 外部时钟 + 内部时钟 的切换。 首先看一下 STM8S103K3 的时钟结构图,可以帮助你很好的理解。 这里有几个时钟,就是图中标识的时钟,需要弄清楚一下: fHSE: 外部高速晶振时钟,它是由外部晶振产生,大小由外部晶振大小决定,STM8S的外部晶振范围:1-24M,看图中的”HSE OSC 1-24M“。 fHSI:内部RC高速时钟,它是由内部的RC震荡电路产生的,其值16M。但是可以经过后面的分频器分频,四个分频系数可供选择(1,2,4,8)。注:精准度比外部晶振的要稍差一些。 fMASTER:主时钟,它是由HSE 或者 HSI提供时钟,主要功能给外围设备(peripherals,如I
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved