手把手教你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)留言指正,非常感謝!

浙公網(wǎng)安備 33010602011771號(hào)