新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 如何在單片機上使用printf函數

        如何在單片機上使用printf函數

        作者: 時間:2016-11-26 來源:網絡 收藏
        當我們在調試代碼時,通常需要將程序中的某個變量打印至PC機上,來判斷我們的程序是否按預期的運行,printf函數很好的做到了這一點,它能直接以字符的方式輸出變量名和變量的值,這樣使輸出的信息很直觀;但printf函數在使用時,不僅僅要初始化串口,還需要其它的一些設置或者要調用其它的一些函數,否則printf函數將不能按我們想要的方式執行。

        由于不同的編譯器studio函數不一樣,所以使用的方法也不一樣,這需要大家去看編譯器的help,這里我以STM32、LPC24和AVR整理了幾個串口打印程序,供需要的朋友參考。

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

        簡介:

        1、在KEIL下使用printf函數,以STM32為例

        uart.c中添加如下代碼

        View Code

        int fputc(int ch, FILE *f){ USART_SendData(USART1, (uint8_t) ch); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {} return ch;}int fgetc(FILE *f){ while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET) {} return (int)USART_ReceiveData(USART1);} 這樣,只要在需要用printf的文件里#include就可以了,printf會自已的調用fputc函數來實現串口數據的輸出。

        2、添加Retarget.c,實現在KEIL下使用printf函數,以LPC2478為例

        首先在Keil安裝目錄下面ARM/Startup/Retarget.c找到Retarget.c文件將其復制到你的工程文件夾下面;并將其加入到工程中

        在uart.c中添加如下代碼

        View Code

        // Implementation of sendchar (also used by printf function to output data) int sendchar (int ch) { // Write character to Serial Port while (!(U0LSR & 0x20)); return (U0THR = ch); } int getkey (void) { // Read character from Serial Port while (!(U0LSR & 0x01)); return (U0RBR); } 這樣,只要在需要用printf的文件里#include就可以了,printf會通過Retarget中的fputc函數調用sendchar來實現串口數據的輸出。

        事實上,和第一種的方式是一樣的。

        3、自定義printf函數,以AVR為例

        前面介紹的是在KEIL編譯器上使用printf函數,但不是所有的編譯器平臺都能適用,因此有時候我們需要自定義printf函數,下面以AVR在GCC下為例

        在usart.c中添加如下代碼

        View Code

        #include#include//向串口usart0發送一個字節函數 void Uart0_putchar( unsigned char sdbyte) { UDR0=sdbyte; while(!(UCSR0A&0x40)); UCSR0A

        =0x40; }////////////////////////////////////////////////////////void Uart0_printf(char *str,...){ char buf[128]; unsigned char i = 0; va_list ptr; va_start(ptr,str); vsprintf(buf,str,ptr); while(buf[i]) { Uart0_putchar(buf[i]); i++; }}結語:

        有了printf格式化輸出函數,調試起來就方便多了。



        關鍵詞: 單片機printf函

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 两当县| 葫芦岛市| 根河市| 宾川县| 乌拉特后旗| 冀州市| 桃江县| 石河子市| 富民县| 什邡市| 永德县| 留坝县| 和平区| 水城县| 马关县| 南雄市| 微山县| 芮城县| 林甸县| 香河县| 简阳市| 兰西县| 喀什市| 南澳县| 余姚市| 乐至县| 杨浦区| 南木林县| 德惠市| 武宣县| 乌恰县| 乐平市| 古丈县| 拉萨市| 隆尧县| 西城区| 鄂温| 湾仔区| 丰宁| 元阳县| 剑阁县|