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

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

void Uart1_IO_Init( void )
{PD_DDR |= ( 1 << 5 );                       //输出模式 TXDPD_CR1 |= ( 1 << 5 );                       //推挽输出PD_DDR &= ~( 1 << 6 );                      //输入模式 RXDPD_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函数打印功能

STM8学习笔记---串口printf函数的实现相关推荐

  1. STM8学习笔记---串口通信中如何自己定义通信协议

    在单片机刚开始学习的时候,串口通信是经常要用到的,但是实际产品中串口通信是需要通信协议的.好多人不明白为什么要用通信协议,如何定义通信协议,带通信协议的程序要怎么写.今天就来说一下如何串口通信协议是如 ...

  2. STM8学习笔记---串口uart1

    使用uart1串口,需要用到stm8s_uart1.c和stm8s_uart1.h两个文件 1.建立工程目录结构如下: 2.编写uart.h文件如下: #ifndef __UART_H #define ...

  3. STM8学习笔记----普通IO口模拟串口功能

    串口在产品应用中很常见,但是单片机的默认带的串口往往比较少,有时候就会出现串口不够用,所以就想着能不能用普通IO口模拟串口来实现串口的功能. 要模拟串口首先要清楚串口数据传输过程中的原理. 常用的串口 ...

  4. IOS学习笔记07---C语言函数-printf函数

    IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...

  5. STM32F407霸天虎HAL库学习笔记——串口发送

    STM32F407霸天虎HAL库学习笔记--串口收发 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil printf重写 main函数 五.实验效果 一.软件准备 软件准备 二.硬件准备 ...

  6. c++学习笔记内联函数,函数重载,默认参数

    c++学习笔记内联函数,函数重载,默认参数 1 inline内联函数 C++中的const常量可以替代宏常数定义,如: const int A = 3;  #define A 3 C++中是否有解决 ...

  7. c语言中void arrout,c语言学习笔记(数组、函数

    <c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...

  8. IOS学习笔记07---C语言函数-scanf函数

    2013/8/7 IOS学习笔记07---C语言函数-scanf函数 ------------------------------ qq交流群:创梦技术交流群:251572072            ...

  9. IOS学习笔记06---C语言函数

    IOS学习笔记06---C语言函数 --------------------------------------------  qq交流群:创梦技术交流群:251572072              ...

最新文章

  1. [原]巧用RenderTexture
  2. 如何在DataFrame 中优雅的增加一行,一列
  3. 主c++ 辅lua luabind protobuf
  4. 如何改变UITableViewCell的选中样式(颜色)?storyboard上cell的selection不可用?
  5. anaconda mac安装
  6. python面向对象继承_四. python面向对象(继承)
  7. U3D的有限状态机系统
  8. 快去换电池!苹果召回6.3万台MacBook Pro 有你的吗?
  9. java猜单词游戏_9 java基础综合编程练习---猜单词游戏
  10. MySQL存储过程之查询受影响的行数与查询到的行数
  11. ActiveMQ消息重发
  12. 使用 IntraWeb (38) - TIWAppForm、TIWForm、TIWBaseHTMLForm、TIWBaseForm
  13. Java微服务:这个画饼是个谎言,但你却不能忽视它
  14. c语言strTrimed函数用法介绍,linux type命令用法_转
  15. “21天好习惯“第一期-4
  16. java关键字与解释_5.Java基础知识-注释和关键字
  17. python爬虫毕业论文大纲参考模板_毕业论文大纲参考模板.docx
  18. java多元一次方程组求解_java 怎么解多元一次不定方程组
  19. 小米手机打开报告mimu查看程序调试错误locat
  20. 戴尔_从偶像派到实力派【我身边的戴尔企业级解决方案】

热门文章

  1. Mybatis Plus启动注入 SQL 原理分析
  2. Layui导航、面包屑
  3. CentOS平滑更新nginx版本
  4. indy idhttpserver有关下载的两个问题
  5. 关于0bug商用之道的第三章的少用模板
  6. linux中删除文件名称乱码
  7. [leetcode]Best Time to Buy and Sell Stock III
  8. log4j配置(转)
  9. 常用的对联广告带关闭功能
  10. linux vi 编辑器用法