STM32使用printf函数

正点原子学习笔记

1,printf函数输出流程
2,printf的使用
3,printf函数支持

printf函数输出流程(C语言)

1)用户调用 printf()
2)编译器从stdio.h里解析
3)最终由fputc()实现输出

由此用户需要根据最终输出的硬件重新定义该函数,此过程称为:printf重定向

printf的使用

1,printf("Hello World!\r\n");
2,printf("%d\r\n",121);
                                                        常用输出控制符表

控制符说明
%d按十进制整数型数据的实际长度输出
%ld输出长整型数据
%mdm为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出
%c用来输出一个字符
%s用来输出字符
%u输出无符号整型(unsigned)
%f输出实数,包括单精度和双精度,以小数形式输出
%x以十六进制形式输出整数

                                                            常用转义字符表

控制符说明
\r回车,将当前位置移到本行开头
\n换行,将当前位置移到下一行
\\代表一个反斜线字符
\'代表一个单引号字符
\"代表一个双引号字符
\?代表一个问号
\0空字符NULL
\t水平制表(HT)(跳到下一个TAB位置)

printf函数支持

1,避免使用半主机模式                              两种方法:微库法、代码法
2,实现fputc函数                                        实现单个字符输出

半主机模式简介

用于ARM目标的一种机制,可将来自应用程序代码的输入/输出请求传送至运行调试器的主机
简单说:就是通过仿真器实现开发板在电脑上的输入和输出
一般我们:不使用半主机模式!!

方法一:微库法

 方法二:代码法       (推介)                 一个预处理、两个定义、三个函数

1,#pragma import(__use_no_semihosting),确保不从C库中使用半主机函数
2,定义:__FILE 结构体,避免HAL库某些情况下报错
3,定义:FILE__stdout,避免编译报错
4,实现:__ttywrch、_sys_exti 和 _sys_command_string 等三个函数

#if 1
#pragma import(__use_no_semihosting)             
//标准库需要的支持函数                 
struct __FILE 
{ 
	int handle; 
}; 

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
void _sys_exit(int x) 
{ 
	x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{ 	
	while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
	USART1->DR = (u8) ch;      
	return ch;
}
#endif 

因特殊原因,不完善,但能用,正点原子提供

当使用微库法时,只需定义 fputc函数即可

fputc函数介绍

USART1->SR&0X40                 当上一帧发送完成后,位6(TX=1)
USART1->DR =(u8) ch;             将要发送的字符ch写入到DR寄存器
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只猫123456

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值