STM32 printf()函数和scanf()函数重定向到串口
STM32 printf()函数和scanf()函数重定向到串口
printf()函数和scanf()函数重定向
在学习STM32的时候,常常需要用串口来测试代码的正确与否,这时候就要要用到printf()函数或者scanf()函数,但是printf()这个函数是格式化输出到屏幕的,scanf()函数又是格式化输入(从屏幕),并不能输出到串口助手中,所以需要进行重定向。
在系统中有三个标准文件:标准输入,标准输出,标准错误。
printf : 强大的格式化转换(可以将任何类型转为字符串)。
scanf : 强大的格式化转换(可以将字符串类型转为任何类型)。
要重定向,首先要找到底层函数:
1.printf()函数的底层函数接口:在头文件<stdio.h>中第620行左右处,
找到这个函数后,就可以开始写函数了
int fputc(int c, FILE *stream)
{
USART1->DR = c;//将c赋给串口1的DR寄存器,即重定向到串口,也可以是其他的接口
while(!(USART1->SR & (1 << 7))){};//等待数据发送完成
return c;
}
- 1
- 2
- 3
- 4
- 5
- 6
2.scanf()函数的底层函数接口:在头文件<stdio.h>中第595行左右处,
重定向函数如下:
int fgetc(FILE *stream)
{
while(!(USART1->SR & (1 << 5))){};//等待数据接收完成
return USART1->DR;
}
- 1
- 2
- 3
- 4
- 5
写好这两个函数后就可以在其他。.c文件中使用printf()函数将数据打印到串口调试助手了,当然也可以使用scanf()函数从串口调试助手输入数据。和C语言中的使用如出一辙,一毛一样!
值得注意的是:1.在头文件<stdio.h>中已经有fgetc()和fputc()这两个函数,为什么又可以再写这两个函数呢?难道不会产生重定义的错误吗?其实头文件<stdio.h>是在微信C语言库中,简称微型库。学过C语言的就知道,C代码在运行的时候,会优先在当前的.c文件中查找这两个函数,没有的话就会从系统默认的路径下查找。
使用printf()和scanf()时要包含头文件<stdio.h>,微型库也要勾选上,如下图:
2.勾选上微型库再进行编译的时候,会发现多了几KB的代码,在工程完成的时候就没必要再勾选上,再者,printf()函数仅仅是方便调试,在工程完成的时候也应该去掉!
STM32 printf()函数和scanf()函数重定向到串口的更多相关文章
- C中gets()函数与scanf()函数说明
scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别.若想从键盘上输入字符串"hi hello",则应该使用 gets 函数. gets可以接收空格:而sc ...
- scanf函数和printf函数
C程序实现输出和输入的 主要是printf函数 和 scanf函数,这两个函数是格式输入输出 格式声明由%和格式字符组成 如%d,%f 格式字符: d格式符:用来输出一个有符号的十进制整数 c格式 ...
- C/C++编程笔记:C语言基础printf()和scanf()函数,大学入门知识
在解释这两个函数之前,为了方便大家更容易理解,我们先来讲讲下面的这幅图. 这个图中的例子其实很简单,我们就是把题目通过输入设备(例如键盘鼠标)传输到计算机中,然后让计算机进行运算得出结果,再然后把 ...
- C语言基础printf()和scanf()函数
在程序的运行中,我们经常会进行一些输入输出的操作,用来实现交互.为此, C语言便给出了 printf() 函数和 scanf() 函数用来实现输入和输出两个动作. 其中,printf()函数用于向控制 ...
- C语言scanf函数详细解释
原文链接 函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准 ...
- C语言scanf函数详解
函数名: scanf 功 能: 运行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设 ...
- scanf函数详解
函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键 ...
- C语言scanf函数详细解释(转载)
原文地址:https://blog.csdn.net/21aspnet/article/details/174326 scanf 函数名: scanf 功 能: 执行格式化输入 用 法: int sc ...
- scanf()函数释疑(word找的,没源地址了)
scanf()函数释疑(上) 一.序言 scanf()函数的控制串的使用 例1. #include "stdio.h" int main(void) { int a,b,c; sc ...
随机推荐
- Clumsy 利用无线网卡结合Clumsy软件模拟弱网络测试
利用无线网卡结合Clumsy软件模拟弱网络测试 by:授客 QQ:1033553122 实践环境 Clumsy 0.2 下载地址:http://jagt.github.io/clumsy/downlo ...
- const修饰指针的三种效果
当用const进行修饰时,根据const位置的不同有三种不同效果. 判断的标准是:const修饰谁,谁的内容就是不可变的. 1 const int *p = &a; const修饰*p, *p ...
- 使用windows命令和iconv.exe批量转换文件编码
iconv是知名的开源跨平台编码转换库,iconv.exe是iconv库在windows下的命令行工具,iconv.exe的一般用法:iconv.exe -f gbk -t utf-8 gbk.txt ...
- 11-OpenLDAP主从同步
OpenLDAP主从同步 阅读视图 部署环境 OpenLDAP服务器初始化 配置主服务器同步策略 配置从服务器 OpenLDAP主从同步验证 故障诊断 1. 部署环境 本文以两台服务器为蓝本演示其同步 ...
- 第五章 绘图基础(DEVCAPS1)
获取设备环境的信息 //DEVCAPS1.C--Device Capabilities Display Program No.1 (c) Charles Petzold, 1998 #include ...
- 使用虚拟环境virtualenv/Virtualenvwrapper隔离多个python
virtualenv 系统中的多个python混用会导致$PYTHONPATH混乱,或者各个工程对于package的版本要求不同等等情况.有一个简单的解决方案就是用virtualenv来隔离多个pyt ...
- Oracle SQL: DDL DML DCL TCL
Data Definition Language 自带commit,与表结构有关(数据字典)(会等待对象锁) Data Manipulation Language (数据文件相关变化有关,会产生锁)不 ...
- Ubuntu 17.10 环境初始化
输入法(中文) sogoupinyin fcitx-table-wubi 输入法快捷键 Ctrl + Space(两个间切换), Ctrl + Shift(多个间切换), Shift中英切换 与Win ...
- 18LaTeX学习系列之---LaTeX的参考文献
目录 目录 前言 (一)简单的参考文献 1.说明 2.源代码 3.输出效果 (二)以文件管理的方式 1.说明: 2.源代码: 3.输出效果 (三)直接从源网站获取 1.说明 2.操作 目录 本系列是有 ...
- VRS生成的虚拟观测值存在的问题
目前生成的虚拟观测值. 天津的版本,如果有数据库中有天线类型,那么会对天线类型改正了两次. 解决方法:在生成虚拟观测值编码的部分,注释掉天线改正的部分. 对结果的影响:错误版本生成的虚拟观测值,移动站 ...