STM8学习笔记---串口printf函数的实现

       在使用单片机的时候,串口是要经常使用的功能,特别是在调试代码的过程中,经常需要使用串口打印出某些变量值,来判断程序执行流程是否正常。但是单片机默认情况下没有printf函数,如果需要使用printf函数的功能,就需要自己在串口代码中配置。下面总结一下如何在STM8单片机中使用printf函数功能。

首先按照常规方法先初始化串口

void Uart1_IO_Init( void )
{
    PD_DDR |= ( 1 << 5 );                       //输出模式 TXD
    PD_CR1 |= ( 1 << 5 );                       //推挽输出
    PD_DDR &= ~( 1 << 6 );                      //输入模式 RXD
    PD_CR1 &= ~( 1 << 6 );                      //浮空输入
}

//baudrate 为需要设置的波特率
void Uart1_Init( unsigned int baudrate )
{
    unsigned int baud;
    baud = 16000000 / baudrate;
    Uart1_IO_Init();
    UART1_CR1 = 0;
    UART1_CR2 = 0;
    UART1_CR3 = 0;
    UART1_BRR2 = ( unsigned char )( ( baud & 0xf000 ) >> 8 ) | ( ( unsigned char )( baud & 0x000f ) );
    UART1_BRR1 = ( ( unsigned char )( ( baud & 0x0ff0 ) >> 4 ) );
    UART1_CR2_bit.REN = 1;                      //接收使能
    UART1_CR2_bit.TEN = 1;                      //发送使能
    UART1_CR2_bit.RIEN = 1;                     //接收中断使能
}

首先设置IO口,然后设置串口相关寄存器。设置好之后串口就可以使用了,但是这时候还不能使用printf函数功能,要使用printf函数,需要重新定向putchar函数。设置代码如下:

#include "stdio.h"

int putchar( int ch )
{
    while( !( UART1_SR & 0X80 ) );              //循环发送,直到发送完毕
    UART1_DR = ( u8 ) ch;
    return ch;
}

将putchar添加到串口文件中,然后将函数里面的寄存器设置为串口1,添加头文件stdio.h,这时候就可以使用printf函数了。

下来再主函数中使用printf打印数据就可以了

void main( void )
{
    unsigned int i = 0;
    SysClkInit();                         
    __asm( "sim" );                       
    LED_GPIO_Init();                      
    Uart1_Init(9600);                      
    __asm( "rim" );                       
    LED = 0;
    while( 1 )
    {
        LED = !LED;
        printf( "%d\r\n", i++ );
        delay_ms( 500 );
    }
}

0.5s改变一次LED灯的状态,然后打印一个数字。串口打印效果如下:

完整工程下载链接: STM8单片机实现串口printf函数打印功能

发布了76 篇原创文章 · 获赞 30 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_20222919/article/details/105391581