<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      手把手教你STM32F429串口配置與重定向技巧

      大家好,我是知微。

      在嵌入式開(kāi)發(fā)中,串口通信是最基礎(chǔ)也是最重要的調(diào)試手段之一。

      本文將詳細(xì)介紹如何在STM32F429平臺(tái)上使用STM32CubeMX工具配置串口通信,并實(shí)現(xiàn)printf 重定向功能,為后續(xù)開(kāi)發(fā)調(diào)試打下堅(jiān)實(shí)基礎(chǔ)。

      1. 使用CubeMX配置串口通信

      打開(kāi)CubeMX,選擇MCU

      配置SYS

      • Debug配置為Serial Wire,這樣才能調(diào)試
      • 因?yàn)橐玫紽reerRTOS,時(shí)基源不能用SysTick

      配置RCC

      我這里HSE外接了8MHz的晶振,LSE外接了32.768KHz的晶振

      配置時(shí)鐘

      配置UART7

      • 我這里的UART7,用到的引腳分別是PE7和PE8

      • 參數(shù)保持默認(rèn)的

      配置FreeRTOS

      • 選中就好了,參數(shù)先保持默認(rèn),后續(xù)可根據(jù)情況修改

      配置項(xiàng)目管理

      • 項(xiàng)目名為UART7_LETTERSHELL
      • 項(xiàng)目所在路徑
      • IDE我這里選擇MDK

      • 僅復(fù)制需要的庫(kù)文件
      • 自動(dòng)生成配對(duì)的.c/.h文件

      生成工程代碼

      • 代碼成功生成,點(diǎn)擊Open Project打開(kāi)工程

      配置keil

      • 去掉瀏覽信息,加快編譯速度

      • 優(yōu)化等級(jí)改為L(zhǎng)evel 0

      修改代碼

      • 打開(kāi)freertos.c文件

      • 增加下面的代碼#

      編譯燒錄

      • 編譯成功

      • 我這里剛好用的就ST-LINK,按F8或者點(diǎn)擊Load圖標(biāo),直接燒錄就可以

      連接串口測(cè)試

      • 串口調(diào)試助手的參數(shù)配置,要與UART7保持一致

      • 可以看到,已經(jīng)正常在打印了

      2. 實(shí)現(xiàn)串口重定向

      如果每次都靠HAL_UART_Transmit來(lái)輸出打印信息,一點(diǎn)都不方便。萬(wàn)一要移植代碼到其他平臺(tái),修改工作量就會(huì)特別大。最常用的還是采用printf,那要怎么實(shí)現(xiàn)呢,這就需要用到重定向了

      方法1:使用標(biāo)準(zhǔn)庫(kù)(不勾選Use MicroLIB)

      • 核心邏輯:標(biāo)準(zhǔn)庫(kù)默認(rèn)依賴半主機(jī)模式,需顯式關(guān)閉半主機(jī)并重定向輸入/輸出。
      • 操作步驟:關(guān)閉半主機(jī)模式,重定向函數(shù),在usart.c中修改代碼如下
      #pragma import(__use_no_semihosting)  
      struct __FILE 
      { 
        int handle; 
      }; 
      FILE __stdout;         
      void _sys_exit(int x) 
      { 
        x = x; 
      } 
      
      int fputc(int ch, FILE *f) {
          HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 0x1FF);
          return ch;
      }
      int fgetc(FILE *f) {
          uint8_t ch;
          HAL_UART_Receive(&huart1, &ch, 1, HAL_MAX_DELAY);
          return ch;
      }
      

      • 修改freertos.c的代碼,增加頭文件,將HAL_UART_Transmit用printf替代

      • 編譯燒錄測(cè)試,可以看到重定向成功

      方法2:使用MicroLIB(勾選Use MicroLIB)

      • 核心邏輯:MicroLIB是Keil專為嵌入式優(yōu)化的精簡(jiǎn)庫(kù),默認(rèn)不依賴半主機(jī)模式,但需手動(dòng)實(shí)現(xiàn)輸入/輸出函數(shù)。
      • 操作步驟:在keil中勾選Use MicroLIB,注釋掉前面的半主機(jī)相關(guān)代碼,保留fputc/fgetc 重定向代碼

      • 編譯燒錄測(cè)試,一樣重定向成功

      現(xiàn)在我們已經(jīng)完成了串口通信的基礎(chǔ)配置和重定向,這為后續(xù)工作打下了堅(jiān)實(shí)基礎(chǔ)。

      在下一篇教程中,我們將基于此工程移植letter-shell——一款功能強(qiáng)大的嵌入式命令行工具,它將為我們的開(kāi)發(fā)調(diào)試帶來(lái)極大便利。

      ??歡迎各位 ??點(diǎn)贊 ?收藏 ??評(píng)論,如有錯(cuò)誤請(qǐng)留言指正,非常感謝!

      posted @ 2025-08-12 17:13  知微之見(jiàn)  閱讀(17)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产精品 无码专区| 国产午夜福利高清在线观看| 亚洲精品一区二区三区小| 91亚洲国产成人久久蜜臀| 久久综合亚洲鲁鲁九月天| 欧洲精品色在线观看| 国产欧美久久一区二区| 三上悠亚精品二区在线观看| 亚洲欧美日韩综合久久久| 亚洲国产欧美在线人成AAAA| 熟女性饥渴一区二区三区| 超碰成人人人做人人爽| 国产av一区二区麻豆熟女| 妖精视频亚州无吗高清版| 国产在线观看网址不卡一区 | 久久这里只精品国产2| 亚洲狠狠狠一区二区三区| 亚洲欭美日韩颜射在线二 | 永久国产盗摄一区二区色欲| 国产福利在线观看免费第一福利| 在线永久看片免费的视频| 99RE6在线观看国产精品| 青青草原国产精品啪啪视频 | 夜夜添狠狠添高潮出水| 开心五月深深爱天天天操| 秋霞人妻无码中文字幕| 给我中国免费播放片在线| 国产一区二区三区禁18| 国产精品三级中文字幕| 久久婷婷五月综合色和啪| av一本久道久久综合久久鬼色| 欧美成人VA免费大片视频| 亚洲爆乳WWW无码专区| 亚洲成人精品一区二区中| av色蜜桃一区二区三区| jizz国产免费观看| 国产午夜福利精品视频| 久久人人爽人人爽人人片| 亚洲男人的天堂av手机在线观看| 午夜成人无码免费看网站| 不卡国产一区二区三区|