新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 關(guān)于STM32串口通信使用printf發(fā)送數(shù)據(jù)的配置方法

        關(guān)于STM32串口通信使用printf發(fā)送數(shù)據(jù)的配置方法

        作者: 時(shí)間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
        開發(fā)環(huán)境:KeilRVMDK


        在STM32">STM32串口通信程序中使用printf發(fā)送數(shù)據(jù),非常的方便。可在剛開始使用的時(shí)候總是遇到問題,常見的是硬件訪真時(shí)無法進(jìn)入main主函數(shù),其實(shí)只要簡(jiǎn)單的配置一下就可以了。

        本文引用地址:http://www.104case.com/article/201611/315715.htm

        下面就說一下使用printf需要做哪些配置。

        有兩種配置方法

        一、對(duì)工程屬性進(jìn)行配置,詳細(xì)步驟如下

        1、首先要在你的main 文件中 包含“stdio.h” (標(biāo)準(zhǔn)輸入輸出頭文件)。

        2、在main文件中重定義函數(shù)。如下:

        // 發(fā)送數(shù)據(jù)
        int fputc(int ch, FILE *f)
        {
        USART_SendData(USART1, (unsigned char) ch);// USART1 可以換成 USART2 等
        while (!(USART1->SR & USART_FLAG_TXE));
        return (ch);
        }
        // 接收數(shù)據(jù)
        int GetKey (void)
        {
        while (!(USART1->SR & USART_FLAG_RXNE));
        return ((int)(USART1->DR & 0x1FF));
        }

        這樣在使用printf時(shí)就會(huì)調(diào)用自定義的fputc函數(shù),來發(fā)送字符。

        3、在工程屬性的 “Target" -> "Code Generation" 選項(xiàng)中勾選 "Use MicroLIB"
        MicroLIB 是缺省C的備份庫,關(guān)于它可以到網(wǎng)上查找詳細(xì)資料。

        二、第二種方法是在工程中添加“Regtarge.c”文件
        1、在main文件中包含 “stdio.h” 文件
        2、在工程中創(chuàng)建一個(gè)文件保存為 Regtarge.c , 然后將其添加工程中在文件中輸入如下內(nèi)容(直接復(fù)制即可)

        #include
        #include
        #pragma import(__use_no_semihosting_swi)
        extern int SendChar(int ch); // 聲明外部函數(shù),在main文件中定義
        extern int GetKey(void);
        struct __FILE {
        int handle; // Add whatever you need here
        };
        FILE __stdout;
        FILE __stdin;
        int fputc(int ch, FILE *f) {
        return (SendChar(ch));
        }
        int fgetc(FILE *f) {
        return (SendChar(GetKey()));
        }
        void _ttywrch(int ch) {
        SendChar (ch);
        }
        int ferror(FILE *f) { // Your implementation of ferror
        return EOF;
        }
        void _sys_exit(int return_code) {
        label: goto label; // endless loop
        }

        3、在main文件中添加定義以下兩個(gè)函數(shù)

        int SendChar (int ch) {
        while (!(USART1->SR & USART_FLAG_TXE)); // USART1 可換成你程序中通信的串口
        USART1->DR = (ch & 0x1FF);
        return (ch);
        }
        int GetKey (void) {
        while (!(USART1->SR & USART_FLAG_RXNE));
        return ((int)(USART1->DR & 0x1FF));
        }

        至此完成配置,可以在main文件中隨意使用 printf 。



        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 汾西县| 德惠市| 肇东市| 合江县| 霞浦县| 从化市| 乌兰县| 积石山| 临洮县| 吐鲁番市| 安庆市| 芜湖市| 乾安县| 射阳县| 集贤县| 同江市| 巴里| 青铜峡市| 酉阳| 白河县| 电白县| 宿松县| 民乐县| 宁津县| 浦东新区| 麻栗坡县| 株洲县| 和静县| 苍南县| 封开县| 手游| 南昌市| 宾阳县| 滦南县| 常德市| 永顺县| 桑植县| 双峰县| 内乡县| 龙口市| 郎溪县|