嵌入式 > 技术百科 > 详情

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

发布时间:2023-03-21 发布时间:
|

在使用单片机的时候,串口是要经常使用的功能,特别是在调试代码的过程中,经常需要使用串口打印出某些变量值,来判断程序执行流程是否正常。但是单片机默认情况下没有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( "%drn", i++ );

delay_ms( 500 );

}

}

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


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

热门文章 更多
用于MAX7456随屏显示器SPI