STM32初始化串口重定向后printf调试信息不输出的问题

STM32初始化串口重定向后调试信息不输出的问题

@@ Author:明月清了个风

@@ Date: 2025/9/9

@@ PS:开发stm32F745的过程中发现printf有时候不打印信息,单独调试确定了串口初始化和重定向正确,但是在系统整体调试的时候虽然正确运行了却没有打印,通过使用本文所记录的方法暂时解决,但并不确定是否是最正确的解决方案,记录一下以供参考

内容结构如下:

  1. 问题现象及最终解决方法

一.问题现象及最终解决方法

现象如简介所述,确认初始化正确,重定向正确,资源分配正确,解决方法如下,在初始化时加入这行代码

setvbuf(stdout, NULL, _IONBF, 0);

表示无缓冲输出,但会增加系统调用的次数

下面贴出串口的初始化代码,应该没有错误

void hal_debug_usart_init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};RCC_PeriphCLKInitTypeDef RCC_PeriphClkInit;// debug串口3时钟源配置RCC_PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART3;RCC_PeriphClkInit.Usart1ClockSelection = RCC_USART3CLKSOURCE_SYSCLK;HAL_RCCEx_PeriphCLKConfig(&RCC_PeriphClkInit);// 使能串口3时钟DEBUG_USART_CLK_ENABLE();// 使能串口3引脚时钟---GPIOCDEBUG_USART_RX_GPIO_CLK_ENABLE();DEBUG_USART_TX_GPIO_CLK_ENABLE();// 串口3收发引脚配置GPIO_InitStruct.Pin = DEBUG_USART_TX_PIN | DEBUG_USART_RX_PIN;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF7_USART3;HAL_GPIO_Init(DEBUG_USART_PORT, &GPIO_InitStruct);// 配置串口3模式huart3.Instance = USART3;huart3.Init.BaudRate 	= 115200;huart3.Init.WordLength 	= UART_WORDLENGTH_8B;huart3.Init.StopBits 	= UART_STOPBITS_1;huart3.Init.Parity 		= UART_PARITY_NONE;huart3.Init.Mode 		= UART_MODE_TX_RX;huart3.Init.HwFlowCtl 	= UART_HWCONTROL_NONE;huart3.Init.OverSampling 	= UART_OVERSAMPLING_16;huart3.Init.OneBitSampling 	= UART_ONE_BIT_SAMPLE_DISABLE;huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;HAL_UART_Init(&huart3);HAL_NVIC_SetPriority(USART3_IRQn, 9, 0);HAL_NVIC_EnableIRQ(USART3_IRQn);
}void hal_debug_usart_dma_init(void)
{DEBUG_USART_DMA_CLK_ENABLE();/* DMA interrupt init *//* 串口3---DMA1-STREAM1接收 */HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 10, 0);HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);/* 串口3---DMA1-STREAM3发送 */HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 10, 0);HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn);hdma_usart3_rx.Instance			= 	DMA1_Stream1;hdma_usart3_rx.Init.Channel 	= 	DMA_CHANNEL_4;hdma_usart3_rx.Init.Direction 	= 	DMA_PERIPH_TO_MEMORY;hdma_usart3_rx.Init.PeriphInc 	= 	DMA_PINC_DISABLE;hdma_usart3_rx.Init.MemInc 		= 	DMA_MINC_ENABLE;hdma_usart3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;hdma_usart3_rx.Init.MemDataAlignment 	= DMA_MDATAALIGN_BYTE;hdma_usart3_rx.Init.Mode 		= 	DMA_NORMAL;hdma_usart3_rx.Init.Priority 	= 	DMA_PRIORITY_HIGH;hdma_usart3_rx.Init.FIFOMode 	= 	DMA_FIFOMODE_DISABLE;HAL_DMA_DeInit(&hdma_usart3_rx);HAL_DMA_Init(&hdma_usart3_rx);__HAL_LINKDMA(&huart3, hdmarx, hdma_usart3_rx);hdma_usart3_tx.Instance 		= 	DMA1_Stream3;hdma_usart3_tx.Init.Channel 	= 	DMA_CHANNEL_4;hdma_usart3_tx.Init.Direction 	= 	DMA_MEMORY_TO_PERIPH;hdma_usart3_tx.Init.PeriphInc 	= 	DMA_PINC_DISABLE;hdma_usart3_tx.Init.MemInc 		= 	DMA_MINC_ENABLE;hdma_usart3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;hdma_usart3_tx.Init.MemDataAlignment 	= DMA_MDATAALIGN_BYTE;hdma_usart3_tx.Init.Mode 		= 	DMA_NORMAL;hdma_usart3_tx.Init.Priority 	= 	DMA_PRIORITY_LOW;hdma_usart3_tx.Init.FIFOMode 	= 	DMA_FIFOMODE_DISABLE;HAL_DMA_DeInit(&hdma_usart3_tx);HAL_DMA_Init(&hdma_usart3_tx);__HAL_LINKDMA(&huart3, hdmatx, hdma_usart3_tx);
}int fputc(int ch, FILE *f)
{/* 发送一个字节数据到串口DEBUG_USART */HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, HAL_MAX_DELAY);	return (ch);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/923498.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/923498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PCA9535ECDWR2G 微控制器MCU接口芯片 ON 电子元器件解析

一、PCA9535ECDWR2G ON 元器件解析1. 是什么电子元器件? PCA9535ECDWR2G 是安森美半导体(ON Semiconductor)生产的一款16位I/O扩展器。它属于接口芯片类别,具体功能是通过IC总线为微控制器(MCU)提供额外的通…

大模型中token与tokenizer的区别

TokenToken 的基本概念在大模型(如GPT系列)中,token是文本处理的最小单位。模型将输入的文本分割成token序列,每个token对应一个唯一的整数ID,用于模型的内部处理。例如,英文单词"apple"可能被编…

还在觉得剪辑太难?用对视频剪辑软件,让剪辑变得像拼图一样有趣

想制作出精彩的Vlog,拥有一款简单易用的视频编辑软件是关键的第一步。如果你曾因为觉得剪辑太复杂、技术门槛太高而望而却步,那么这篇文章就是为你准备的,因为借助今天简单易用的视频编辑软件,人人都能成为自己生活的导演。本文就…

【ZEGO即构开发者日报】微信公众号上线“智能回复”功能;2025年8月中国应用/游戏厂商出海收入Top30榜;土耳其宣布将封禁29款社交/社媒应用……

💡开发者朋友们大家好,这里是 开发者日报!欢迎查阅您的实时互动日报。本栏目实时聚焦、每日更新【AI】、【泛娱乐】、【语音交互】、【实时音视频】等领域热点,欢迎大家在评论区一起探讨! 🔨「产品技术」 …

前端WebSocket实时通信实现

在项目中使用WebSocket实现实时通信 WebSocket提供了一种在客户端和服务器之间建立持久连接的方式,可以实现实时数据交换。下面我将展示如何在前端项目中集成WebSocket功能。 设计思路 我将创建一个简单的聊天室界面来演示WebSocket的使用,包含以下功能&…

电磁流量计可靠品牌之选,基恩士提供多样化解决方案

引言在工业自动化领域,流量的精确计量是保障产品质量、优化成本和提升设备效率的关键一环。当面临“电磁流量计的可靠品牌”这一问题时,企业通常需要考量产品的耐用性、测量精度、维护成本以及系统集成能力。流量计在安装、维护和测量精度方面面临诸多挑…

NumPy数组与Python列表的赋值行为解析

在Python科学计算中,NumPy数组和Python原生列表是两种常用的数据结构。理解它们之间的赋值行为差异对于编写高效、正确的代码至关重要。本文将深入探讨NumPy数组赋值给Python变量的各种情况,揭示背后的内存机制和类型转换特性。 直接赋值行为分析 当我们…

中国制造难点在哪里?

最近生产一批板子,其中一个进口的连接器为什么能卖我们差不多一千多钱还没现货,有时候还禁售;规格书也就寥寥一页而已,外观看起来也淡淡无奇,身为制造业强国的我们为什么没人做呢?你们怎么看?#中…

python 读取大文件优化示例

核心方法逐行读取 - 最常用,内存占用O(1)分块读取 - 适合超大文件,可控制内存使用内存映射 - 高性能,虚拟内存映射缓冲读取 - 平衡性能和内存特殊场景处理CSV文件 - 使用pandas的chunksize参数JSON Lines - 逐行解析JSON对象文本分析 - 内存高…

VBA数据结构深度解析:字典对象与集合对象的性能终极对决

VBA数据结构大揭秘:Dictionary与Collection,谁才是性能王者? 某头部券商的风控系统曾遭遇"数据黑洞"危机:使用Collection处理10万条交易记录时,系统响应时间长达47秒,而改用Dictionary后仅需3.2秒——效率差距达14.7倍!这背后是VBA开发者普遍存在的认知盲区:…

【系统分析师】2025年上半年真题:论文及解题思路

更多内容请见: 备考系统分析师-专栏介绍和目录 文章目录 试题一:论信息系统运维管理技术与应用 试题二:论软件系统测试方法及应用 试题三:论信息系统开发方法及应用 试题四:论模型驱动分析方法及应用 试题一:论信息系统运维管理技术与应用 智能运维(AIOps)是以人工智能…

立创·庐山派K230CanMV开发板的进阶学习——颜色识别

学习目标:立创庐山派K230CanMV开发板的进阶学习——颜色识别学习内容:颜色识别 颜色识别 1. 本节介绍 📝 学习内容:本节将学习基于颜色阈值的色块检测技术,通过定义特定颜色范围,从摄像头采集的图像中识别并…

【实时Linux实战系列】V4L2 采集零拷贝:DMA-BUF 在低延迟视频中的应用

在实时视频处理系统中,视频帧的高效传输和处理是确保系统低延迟和高吞吐量的关键。传统的视频采集和处理流程中,数据拷贝是一个常见的性能瓶颈,它不仅增加了处理延迟,还可能导致帧间抖动。为了克服这些问题,Linux 提供…

STM32精准控制水流

如何用STM32精准控制水的流量?一、系统组成框图------------- ------------ ----------- -------------| | | | | | | || 流量传感器 -----> STM32 ----->| 驱动电路 ----->…

吃透 Vue 样式穿透:从 scoped 原理到组件库样式修改实战

在 Vue 项目开发中,我们经常会引入 Element Plus、Vant、Ant Design等成熟组件库来提升开发效率。但即便组件库提供了基础样式配置,实际业务中仍需根据设计需求调整组件内部细节样式——这时候,「样式穿透」就成了必须掌握的技能。而要理解样…

记一次维修网桥经历

1.前言 前俩天突然下大雨了,大雨过后我也迎来断网时刻,经过简单排查发现是网络的网桥这条线路无法连通。 猜测1 可能是网线损坏,2 网桥损坏 2.拆解 经过测试网线设备后发现是网桥的问题,尝试reset发现无反应(正常情况重…

OceanBase001-入门--里面有的概念不确定文章作为了解使用

目录资料来源特点支持和不支持的点名词概念租户资源池租户使用资源数据库表分区示例资料来源 B站视频 点击跳转 特点 分两个版本 企业版支持Oracle 和MySql 社区版本支持 MySql 这里视频这么讲解的。后续有没有社区版本什么样子不知道,请不要喷我 单节点部署 兼…

KITTI数据集

KITTI数据集是由德国卡尔斯鲁厄理工学院 Karlsruhe Institute of Technology (KIT) 和美国芝加哥丰田技术研究院 Toyota Technological Institute at Chicago (TTI-C) 于2012年联合创办,是目前国际上最为常用的自动驾驶场景下的计算机视觉算法评测数据集之一。该数据…

rk3568移植WebRTC AudioProcessing

前言: 大家好,我是飞一样的成长,今天这篇文章主要想分享音频3A的内容。在之前有网友找我怎么移植原生的webrtc到rk3568/rk3588上,当时我自己也没有移植过,后面折腾了一个礼拜才搞定,当时遇到的最大问题&…

介绍一下 RetNet

RetNet(Retention Network)是微软亚洲研究院于 2023 年提出的一种新型序列建模架构,旨在解决 Transformer 架构在长序列处理中存在的计算复杂度高、内存占用大、推理速度慢等核心问题。它通过创新的 “循环注意力机制”,实现了 “…