資源描述:
《STM32 printf重定向》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、在STM32串口通信程序中使用printf發(fā)送數(shù)據(jù),非常的方便??稍趧傞_始使用的時候總是遇到問題,常見的是硬件訪真時無法進(jìn)入main主函數(shù),其實只要簡單的配置一下就可以了。?下面就說一下使用printf需要做哪些配置。?有兩種配置方法:一、對工程屬性進(jìn)行配置,詳細(xì)步驟如下1、首先要在你的main文件中包含“stdio.h”(標(biāo)準(zhǔn)輸入輸出頭文件)。2、在main文件中重定義函數(shù)??如下:??//發(fā)送數(shù)據(jù)??intfputc(intch,FILE*f)??{???USART_SendData(USART1,(unsignedchar
2、)ch);//USART1可以換成USART2等???while(!(USART1->SR&USART_FLAG_TXE));???return(ch);??}??//接收數(shù)據(jù)??intGetKey(void)?{????while(!(USART1->SR&USART_FLAG_RXNE));???return((int)(USART1->DR&0x1FF));??}??這樣在使用printf時就會調(diào)用自定義的fputc函數(shù),來發(fā)送字符。3、在工程屬性的“Target"->"CodeGeneration"選項中勾選"UseMicroLIB"
3、”???MicroLIB是缺省C的備份庫,關(guān)于它可以到網(wǎng)上查找詳細(xì)資料。?至此完成配置,在工程中可以隨意使用printf向串口發(fā)送數(shù)據(jù)了。?二、第二種方法是在工程中添加“Regtarge.c”文件1、在main文件中包含“stdio.h”文件2、在工程中創(chuàng)建一個文件保存為Regtarge.c,然后將其添加工程中在文件中輸入如下內(nèi)容(直接復(fù)制即可)#include#include#pragmaimport(__use_no_semihosting_swi)externint?SendChar(intch)
4、;//聲明外部函數(shù),在main文件中定義externint?GetKey(void);struct__FILE{?inthandle;????????//Addwhateveryouneedhere?};FILE__stdout;FILE__stdin;intfputc(intch,FILE*f){?return(SendChar(ch));}intfgetc(FILE*f){?return(SendChar(GetKey()));}void_ttywrch(intch){?SendChar(ch);}intferror(FILE*f){??
5、????????????//Yourimplementationofferror?returnEOF;}void_sys_exit(intreturn_code){label:?gotolabel;?????//endlessloop}?3、在main文件中添加定義以下兩個函數(shù)intSendChar(intch)?{?while(!(USART1->SR&USART_FLAG_TXE));//USART1可換成你程序中通信的串口?USART1->DR=(ch&0x1FF);?return(ch);}intGetKey(void)?{?whil
6、e(!(USART1->SR&USART_FLAG_RXNE));?return((int)(USART1->DR&0x1FF));}至此完成配置,可以在main文件中隨意使用printf。