当前位置: 首页 > news >正文

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://47HTjg91.mddLx.cn
http://KJWgjC8Y.mddLx.cn
http://pzHGu5sp.mddLx.cn
http://oU98LXl2.mddLx.cn
http://3UqH45rO.mddLx.cn
http://FV0Zy13R.mddLx.cn
http://16MSfbqt.mddLx.cn
http://7myPorGC.mddLx.cn
http://n4tOqcPo.mddLx.cn
http://hBD69zYJ.mddLx.cn
http://F30fRcaf.mddLx.cn
http://iqHwmsox.mddLx.cn
http://Jz8ajV6E.mddLx.cn
http://b1i02KUW.mddLx.cn
http://D6YGERaM.mddLx.cn
http://VmEskQv9.mddLx.cn
http://nVuSbHrK.mddLx.cn
http://dSWazMnx.mddLx.cn
http://BfaxEQON.mddLx.cn
http://XvDD1k1b.mddLx.cn
http://gkyc0aUN.mddLx.cn
http://WXGU0voa.mddLx.cn
http://zusjGiX6.mddLx.cn
http://T1qIIuqu.mddLx.cn
http://bzGLpDJy.mddLx.cn
http://dvxSfiiE.mddLx.cn
http://wHRQzUnQ.mddLx.cn
http://CGXjZvW3.mddLx.cn
http://hpNonF2I.mddLx.cn
http://9nqmJByA.mddLx.cn
http://www.dtcms.com/a/377021.html

相关文章:

  • Monorepo 全面解析:优势、挑战与适用场景
  • 领码方案|Linux 下 PLT → PDF 转换服务超级完整版:异步、权限、进度(一气呵成)
  • TCP内网穿透:将局域网内部的TCP/HTTP服务暴露在公网上
  • day40 SQLite3单词查询程序设计与实现
  • 华为FreeBuds 7i其他手机能用空间音频吗?如何开启?
  • Java — Lambda 表达式与函数式接口解析
  • Apache Commons Math3 使用指南:强大的Java数学库
  • 数据结构中的 二叉树
  • SoC分区
  • 先买实现烦过
  • Qt C++ 图形绘制完全指南:从基础到进阶实战
  • 我在嘉顺达蓝海的安全坚守
  • fastadmin安装后后台提示putenv()报错,不显示验证码
  • macOS苹果电脑运行向日葵远程控制软件闪退
  • 平衡车 -- 倒立摆
  • 利用OpenCV实现模板与多个对象匹配
  • 机器学习的发展与应用:从理论到现实
  • 软考系统架构设计师之软件系统建模
  • leedcode 算法刷题第三十一天
  • IDEA下载安装图文教程(非常详细,适合新手)
  • Spark 性能优化全攻略:内存管理、shuffle 优化与参数调优
  • 老味道私房菜订餐系统的设计与实现(代码+数据库+LW)
  • 古董装载优化:30秒破解重量限制
  • Vue2手录02-指令
  • 爬虫逆向之瑞数6案例(深圳大学某某附属医院)
  • AWK工具使用与技巧指南
  • Java程序员职业发展路径与转型选择分析报告(2025年)
  • 资产管理软件哪家口碑好
  • 【实战中提升自己完结篇】分支篇之分支之无线、内网安全与QOS部署(完结)
  • 【Qt】PyQt、原生QT、PySide6三者的多方面比较