STM8学习笔记---串口printf函数的实现
在使用单片机的时候,串口是要经常使用的功能,特别是在调试代码的过程中,经常需要使用串口打印出某些变量值,来判断程序执行流程是否正常。但是单片机默认情况下没有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函数的实现相关推荐
- STM8学习笔记---串口通信中如何自己定义通信协议
在单片机刚开始学习的时候,串口通信是经常要用到的,但是实际产品中串口通信是需要通信协议的.好多人不明白为什么要用通信协议,如何定义通信协议,带通信协议的程序要怎么写.今天就来说一下如何串口通信协议是如 ...
- STM8学习笔记---串口uart1
使用uart1串口,需要用到stm8s_uart1.c和stm8s_uart1.h两个文件 1.建立工程目录结构如下: 2.编写uart.h文件如下: #ifndef __UART_H #define ...
- STM8学习笔记----普通IO口模拟串口功能
串口在产品应用中很常见,但是单片机的默认带的串口往往比较少,有时候就会出现串口不够用,所以就想着能不能用普通IO口模拟串口来实现串口的功能. 要模拟串口首先要清楚串口数据传输过程中的原理. 常用的串口 ...
- IOS学习笔记07---C语言函数-printf函数
IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...
- STM32F407霸天虎HAL库学习笔记——串口发送
STM32F407霸天虎HAL库学习笔记--串口收发 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil printf重写 main函数 五.实验效果 一.软件准备 软件准备 二.硬件准备 ...
- c++学习笔记内联函数,函数重载,默认参数
c++学习笔记内联函数,函数重载,默认参数 1 inline内联函数 C++中的const常量可以替代宏常数定义,如: const int A = 3; #define A 3 C++中是否有解决 ...
- c语言中void arrout,c语言学习笔记(数组、函数
<c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...
- IOS学习笔记07---C语言函数-scanf函数
2013/8/7 IOS学习笔记07---C语言函数-scanf函数 ------------------------------ qq交流群:创梦技术交流群:251572072 ...
- IOS学习笔记06---C语言函数
IOS学习笔记06---C语言函数 -------------------------------------------- qq交流群:创梦技术交流群:251572072 ...
最新文章
- [原]巧用RenderTexture
- 如何在DataFrame 中优雅的增加一行,一列
- 主c++ 辅lua luabind protobuf
- 如何改变UITableViewCell的选中样式(颜色)?storyboard上cell的selection不可用?
- anaconda mac安装
- python面向对象继承_四. python面向对象(继承)
- U3D的有限状态机系统
- 快去换电池!苹果召回6.3万台MacBook Pro 有你的吗?
- java猜单词游戏_9 java基础综合编程练习---猜单词游戏
- MySQL存储过程之查询受影响的行数与查询到的行数
- ActiveMQ消息重发
- 使用 IntraWeb (38) - TIWAppForm、TIWForm、TIWBaseHTMLForm、TIWBaseForm
- Java微服务:这个画饼是个谎言,但你却不能忽视它
- c语言strTrimed函数用法介绍,linux type命令用法_转
- “21天好习惯“第一期-4
- java关键字与解释_5.Java基础知识-注释和关键字
- python爬虫毕业论文大纲参考模板_毕业论文大纲参考模板.docx
- java多元一次方程组求解_java 怎么解多元一次不定方程组
- 小米手机打开报告mimu查看程序调试错误locat
- 戴尔_从偶像派到实力派【我身边的戴尔企业级解决方案】