最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其将打印的信息重定向至串口1。但是当在程序中调用printf()时,却发现上位机无论如何都接收不到信息,而且printf()之后的语句也不再执行,想必程序在printf()函数里面死掉了吧。当时觉得很纳闷,...
大致介绍 在使用usart2时,使用中断传输进行printf会出现异常。使用阻塞传输无问题。在usart1中无问题。在GD32F407中无问题。直接使用中断传输无问题。 使用代码 正常配置串口,勾选microlib库,重写fputc int fputc(int ch, FILE *f) { whil
要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其将打印的信息重定向至串口1。
在STM32中将printf的输出重定向到串口,是一个常见的需求,特别是在调试和开发过程中。这可以通过以下几个步骤来实现: 1. 理解STM32的串口通信原理 STM32的串口(UART)通信是一种异步串行通信方式,它使用两条线(TX和RX)进行数据传输。TX线用于发送数据,RX线用于接收数据。在STM32中,可以通过配置相应的寄存器来实现...
其次,定义打印函数(以串口2为例): /** * @brief 自定义UART2串口打印 * @param *fmt,... 要打印的数据内容,用法类似printf * @retval void */ extern UART_HandleTypeDef huart2; void My_printf(char* fmt,...) { static __align(8) uint8_t USART2_buffer[128]; ...
1.重定向需求 我们在使用其他单片机的时候喜欢使用printf函数来输出代码运行日志,或者检查bug;但是stm32不支持printf函数直接使用,所以我们需要重定向串口,使用串口助手来查看printf输出的内容。 2.代码 话不多说上代码,我已经封装好了,大家直接粘贴进自己的工程即可。
1)16进制转ASCII码 2)ASCII码转换16进制 5、STM32串口1只能发不能收 一、概述 printf()函数非常好用,但是重定义后只适用于单个串口,需要串口2使用printf(),需要重新定向。有关内容移步STM32关于printf重定向到串口。先贴一下双串口的配置和printf()的书写,mark一下。
简介:STM32使用printf重定向到USART(串口)并打印数据到串口助手 一.背景知识 我们知道我们在进行编程的时候,遇到问题,经常通过打印信息进行调试,在java中使用的是System.out.println打印到输出窗口。在C语言中使用的是printf打印到输出窗口。而我们用keil进行编程的时候也是使用的C语言所以也可以使用printf,但是我们知道,...
2.在MDK中使用MicroLib重定向printf 勾选Use MicroLib MicroLib是对标准C库进行了高度优化之后的库,供MDK默认使用,相比之下,MicroLIB的代码更少,资源占用更少: 重定义fputc到串口 重新实现fputc函数,编写代码将这个字符通过串口发送,因为发送每个字符时都会调用该函数,所以为了效率,不再调用库函数 HAL_UART_Transmit 发...