STM32中如何使用printf()函数
STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK)
在STM32串口通信程序中使用printf发送数据,非常的方便。可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了。
下面就说一下使用printf需要做哪些配置。
有两种配置方法:
一、对工程属性进行配置,详细步骤如下
1、首先要在你的main 文件中 包含“stdio.h” (标准输入输出头文件)。
2、在main文件中重定义函数如下:
// 发送数据
1 int fputc(int ch, FILE *f)
2 {
3 USART_SendData(USART1, (unsigned char) ch); // USART1 可以换成 USART2 等
4 while (!(USART1->SR & USART_FLAG_TXE));
5 return (ch);
6 }
// 接收数据
1 int GetKey (void)
2 {
3 while (!(USART1->SR & USART_FLAG_RXNE));
4 return ((int)(USART1->DR & 0x1FF));
5 }
这样在使用printf时就会调用自定义的fputc函数,来发送字符。
3、在工程属性的 “Target" -> "Code Generation" 选项中勾选 "Use MicroLIB"”
MicroLIB 是缺省C的备份库,关于它可以到网上查找详细资料。
至此完成配置,在工程中可以随意使用printf向串口发送数据了。
二、第二种方法是在工程中添加“Regtarge.c”文件
1、在main文件中包含 “stdio.h” 文件
2、在工程中创建一个文件保存为 Regtarge.c ,然后将其添加工程中
在文件中输入如下内容(直接复制即可)
1 #include "stdio.h"
2
3 #pragma import(__use_no_semihosting_swi)
4 extern int SendChar(int ch); // 声明外部函数,在main文件中定义
5 extern int GetKey(void);
6
7 struct __FILE
8 {
9 int handle; // Add whatever you need here
10 };
11
12 FILE __stdout;
13 FILE __stdin;
14
15 int fputc(int ch, FILE *f)
16 {
17 return (SendChar(ch));
18 }
19
20 int fgetc(FILE *f)
21 {
22 return (SendChar(GetKey()));
23 }
24
25 void _ttywrch(int ch)
26 {
27 SendChar (ch);
28 }
29
30 int ferror(FILE *f)
31 {
32 // Your implementation of ferror
33 return EOF;
34 }
35
36 void _sys_exit(int return_code)
37 {
38 label: goto label; // endless loop
39 }
注释:
fputc和 fgetc是c语言的标准函数(形参是标准的) FILE *f 是文件指针,具备文件系统的操作系统有用。对于简单的无文件系统的嵌入式系统无用。
3、在main文件中添加定义以下两个函数
1 int SendChar (int ch)
2 {
3 while (!(USART1->SR & USART_FLAG_TXE)); // USART1 可换成你程序中通信的串口
4 USART1->DR = (ch & 0x1FF);
5 return (ch);
6 }
7
8 int GetKey (void)
9 {
10 while (!(USART1->SR & USART_FLAG_RXNE));
11 return ((int)(USART1->DR & 0x1FF));
12 }
至此完成配置,可以在main文件中随意使用 printf 。
STM32中如何使用printf()函数的更多相关文章
- STM32中如何对printf函数重定向
通过USART1向计算机的串口调试助手打印数据,或者接收计算机串口调试助手的数据,接下来我们现STM32工程上的printf()函数,方便用于程序开发中调试信息的打印. 方法一:使用MicroLIB库 ...
- php中sprintf与printf函数用法区别
下面是一个示例:四舍五入保留小数点后两位 代码如下 复制代码 <?php$num1 = 21;echo sprintf("%0.2f",$num1)."<b ...
- STM32 KEIL 下的 printf 函数
1 //加入以下代码,支持printf函数,而不需要选择use MicroLIB 2 #if 1 3 #pragma import(__use_no_semihosting) 4 //标准库需要的支持 ...
- stm32中如何进行printf重定向用于串口调试输出
1 在main中包含stdio.h 文件 2 Target选项框里选Use MicroLib 选项 3 在main中添加UART1_Configuration()初始化的代码 Uart1初始化,voi ...
- 如果简化stm32中printf函数的使用——首先重定向
STM32单片机极简方法 使用宏定义 代替复杂的重定向printf()函数,实现串口打印.(HAL库例程)https://blog.csdn.net/wu10188/article/details/9 ...
- 关于STM32中printf函数的重定向问题
printf函数一般是打印到终端的,stm32芯片调试中经常需要用到串口来打印调试信息,那能不能用串口实现类似windows的Console中的printf呢? 答案是肯定的,那就是printf函数的 ...
- STM32 printf()函数和scanf()函数重定向到串口
STM32 printf()函数和scanf()函数重定向到串口 printf()函数和scanf()函数重定向 在学习STM32的时候,常常需要用串口来测试代码的正确与否,这时候就要要用到print ...
- 单片机中printf函数的重映射
单片机中printf函数的重映射 一.源自于:大侠有话说 1.如果你在学习单片机之前学过C语言,那么一定知道printf这个函数.它最最好用的功能 除了打印你想要的字符到屏幕上外,还能把数字进行格式化 ...
- STM32 中的 assert_param 函数
在学STM32的时候函数assert_param出现的几率非常大,上网搜索一下,网上一般解释断言机制,做为程序开发调试阶段时使用. 断言机制函数assert_param我们在分析库函数的时候,几乎每一 ...
- C 中 关于printf 函数中度剖析
题外话 这篇博文主要围绕printf函数分析的,主要讲解printf 使用C的可变参数机制, printf是否可重入(是否线程安全), printf函数的源码实现. 正文 1.C中可变参数机制 我们 ...
随机推荐
- .NET周刊【12月第1期 2024-12-01】
我在.NET Conf China 2024 等你! .NET Conf China 2024 是一场面向开发人员的社区盛会,旨在庆祝 .NET 9 的发布,并回顾过去一年 .NET 在中国的发展成就 ...
- Java 动态设置 JVM 参数的方法
Java虚拟机(JVM)在运行Java应用时,其性能调优和资源管理至关重要.虽然许多JVM参数在启动时通过命令行设置,但在应用运行期间动态调整某些参数也是可行的.通过动态设置JVM参数,开发者可以更有 ...
- Flutter 收起键盘
Flutter收起键盘 在根Widget中嵌套GestureDetector return GestureDetector( // 触摸收起键盘 behavior: HitTestBehavior.t ...
- LeetCode题集-9 - 回文数
题目:给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . 回文数 是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 例如,121 是回文,而 123 不 ...
- csrf跨站请求伪造与校验策略
目录 一.csrf跨站请求伪造 概念引入 概念讲解 二.csrf校验策略 概念讲解 form表单操作csrf策略 ajax请求csrf策略 三.csrf相关装饰器 一.csrf跨站请求伪造 概念引入 ...
- java-信息安全(二十)国密算法 SM1,SM2,SM3,SM4
一.概述 国密即国家密码局认定的国产密码算法.主要有SM1,SM2,SM3,SM4.密钥长度和分组长度均为128位.目前主要使用公开的SM2.SM3.SM4三类算法,分别是非对称算法.哈希算法和对称算 ...
- CentOS7 安装git 配置秘钥公钥克隆代码
建议购买阿里云香港服务器可以免备案,系统镜像选择CentOS7测试 第一步:安装git客户端,默认安装在/usr/libexec/git-core目录 yum -y install git #查看版本 ...
- Qt/C++音视频开发66-音频变速不变调/重采样/提高音量/变速变调/倍速播放/sonic库使用
一.前言 之前在做倍速这个功能的时候,发现快速播放会有滴滴滴的破音出现,正常1倍速没有这个问题,尽管这个破音间隔很短,要放大音量才能听到,但是总归是不完美的,后面发现,通过修改qaudiooutput ...
- Qt编写的项目作品21-网络请求客户端/服务器
一.实现原理 http请求就是tcp通信,所以第一步实例化QTcpServer类监听端口,并绑定newConnection信号槽. 一旦有新的连接,交给专门的解包类处理,将对应的数据解包,http请求 ...
- java中基于swing库自定义分页组件
一个swing的分页组件,代码见附件. //用法如下: Class Test{ JTable table ; StatusBar statusBar ; Test(){ ...