【转】stm32CubeMx上移植自己的printf()和scanf()函数

要想printf()和scanf() 函数工作,我们需要把printf()和scanf() 重新定向到串口中。重定向是指用户可以自己重写C 的库函数,当连接器检查到用户编写了与C 库函数相同名字的函数时,优先采用用户编写的函数,这样用户就可以实现对库的修改了。为了实现重定向printf()和scanf() 函数,我们需要分别重写fputc()和fgetc() 这两个C 标准库函数。

一、移植printf()函数,重定向C库函数printf到USART1

int fputc(int ch, FILE *f)

{

HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1, 0xFFFF);

return ch;

}

注释:

调用了函数 HAL_UART_Transmit()

/**

* @brief  Sends an amount of data in blocking mode.

* @param  huart: Pointer to a UART_HandleTypeDefstructure that contains

*                the configuration information for thespecified UART module.

* @param  pData: Pointer to data buffer

* @param  Size: Amount of data to be sent

* @param  Timeout: Timeout duration

* @retval HAL status

*/

HAL_StatusTypeDef    HAL_UART_Transmit(UART_HandleTypeDef *huart,uint8_t *pData, uint16_t Size, uint32_t Timeout)

二、移植scanf()函数,重定向C库函数scanf到USART1

int fgetc(FILE *f)

{

uint8_t  ch;

HAL_UART_Receive(&huart1,(uint8_t *)&ch, 1, 0xFFFF);

return  ch;

}

注释:

调用了函数 HAL_UART_Receive()

/**

* @brief  Receives an amount of data in blocking mode.

* @param  huart: Pointer to a UART_HandleTypeDefstructure that contains

*                the configuration informationfor the specified UART module.

* @param  pData: Pointer to data buffer

* @param  Size: Amount of data to be received

* @param  Timeout: Timeout duration

* @retval HAL status

*/

HAL_StatusTypeDef   HAL_UART_Receive(UART_HandleTypeDef *huart,uint8_t *pData, uint16_t Size, uint32_t Timeout)

提示:printf和scanf都是用轮询方式,没有使用中断。调用scanf在串口助手中输入数据时,必须以空格结束,然后点击发送,否则无法完成发送。

来源

原文地址:https://www.cnblogs.com/skullboyer/p/8341040.html

时间: 2024-11-14 08:24:23

【转】stm32CubeMx上移植自己的printf()和scanf()函数的相关文章

黑 马 程 序 员_视频学习总结<c语言>----02 printf和scanf函数、基本语句和运算、流程控制、函数、数组、字符串

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.printf函数 1.在使用peintf函数前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据,其中使用格式是 printf(“字符串”) :或者 printf(“字符串”, 格式符参数): 2.常用的格式符及其含义如图所示 3.格式符还可以添加输出宽度 二.scanf函数 1.在使用scanf函

C语言-数据类型、常量、变量、变量作用域、printf、scanf函数

4.数据类型介绍 数据:文本数据.音频.视频.图像.数字 C语言中有5大数据类型:基本类型.构造类型.空类型.指针类型.自定义类型 基本数据类型: 整型    长整型long int    整型int(4)    端整型short int 实型    单精度float(4)    双精度 double(8) 字符型   char(1) 内存: 1> 内存分配:4G存储大小:4*1024*1024*1024Byte; 内存的基本单元为一个字节(就是8bit) 2> 内存区域:栈 (存放局部变量)

printf和scanf函数

一.printf函数 这是在stdio.h中声明的一个函数,因此使用前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据 1.用法 (1)1> printf(字符串) printf("Hello, World!"); 输出结果是: (2)printf(字符串, 格式符参数) // 使用常量作参数 printf("My age is %d\n", 26); // 也可以使用变量 int age = 17; pr

C语言创建符号常量的三种方法;printf()和scanf()函数

1.#indefine pi 3.1415926形式的宏定义 2.const int MONTHS=12:这使得MONTHS成为一个只读值. 3.enum 枚举类型 4.printf()和scanf()函数使我们能够与程序通信,他们被称为输入/输出函数,(I/O函数) 5.字符串.浮点数输出的类型及介绍:实例程序: #include<stdio.h> #define BLURB "Authentic imitation!"//宏定义方式 int main(void) { c

arm上移植mplayer

关于mplayer移植网上资料很多,但都很混乱.在此,我做了一个关于mplayer 的详细总结.在做之前最好在解压源码包后,先通过./configure --help看一下相关配置. X86的LINUX上已经自带了解码库,不需要另外安装解码库,而arm平台自己做的文件系统没有解码库,需要另外安装解码库. 下载MPlayer:MPlayer-1.0rc2.tar.bz2        解码库:libmad-0.15.0b.tar.gz 一.在x86的LINUX上安装mplayer 1 #./con

zedboard上移植OPENCV库

zedboard上移植OPENCV库 之前做了很多移植OPENCV库的工作,但是需要包含的各种库,需要交叉编译,X264 ,JPGE ,FFMPGE等等 注意:在<嵌入式系统软硬件协同设计实战指南>中13章中,说了需要关闭各种设置开关,根本原因是我们没有相应的库支持,所以我们如果需要在opencv中使用相应的库,那么就必须提前将各种库交叉编译好,放入交叉编译器的目录,我的交叉编译器安装目录/root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx

在android上移植ios

Android与IOS是最受人们欢迎的两大移动平台,Android与IOS之争是一个永久的话题.接下来笔者就结合自己的知识和网上的一些文章,谈谈这两个系统的不同以及关于移植的话题,希望也是大家比较关心的话题. 一.关于Android与IOS的不同 应该会有很多机友都有类似疑问,感觉大多数安卓手机在流畅度上不如iPhone手机.先不说一些配置低的安卓机,即便是最新版安卓系统的旗舰手机,有时会感觉达不到iPhone手机的那种流畅度,因此有人以此判断安卓手机不好.其实,这都是二者系统机制不同导致的差异

腾讯物联网操作系统TencentOS tiny线上移植大赛,王者机器人、QQ公仔、定制开发板等礼品等

一.产品介绍 TencentOS tiny是腾讯面向物联网领域开发的实时操作系统,具有低功耗,低资源占用,模块化,安全可靠等特点,可有效提升物联网终端产品开发效率.TencentOS tiny 提供精简的 RTOS 内核,内核组件可裁剪可配置,可快速移植到多种主流 MCU (如STM32全系列)及模组芯片上.而且,基于RTOS内核提供了丰富的物联网组件,内部集成主流物联网协议栈(如 CoAP/MQTT/TLS/DTLS/LoRaWAN/NB-IoT 等),可助力物联网终端设备及业务快速接入腾讯云

黑马程序员----printf函数和scanf函数

一.printf函数和scanf函数,都被定义在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>. 二.printf函数 1.定义:printf()函数是格式化输出函数, 一般用于向终端按规定格式输出信息; 2.格式:printf("XXXXXXXX"); 三.scanf函数 1.定义:scanf()函数按用户指定的格式从键盘上把数据输入到指定的变量之中; 2.格式:scanf("%d", &numbe