STM32 printf函数重映射

合集下载

单片机中printf函数的重映射

单片机中printf函数的重映射

单片机中printf函数的重映射

一、源自于:大侠有话说1.如果你在学习单片机之前学过C 语言,那么一定知道printf 这个函数.它最最好用的功能

除了打印你想要的字符到屏幕上外,还能把数字进行格式化.例如十进制的33, 用十进制

方式输出就是33,用十六进制的形式就输出成21,如果用字符形式输出,那就是ASCII 码

表对应的!.

2. 51 年代,一些人软件仿真的时候也很喜欢使用printf,但实际代码运行中,用的人则不多,因

为别说51 年代,就是用AVR 的,也会觉得printf 这个函数耗费的CPU 资源相当可观.所以

printf 在8 位单片机时代,熟悉的人的确不多.但到了ARM 时代,情况则大为不同.毕竟

ARM 的处理能力和51 完全不是一个级别,这使得不少人开始喜欢使用printf 在实际项目

中作为调试过程的串口输出.因为它的格式化功能实在是相当方便.

而本例程就是教会你这么使用printf.

3.程序把printf 的输出对象设定为串口1.有一个标准的函数是必须要自己定义的,那就是

fputc,把这个函数的功能写成串口输出一个字符.建议在串口的初始化模块中定义

int fputc(int ch)

stm32printf调试方法

stm32printf调试方法

stm32printf调试方法

1.引言

在嵌入式开发中,调试是非常重要的环节。而pr in tf函数是一种常

用的调试手段,它可以将变量的值输出到终端或串口,方便开发者观察程

序运行时的各种参数。本文将介绍如何在S TM32开发中使用p ri nt f函

数进行调试,以及一些常见问题的解决方法。

2.使用pri ntf函数进行调试

2.1.基本原理

在S TM32的硬件开发中,我们可以通过串口与P C进行通信,将串口

的输出信息传输到终端上。而pr in tf函数则是将数据以字符串的形式输

出到串口。为了使用pr in tf函数进行调试,我们需要进行以下几个步骤:

1.配置串口

2.重定向标准输出流

3.使用pr in tf函数进行调试输出

2.2.配置串口

要使用p ri nt f函数进行调试输出,首先需要配置MC U的串口。这里

以S TM32F4为例,具体步骤如下:

1.在C ub eM X中选择正确的串口外设,并进行相应的引脚配置。

2.在C ub eM X的配置面板中,设置波特率、数据位、停止位和校验位

等参数,按需修改其他配置项。

3.生成代码并下载到开发板。

2.3.重定向标准输出流

为了让p ri nt f函数的输出能够重定向到串口,我们需要在代码中添加一些重定向的函数。这些函数会将标准输出流指向串口,以实现打印信息的重定向。具体步骤如下:

1.打开工程中的sy sc a ll s.c文件,该文件位于HA L库的源代码目录中。

2.为了重定向标准输出流,需要实现`_w ri te`函数。在函数中,将需要输出的字符一个一个地发送到串口。

stm32重映射USART2方法及函数

stm32重映射USART2方法及函数

stm32重映射USART2⽅法及函数

stm32f107重映射USART2USART2默认的TX/RX在PA.2/3PA.2/3⽤于其它⽤途,需要把USART2的TX/RX重映射到PD.5/6库函数的调⽤(1)使能被重新映射到的I/O端⼝时钟??

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);(2)使能被重新映射的外设时钟??RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);(3)使能AFIO功能的时钟(勿忘!)??RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);(4)进⾏重映射GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);

参考stm32f10x_uart_ST3.5.0.rar中的voidUSART2_Remap_Config(void);

voidUSART2_Remap_Config(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

USART_InitTypeDefUSART_InitStructure;

/configUSART1clock/

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);

/EnableRemapclock/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

STM32开发printf和scanf函数的重定向——修改HAL标准库用printf函数发。。。

STM32开发printf和scanf函数的重定向——修改HAL标准库用printf函数发。。。

STM32开发printf和scanf函数的重定向——修改HAL标准库⽤

printf函数发。。。

⾸先在main.c⽂件中添加标准输⼊输出库

#include <stdio.h>

然后在stm32cubemx⽣成的⽂件中,找到usart.c⽂件,在后⾯添加如下代码

#include "stdio.h"

#include "stm32f1xx_hal.h"

//这个变量是其他.c⽂件定义的

extern UART_HandleTypeDef huart1;

uint8_t ch;

uint8_t ch_r;

//重写这个函数,重定向printf函数到串⼝,意思就是说printf直接输出到串⼝,其默认输出到控制台的

/*fputc*/

int fputc(int c, FILE * f)

{

ch=c;

HAL_UART_Transmit(&huart1,&ch,1,1000);//发送串⼝

return c;

}

//重定向scanf函数到串⼝意思就是说接受串⼝发过来的数据,其默认是接受控制台的数据

/*fgetc*/

int fgetc(FILE * F)

{

HAL_UART_Receive (&huart1,&ch_r,1,0xffff);//接收

return ch_r;

}

stm32重定向printf的原理

stm32重定向printf的原理

stm32重定向printf的原理

在嵌入式系统中,调试是一个非常重要的环节。而在调试过程中,printf函数是最常用的调试手段之一。在STM32中,printf函数默认是向串口发送数据,但是有时候我们需要将printf函数的输出重定向到其他设备或者接口上。本文将以STM32为例,介绍如何实现printf函数的重定向。

一、printf函数的实现原理

printf函数是C语言标准库中的一个输出函数,其原型为:int printf(const char *format, ...);。printf函数的作用是将格式化的字符串输出到标准输出设备上。在STM32中,默认情况下,printf 函数的输出设备是串口。其实现原理如下:

1.调用stm32fxxx_hal_uart.c中的HAL_UART_Transmit函数,将格式化的字符串发送到串口中。

2.在stm32fxxx_hal_uart.c中,HAL_UART_Transmit函数通过USARTx_SR寄存器判断发送是否完成,如果未完成,则等待发送完成。

3.发送完成后,HAL_UART_Transmit函数返回。

二、printf函数的重定向

在某些情况下,我们需要将printf函数的输出重定向到其他设备或接口上,例如:SD卡、LCD屏幕、WiFi模块等。这时候,我们需要自定义一个输出函数,并将其与printf函数关联起来,实现printf函数的重定向。下面,我们将以重定向printf函数输出到LCD 屏幕为例,介绍如何实现printf函数的重定向。

记录stm32f407使用hal库,串口2重定向到printf的一些问题(已解决)

记录stm32f407使用hal库,串口2重定向到printf的一些问题(已解决)

记录stm32f407使⽤hal库,串⼝2重定向到printf的⼀些问题(已

解决)

⼤致介绍

在使⽤usart2时,使⽤中断传输进⾏printf会出现异常。使⽤阻塞传输⽆问题。在usart1中⽆问题。在GD32F407中⽆问题。直接使⽤中断传输⽆问题。

使⽤代码

正常配置串⼝,勾选microlib库,重写fputc

int fputc(int ch, FILE *f)

{

while(HAL_UART_Transmit_IT(&huart2, (unsigned char *)&ch, 1)!=HAL_OK){};

return ch;

}

结果

只配置usart2时,使⽤printf打印,只能接收到0x0C;

同时配置了usart1时,使⽤printf打印,只能接收到0x14;

同时配置usart3时,使⽤printf打印,只能接收到0x16;

同时配置usart6时,使⽤printf打印,只能接收到0x1e;

原因所在

在查询串⼝相关的讯息时,考虑到不使⽤microlib库打印会如何。加⼊标准库⽀持后,打印正常。

#pragma import(__use_no_semihosting)

//标准库需要的⽀持函数

struct __FILE

{

int handle;

};

FILE __stdout;

/**

* @brief 定义_sys_exit()以避免使⽤半主机模式

* @param void

* @return void

*/

void _sys_exit(int x)

{

x = x;

}

同时发现,使⽤微库时,优化等级也会造成影响。

stm32串口实现printf重定向及错误解决办法

stm32串口实现printf重定向及错误解决办法

增加Retarget.c,实现printf重定向你可以把 Retarget.c 添加到你的工程里, 就可以了。D:\Program Files\Keil\ARM\Startup\然后只重载extern int sendchar(int ch); /* in Serial.c */extern int getkey(void); /* in Serial.c */int sendchar(int ch){/* Place your implementation of fputc here *//* e.g. write a character to the USART */rs485_w()USART_SendData(USART3, (unsigned char) ch);/* Loop until the end of transmission */while (USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);rs485_r();return ch;}方法二:#include "stdio.h"#ifdef __GNUC__/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printfset to 'Yes') calls __io_putchar() */#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endif /* __GNUC__ */PUTCHAR_PROTOTYPE{/* Place your implementation of fputc here *//* e.g. write a character to the USART */rs485_w() //重要USART_SendData(USART3, (unsigned char) ch);/* Loop until the end of transmission */while (USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);rs485_r();//重要return ch;}//printf()//之类的函数,使用了半主机模式。使用标准库会导致程序无法运行,以下是解决方法:#pragma import(__use_no_semihosting) _sys_exit(int x) { x = x; } /*.\OUTPUT\STM32_4PMaser.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced*/_ttywrch(int ch) //可以消除这个错误{ch=ch;}struct __FILE { int handle; /* Whatever you require here. If the only file you are using is */ /* standard output using printf() for debugging, no file handling */ /* is required. */ }; /* FILE is typedef’ d in stdio.h. */ FILE __stdout;//串口1 GPIO_Pin_11,A//串口2 GPIO_Pin_4,A //串口3 GPIO_Pin_12,GPIOB

STM32中printf函数的使用。

STM32中printf函数的使用。

STM32中printf函数的使用。

STM32串口通信中使用printf发送数据配置方法(开发环境Keil RVMDK)

标签: STM32 串口通信 printf方法 2011-06-29 23:29

在STM32串口通信程序中使用printf发送数据,非常的方便。可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了。

下面就说一下使用printf需要做哪些配置。

有两种配置方法:

一、对工程属性进行配置,详细步骤如下

1、首先要在你的main 文件中包含“stdio.h” (标准输入输出头文件)。

2、在main文件中重定义<fputc>函数如下:

// 发送数据

int fputc(int ch, FILE *f)

{

USART_SendData(USART1, (unsigned char) ch);// USART1 可以换成 USART2 等

while (!(USART1->SR & USART_FLAG_TXE));

return (ch);

}

// 接收数据

int GetKey (void) {

while (!(USART1->SR & USART_FLAG_RXNE));

return ((int)(USART1->DR & 0x1FF));

}

这样在使用printf时就会调用自定义的fputc函数,来发送字符。

3、在工程属性的“Target" -> "Code Generation" 选项中勾选"Use MicroLIB"”

STM32单片机编程printf()函数重定向

STM32单片机编程printf()函数重定向

STM32单片机编程printf()函数重定向

在stm32 单片机编程中,可以重定向printf()函数来输出调试信息。编写fputc()函数其实printf()函数在头文件中被定义成了一个宏,会调用到

fputc()函数,但在stm32 单片机编程中不可以直接调用标准库的fputc()函

数进行输出信息,需要自己编写fputc()函数供printf()函数来调用。编译

器进行编译时首先会调用自己编写的fputc()函数,而不是库函数。

intfputc(int ch,FILE*f)

{

USART_SendData(USART1, (uint16_t)ch); //通过串口输出

while(USART_GetFlagStatus(USART1, USART_FLAG_TC) !=SET);//等待输出完毕

return ch;

}

此时假定串口1 即USART1 可以正常通讯,fputc()函数的作用就是把

printf()函数重定向到串口1 上输出信息。

配置自己动手写好fputc()后,要在文件中包含stdio.h 文件。#include 在MDK 软件界面单击Target options 按钮,在Code Genetation 一栏中选择Use MicroLIB 选项,即完成了配置,此时printf()函数一定重定向到了串口1 即USART1 上,可以正常使用printf()函数。tips:感谢大家的阅读,本文由我司

收集整编。仅供参阅!

STM32功能引脚端口复用和重映射

STM32功能引脚端口复用和重映射

STM32功能引脚端口复用和重映射

端口复用是指一个引脚可以同时用于不同的外设功能。每个引脚都有一个默认的功能,但根据需要,可以将其配置为其他功能。这样,同一个引脚可以在不同的时间用于不同的外设,从而实现更灵活的系统设计。

重映射是指将一个引脚的默认功能切换到另一个引脚。这样可以实现更多的功能引脚的分配和灵活性。

在STM32系列微控制器中,端口复用和重映射功能是通过复用矩阵和AFIO寄存器来实现的。

复用矩阵是一个硬件单元,用于控制引脚的端口复用。每个引脚可以配置为多达数个复用功能之一、通过配置相应的复用矩阵,可以选择所需的功能。

AFIO寄存器是配置引脚的重映射功能的控制寄存器。通过设置相应的寄存器位,可以将一些引脚的默认功能重映射到另一个引脚,同时也可以取消重映射,恢复到默认功能。

引脚端口复用和重映射的具体步骤如下:

首先,需要确定所需的引脚功能。查阅相关的参考手册或数据手册,可以了解到每个引脚的默认功能以及所有可能的复用功能。

然后,根据需要配置复用矩阵。复用矩阵通常是通过设置GPIO口模式寄存器来实现的。

配置复用矩阵时,需要注意以下几点:

1.每个引脚只能选择一种功能,不能同时选择多种功能。

2.不同的引脚可能有不同的复用功能选项,需要确保所选择的功能是合适的。

3.复用功能是互斥的,即其中一个引脚的复用功能被选中后,其他引脚将失去该功能选项。

最后,如果需要进行重映射,可以通过配置AFIO寄存器来实现。重映射功能通常是通过设置AFIO复用寄存器来完成的。

配置重映射时,需要注意以下几点:

1.不是所有的引脚都支持重映射功能,需要查阅相关的参考手册或数据手册来确定。

STM32的功能引脚重映射和复用功能

STM32的功能引脚重映射和复用功能

STM32的功能引脚重映射和复用功能

STM32中有很多内置外设的输入输出引脚都具有重映射(remap)的功能,本文对一些在使用引脚重映射时所遇到的有关问题加以说明。

我们知道每个内置外设都有若干个输入输出引脚,一般这些引脚的输出脚位都是固定不变的,为了让设计工程师可以更好地安排引脚的走向和功能,在STM32中引入了外设引脚重映射的概念,即一个外设的引脚除了具有默认的脚位外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的脚位。下面是STM32F103xC中有关USART3引脚的摘要片段;

从这里可以看出,USART3_TX的默认引出脚是PB10,USART3_RX的默认引出脚是PB11;但经过重映射后,可以变更USART3_TX的引出脚为PD8,变更USART3_RX的引出脚为PD9。

STM32中的很多内置外设都具有重映射的功能,比如USART、定时器、CAN、SPI、I2C等,详细请看STM32参考手册(RM0008)和STM32数据手册。

有些模块(内置外设)的重映射功能还可以有多种选择,下面是RM0008上有关USART3输入输出引脚的重映射功能表:

从这个表中可以看出,USART3的TX和RX引脚默认的引出脚位是PB10和PB11,根据配置位的设置,可以重映射到PC10和PC11,还可以重映射到PD8和PD9。

一个模块的功能引脚不管是从默认的脚位引出还是从重映射的脚位引出,都要通过GPIO端口模块实现,相应的GPIO端口必须配置为输入(对应模块的输入功能,如USART的RX)或复用输出(对应模块的输出功能,如USART的TX),对于输出引脚,可以按照需要配置为

stm32重定向printf的原理

stm32重定向printf的原理

stm32重定向printf的原理

在STM32的开发中,我们经常需要使用printf函数输出调试信息。但是,由于STM32没有像PC一样的标准输出设备,我们需要通过串口或LCD等外设来实现printf函数的输出。本文将介绍如何通过重定向printf函数来实现STM32的调试输出。

1. printf函数的实现原理

printf函数是C语言标准库中的一个输出函数,它可以将格式化的字符串输出到标准输出设备上。在PC机上,标准输出设备一般是控制台窗口,而在STM32上,则需要通过外设来实现。

在C语言中,printf函数的实现是由库函数提供的。库函数将printf函数中的字符串格式化成一定的格式,然后将格式化后的字符串输出到标准输出设备上。在PC机上,标准输出设备一般是stdout指向的文件流,而在STM32上,则需要将stdout指向相应的外设。

2. 重定向printf函数的实现原理

重定向printf函数的实现原理是将标准输出设备stdout指向外设。在STM32中,我们可以通过重定向printf函数来将stdout 指向串口或LCD等外设。

2.1 重定向到串口

将printf函数重定向到串口,可以将调试信息通过串口输出到PC机上的串口调试助手等工具中,方便调试。

在重定向printf函数到串口前,需要先初始化串口。以下是串

口初始化的代码:

```

UART_HandleTypeDef huart;

void MX_USART_Init(void)

{

huart.Instance = USART1;

huart.Init.BaudRate = 115200;

STM32程序添加printf函数后无法运行的解决方法

STM32程序添加printf函数后无法运行的解决方法

标准库函数‎的默认输出‎设备是显示‎器,要实现在串‎口或LCD‎输出,必须重定义‎标准库函数‎里调用的与‎输出设备相‎关的函数.

例如:print‎f输出到串‎口,需要将fp‎u tc里面‎的输出指向‎串口(重定向),方法如下:

#ifdef‎__GNU‎C__

/* With GCC/RAISO‎N ANCE‎, small‎print‎f (optio‎n LD

Linke‎r->Libra‎r ies->Small‎print‎f

set to 'Yes') calls‎__io_‎p utch‎a r() */

#defin‎e PUTCH‎A R_PR‎O TOTY‎P E int __io_‎p utch‎a r(int ch)

#else

#defin‎e PUTCH‎A R_PR‎O TOTY‎P E int fputc‎(int ch, FILE *f)

#endif‎/* __GNU‎C__ */

PUTCH‎A R_PR‎O TOTY‎P E

{

/* Place‎your imple‎m enta‎t ion of fputc‎here */

/* e.g. write‎a chara‎c ter to the USART‎*/

USART‎_Send‎D ata(USART‎1, (uint8‎_t) ch);

/* Loop until‎the end of trans‎m issi‎o n */

while‎(USART‎_GetF‎l agSt‎a tus(USART‎1, USART‎_FLAG‎_TC) == RESET‎);

stm32重映射功能原理

stm32重映射功能原理

stm32重映射功能原理

STM32系列微控制器是一款广泛应用于嵌入式系统开发的芯片,其具备多种强大的功能。其中,重映射功能是一项重要特性,它可以将

某些外设的引脚与特定的引脚功能进行映射,提供更大的灵活性和适

应性。本文将深入探讨STM32重映射功能的原理和应用。

1. 重映射功能的概述

在传统的微控制器设计中,每个外设都会占用特定的引脚。然而,当外设数量增加时,引脚资源可能会变得不足。为了解决这一问题,STM32系列微控制器提供了重映射功能。通过重映射,可以将某些特

定引脚的功能重新定义为其他外设所需的引脚功能,从而释放出更多

的引脚资源。

2. 重映射功能的实现原理

STM32微控制器通过内部寄存器来实现重映射功能。每个引脚都

有一个对应的重映射寄存器,用于设置该引脚的映射信息。寄存器中

的位字段代表了引脚的功能和映射方式。通过对这些寄存器位字段的

设置,可以将引脚的功能映射到特定外设。

3. 重映射功能的设置方法

在STM32的开发环境中,可以使用相关的开发工具和软件库来进行重映射功能的设置。通常,在初始化外设时,可以通过相应的函数

来配置重映射功能。具体而言,可以使用GPIO库中的函数来设置引脚的映射模式,或者使用AFIO库中的函数来设置引脚的功能映射。

4. 重映射功能的应用举例

4.1 UART重映射

在一些特殊的应用场景中,可能需要使用其他引脚作为UART 通信的引脚。通过重映射功能,可以将某些特定的引脚重新配置为UART通信所需的引脚功能,从而满足特定需求。

4.2 TIM重映射

定时器(Timer)是STM32系列微控制器中常用的外设之一。通过重映射功能,可以改变定时器的引脚映射,实现更复杂的时序控制和计数功能。这对于特定的应用,如PWM输出等,非常有用。

stm32重定向printf的原理

stm32重定向printf的原理

stm32重定向printf的原理

在STM32开发中,我们常常需要使用printf函数输出调试信息。但是,由于STM32没有像PC一样的标准输出设备(如显示器或串口),因此需要将printf函数重定向到一个输出设备上。本文将介绍如何在STM32中实现printf函数的重定向,并讨论其原理和实现方法。

一、printf函数的基本原理

printf函数是C语言中常用的输出函数,可以将格式化的数据输出到标准输出设备(如显示器或串口)。其原型为:

int printf(const char *format, ...);

其中format是格式化字符串,...表示可变参数。printf函数会将format字符串中的占位符替换成实际的参数,并输出到标准输出设备上。例如:

printf('Hello, %s!

', 'world');

输出结果为:

Hello, world!

在PC开发中,printf函数的标准输出设备通常是控制台窗口。但是,在嵌入式开发中,标准输出设备通常是串口或LCD屏幕等外设,因此需要将printf函数重定向到相应的输出设备上。

二、重定向printf函数的原理

在STM32中,如果要将printf函数重定向到串口或LCD屏幕等外设上,需要定义一个名为_putchar的函数,该函数将输出字符送

到外设上。然后,通过重定向stdout流的方式,将printf函数的输出重定向到_putchar函数上。

1. 定义_putchar函数

_putchar函数的原型如下:

int _putchar(char ch)

stm32中printf函数的用法和配置

stm32中printf函数的用法和配置

stm32中printf函数的用法和配置

在STM32中使用printf函数来进行串口打印输出是一种常见的调试

手段。printf函数是C语言标准库中的一个函数,用于格式化输出字符串。

要在STM32中使用printf函数,需要完成以下几个步骤:

1.配置串口:首先,需要在STM32的引脚配置中设置相应的引脚为串

口模式,并且初始化串口对应的寄存器。

2. 配置printf函数:接下来,需要在代码中重新定义printf函数,使其能够与串口进行通信。这可以通过重写标准库中的retarget.c文件

完成。

3.初始化串口:在主函数中,需要进行串口的初始化,包括波特率、

数据位、停止位等参数的配置。

4. 使用printf函数:配置完成后,可以直接在代码中使用printf

函数来进行串口打印输出。

具体的配置和用法如下所示:

1.配置串口:

首先,在STM32的引脚配置中,将相应的引脚设置为串口功能,并初

始化串口寄存器。

2. 配置printf函数:

需要重新定义printf函数,将输出的数据通过串口发送出去。可以

在标准库的retarget.c文件中,重写以下函数:

- int _write(int fd, char 某ptr, int len): 重写该函数,将ptr参数中的数据通过串口发送出去。

- int _read(int fd, char 某ptr, int len): 重写该函数,将串口接收到的数据存储到ptr参数中。

在以上两个函数中,可以使用串口的发送和接收函数来完成相应的操作。

3.初始化串口:

在主函数中,需要进行串口的初始化,包括波特率、数据位、停止位等参数的配置。可以使用CubeMX等工具来配置串口参数,并生成相应的初始化代码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32 printf 函数重映射

/* Private function prototypes -----------------------------------------------*/#ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker- >Libraries->Small printf set to Yes) calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endif /* __GNUC__ */

/** * @brief Retargets the C library printf function to the USART. * @param None * @retval None */PUTCHAR_PROTOTYPE{ /* Place your implementation of fputc here */ /* Loop until the end of transmission */ while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) {} /* write a character to the USART */ USART_SendData(EVAL_COM1, (uint8_t) ch);

return ch;}

某人的解释:

这段代码的意思是将C 语言的库函数printf 重定向,或重映射,这词有点太专业,简单的讲:就是C 语言的库中printf 函数会调用PUTCHAR_PROTOTYPE 这个硬

件接口函数,向显示器上输出char 型变量,用来显示,STM32 当然是没有显示器的,所以就用UART 输出Char 型变量到PC 机,由PC 机的超级终端来显示,说白了,就

是原来送到显示器上的显示数据,现在送到STM32 的串口上;如果调不过去,你要

注意两点:1.你的板子上用的是不是USART1,如果是,那连到PC 的串口,就可以

在超级终端上,看到打印出来的东西了,如果不是,请参考第2 点.2.先将你的板子

上的USART 初始化,然后把PUTCHAR_PROTOTYPE 函数体中的USART1 换

成你现在用的那个USART.于免费送一个注意点,当然以上也都免费,呵呵

1.STM32 的外设输出引脚可以重映射,如USART2,要注意板子上,是按原来的引

相关文档
最新文档