STM32使用printf函数

这篇具有很好参考价值的文章主要介绍了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 输出长整型数据
%md m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出
%c 用来输出一个字符
%s 用来输出字符
%u 输出无符号整型(unsigned)
%f 输出实数,包括单精度和双精度,以小数形式输出
%x 以十六进制形式输出整数

                                                            常用转义字符表

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

printf函数支持

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

半主机模式简介

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

方法一:微库法

stm32 printf,stm32,linux,算法

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

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寄存器
 文章来源地址https://www.toymoban.com/news/detail-727526.html

到了这里,关于STM32使用printf函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32使用printf函数的步骤和注意事项

    1,在KEIL中勾选 Use MicroLIB . 即使用微库. 2, 在代码中添加 如下代码 (目的是为了调用stdio库中的print 函数) 3,在uart.c 填加如下代码 (目的是为了重定向 stdio库中的print 函数 ) 1, 在代码中添加 如下代码 (目的是为了调用stdio库中的print 函数) 2, 关闭半主机模式,并重定向printf 想要明白

    2023年04月08日
    浏览(54)
  • stm32---在keil 5中使用printf函数输出到串口USART(printf函数的移植方法)以及补充窗口printf函数输出汉字

    在串口函数初始化的c文件中加上#include stdio.h 重写fputc函数 (fputc是printf函数的底层,printf就是不断调用fputc函数一个个打印,把fputc函数重定向到串口,这样子printf自然就输出到串口) 在主函数main.c编写如下代码后直接运行. 引入#include stdarg.h  对sprintf进行可变参数的函数封装 在主

    2024年02月05日
    浏览(45)
  • 【13】STM32·HAL库-正点原子SYSTEM文件夹 | SysTick工作原理、寄存器介绍 | printf函数使用、重定向

      下面函数都是以sys_开头,定义在sys.c中。正点原子函数现阶段命名规则如果是在led.c中,则以led_开头。在F7/H7系列中会存在Cache配置函数,I-Cache中存储指令,D-Cache中存储数据。   SysTick,即系统滴答定时器,包含在M3/4/7内核里面,核心是一个24位的递减计数器( 最大计

    2024年02月15日
    浏览(42)
  • STM32CubeIDE串口printf函数输出中文乱码(配置教程+解决方法)

    目录 前言 平台环境 软件:STM32CubeIDE 硬件:STM32H7A3ZIT6Q 一、串口配置 二、printf重定向 三、中文乱码解决方案 步骤 效果 四、总结 本文主要讲述在使用CubeIDE配置串口通信的过程中,如何 重定向printf() 函数,以及如何解决在 串口打印中文时输出乱码 的情况。         

    2024年02月07日
    浏览(55)
  • STM32-HAL库-printf函数重定向(简单易懂亲测有效)

    由于STM32cubemx生成的HAL库代码没有printf,为了让这个函数能实现打印功能,我们必须要把这个函数重定向,让它重定向到串口中,把要输出的内容打印到串口中。 配置好时钟后,选择你的串口,生成代码。 进入到STM32xxxhal.c中,加入如下两条语句,你的huart是数字几,后面就修

    2024年02月05日
    浏览(44)
  • stm32的printf使用

     参考代码:Embedded/stm32/STM32_printf · guorong/study - 码云 - 开源中国 (gitee.com)         在刚开始学习C语言的时候,都使用过printf函数,支持的格式比较齐全,相打印什么样的信息都比较好实现。在使用STM32的过程中,也可以使用printf函数,printf函数是C语言stdio的库里定义好的

    2024年02月21日
    浏览(27)
  • stm32之12.如何使用printf打印输出

      主函数增加这些代码即可实现printf打印输出  需要添加头文件 #include \\\"stdio.h\\\" --------------- 源码 struct __FILE { int handle; /* Add whatever you need here */ }; FILE __stdout; FILE __stdin; int fputc(int c, FILE *f)  {     /* 发送一个字节 */     USART_SendData(USART1,c);     /* 等待发送完毕 */     while(

    2024年02月11日
    浏览(45)
  • STM32使用串口printf乱码问题解决方法

    使用stm32系列单片机串口打印问题,在使用HAL库重新定义printf为串口输出后,输出的内容全都是乱码,试了网上的方法后还是乱码。  像这样的    最后发现是串口调试助手和keil的文字编码方式不同, keil中是GB 2312,串口调试助手是UFT_8,所以打印出来才会乱码  将串口调试助

    2024年02月11日
    浏览(35)
  • 使用clion配合STM32CubeMX开发stm32(包含断点调试,查看寄存器值,printf重定向)

    在嵌入式领域中开发以ARM公司的Cortex M内核为代表的单片机时程序员使用最多的IDE一定是Keil公司的MDK4 MDK5,而Keil已经脱离现代智能IDE,近年来IAR逐步向现代智能IDE靠近但还不足,一些芯片原厂提供了基于eclipse改装版IDE,这些工具在调试方面有优势,比如查看外设寄存器,内

    2024年04月24日
    浏览(47)
  • 普中STM32-PZ6806L开发板(HAL库函数实现-USART1 printf+scanf/gets)

    实现printf+scanf/gets通过USART1 的发送接收。 主芯片串口引脚图 我的板子板子自带串口坏掉了, 所以使用USB转TTL线, 连接如下 电路原理图 实物图 scanf是以空白符(空格、制表符、换行等等)为结束标志的,当遇到空白符是就会结束一次输入,如果你需要读取空格的话可以使用gets或者

    2024年02月04日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包