網(wǎng)站建設(shè) 凡科仿淘寶的網(wǎng)站模版
鶴壁市浩天電氣有限公司
2026/01/24 10:45:48
網(wǎng)站建設(shè) 凡科,仿淘寶的網(wǎng)站模版,上海網(wǎng)站建設(shè)_永燦品牌建站,一站式網(wǎng)站建設(shè)費用(1)實驗平臺#xff1a;普中STM32F103朱雀、玄武開發(fā)板 上一章我們介紹了 STM32F1 的 USART 串口通信#xff0c; 這一章我們來學(xué)習(xí)如何在STM32 上使用 printf 輸出函數(shù)。 相信只要學(xué)習(xí)過 C 語言的朋友#xff0c; 都會使用 printf函數(shù)。 本章要實現(xiàn)的功能是#xff1a; 通…(1)實驗平臺普中STM32F103朱雀、玄武開發(fā)板上一章我們介紹了 STM32F1 的 USART 串口通信 這一章我們來學(xué)習(xí)如何在STM32 上使用 printf 輸出函數(shù)。 相信只要學(xué)習(xí)過 C 語言的朋友 都會使用 printf函數(shù)。 本章要實現(xiàn)的功能是 通過 printf 函數(shù)將信息打印在串口調(diào)試助手上顯示。 學(xué)習(xí)本章的可以參考串口通信章節(jié)內(nèi)容。 本章分為如下幾部分內(nèi)容22.1 printf 重定向介紹22.1.1 printf 重定向簡介22.1.2 printf 函數(shù)格式22.2 硬件設(shè)計22.3 軟件設(shè)計22.3.1 USART1 初始化函數(shù)22.3.2 printf 重定向函數(shù)22.3.3 主函數(shù)22.4 實驗現(xiàn)象課后作業(yè)22.1 printf 重定向介紹22.1.1 printf 重定向簡介我們知道 C 語言中 printf 函數(shù)默認(rèn)輸出設(shè)備是顯示器 如果要實現(xiàn)在串口或者 LCD 上顯示 必須重定義標(biāo)準(zhǔn)庫函數(shù)里調(diào)用的與輸出設(shè)備相關(guān)的函數(shù)。 比如使用 printf 輸出到串口 需要將 fputc 里面的輸出指向串口,這一過程就叫重定向。那么如何讓 STM32 使用 printf 函數(shù)呢 很簡單 只需要將 fputc 里面的輸出指向 STM32 串口即可 fputc 函數(shù)有固定的格式 我們只需要在函數(shù)內(nèi)操作STM32 串口即可 代碼如下int fputc(int ch,FILE *p) //函數(shù)默認(rèn)的 在使用 printf 函數(shù)時自動調(diào)用 { USART_SendData(USART1,(u8)ch); while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)RESET); return ch; }如果要讓其他的串口也使用 printf 函數(shù) 只需要修改下串口號即可。22.1.2 printf 函數(shù)格式printf 函數(shù)調(diào)用格式如下printf(格式化字符串, 參量表);其中格式化字符串包括兩部分內(nèi)容: 一部分是正常字符, 這些字符將按原樣輸出 另一部分是格式化規(guī)定字符, 以%開始, 后跟一個或幾個規(guī)定字符,用來確定輸出內(nèi)容格式。參量表是需要輸出的一系列參數(shù), 其個數(shù)必須與格式化字符串所說明的輸出參數(shù)個數(shù)一樣多, 各參數(shù)之間用,分開, 且順序一一對應(yīng), 否則將會出現(xiàn)意想不到的錯誤。常用格式化規(guī)定字符如下%d 按照十進(jìn)制整型數(shù)打印%6d 按照十進(jìn)制整型數(shù)打印 至少 6 個字符寬%f 按照浮點數(shù)打印%6f 按照浮點數(shù)打印 至少 6 個字符寬%.2f 按照浮點數(shù)打印 小數(shù)點后有 2 位小數(shù)%6.2f 按照浮點數(shù)打印 至少 6 個字符寬 小數(shù)點后有 2 位小數(shù)%x 按照十六進(jìn)制打印%c 打印字符%s 打印字符串例如 使用 printf 函數(shù)輸出一個整型數(shù)據(jù) 1234 則調(diào)用格式如下int data1234; printf(“輸出整型數(shù)據(jù) data%d
” ,data);在 KEIL 中使用 printf 一定要勾選“微庫” 選項 否則不會輸出。 配置如下在 STM32 程序開發(fā)中 printf 應(yīng)用是非常廣的 當(dāng)我們需要查看某些變量數(shù)值或者其他信息等 都可以通過 printf 打印到串口調(diào)試助手上查看。22.2 硬件設(shè)計本章硬件電路與上一章串口通信實驗一樣 使用到了 STM32F1 的串口 1 和LED 指示燈 這里不多說。22.3 軟件設(shè)計本章所要實現(xiàn)的功能是 通過 printf 函數(shù)將信息打印在串口調(diào)試助手上顯示 同時 D1 指示燈不斷閃爍 表示系統(tǒng)正常運行。 程序框架如下1 初始化 USART12 編寫 printf 重定向程序3 編寫主函數(shù)本章軟件部分非常簡單 只需要在上一章串口通信程序基礎(chǔ)上 加上一個printf 重定向函數(shù)即可。 下面我們打開“4--實驗程序1--基礎(chǔ)實驗14-printf重定向” 工程。22.3.1 USART1 初始化函數(shù)USART1 串口初始化程序同上一章串口通信實驗一樣。22.3.2 printf 重定向函數(shù)初始化 USART1 后 就需要將 fputc 里面的輸出指向 STM32 的串口 代碼如下int fputc(int ch,FILE *p) //函數(shù)默認(rèn)的 在使用 printf 函數(shù)時自動調(diào)用 { USART_SendData(USART1,(u8)ch); while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)RESET); return ch; }當(dāng)使用 printf 函數(shù)時 自動會調(diào)用 fputc 函數(shù) 而 fputc 函數(shù)內(nèi)又將輸出設(shè)備重定義為 STM32 的 USART1 所以要輸出的數(shù)據(jù)就會在串口 1 上輸出。22.3.3 主函數(shù)編寫好前面幾部分程序后 接下來就可以編寫主函數(shù)了 代碼如下#include system.h #include SysTick.h #include led.h #include usart.h /******************************************************************************* * 函 數(shù) 名 : main * 函數(shù)功能 : 主函數(shù) * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ int main() { u8 i0; u16 data1234; float fdata12.34; char str[]Hello World!; SysTick_Init(72); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中斷優(yōu)先級分組 分2組 LED_Init(); USART1_Init(115200); while(1) { i; if(i%500) { LED1!LED1; printf(輸出整型數(shù)data%d
,data); printf(輸出浮點型數(shù)fdata%0.2f
,fdata); printf(輸出十六進(jìn)制數(shù)data%X
,data); printf(輸出八進(jìn)制數(shù)data%o
,data); printf(輸出字符串str%s
,str); } delay_ms(10); } }主函數(shù)實現(xiàn)的功能很簡單 首先調(diào)用之前編寫好的硬件初始化函數(shù) 包括SysTick 系統(tǒng)時鐘 LED 初始化等。 然后調(diào)用我們前面編寫的 USART1 初始化函數(shù)這里我們設(shè)定串口通信波特率為 115200。 最后進(jìn)入 while 循環(huán)語句 不斷讓 LED指示間隔 200ms 閃爍 同時通過串口 1 輸出一連串字符信息。其實如果你學(xué)會了重定向到 USART1 對于其他的串口重定向都是類似的。22.4 實驗現(xiàn)象將工程程序編譯后下載到開發(fā)板內(nèi) 可以看到 DS0 指示燈不斷閃爍 表示程序正常運行。 打開“5--開發(fā)工具4-常用輔助開發(fā)軟件串口調(diào)試助手串口調(diào)試助手丁丁” 內(nèi)串口調(diào)試助手。 實驗現(xiàn)象如下 前提一定要連接好線路USB 線一端連接電腦 另一端連接開發(fā)板“USB 轉(zhuǎn)串口模塊” 上的 USB 下載口并且在“USB 轉(zhuǎn) TTL電源” 模塊上 P4 端子短接片已插上課后作業(yè)1 使用 printf 函數(shù) 在串口調(diào)試助手上打印出九九乘法表。2 使用 printf 函數(shù) 在串口調(diào)試助手上打印楊輝三角。