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
英文地址,請注明出處:http://en.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 架構在長序列處理中存在的計算復雜度高、內存占用大、推理速度慢等核心問題。它通過創新的 “循環注意力機制”,實現了 “…