在使用单片机的时候,串口是要经常使用的功能,特别是在调试代码的过程中,经常需要使用串口打印出某些变量值,来判断程序执行流程是否正常。但是单片机默认情况下没有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灯的状态,然后打印一个数字。串口打印效果如下:
上一篇:【飞思卡尔 MC9S12】BootLoader 上位机
下一篇:基于使用STM8单片机I2C方式实现读写操作
推荐阅读最新更新时间:2024-11-13 04:28
设计资源 培训 开发板 精华推荐
- LTC3701 的典型应用 - 2 相、低输入电压、双路降压型 DC/DC 控制器
- STEVAL-ILL070V2,使用 HVLED001 35W 单串 LED 驱动器的评估板
- LTC3526BEDC 2 节至 5V 升压转换器的典型应用电路
- LTM4650AIY-1 4.5 至 16Vin、1.5V 和 1.2V、25A 输出降压稳压器的典型应用电路
- 用于仪表的 ±18V 差动放大器
- Mao_Larduino_NANO
- 使用 Analog Devices 的 ADF7020BCPZ 的参考设计
- AD5335 并行接口、四路电压输出、10 位 DAC 的典型应用
- 仿制稚晖君ESP32开发板
- 具有大接地回路电压的 LTC2862AHS8-2 RS485 链路的典型应用