• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • STM8學習筆記---串口printf函數的實現

    標簽: STM8學習筆記

           在使用單片機的時候,串口是要經常使用的功能,特別是在調試代碼的過程中,經常需要使用串口打印出某些變量值,來判斷程序執行流程是否正常。但是單片機默認情況下沒有printf函數,如果需要使用printf函數的功能,就需要自己在串口代碼中配置。下面總結一下如何在STM8單片機中使用printf函數功能。

    首先按照常規方法先初始化串口

    void Uart1_IO_Init( void )
    {
        PD_DDR |= ( 1 << 5 );                       //輸出模式 TXD
        PD_CR1 |= ( 1 << 5 );                       //推挽輸出
        PD_DDR &= ~( 1 << 6 );                      //輸入模式 RXD
        PD_CR1 &= ~( 1 << 6 );                      //浮空輸入
    }
    
    //baudrate 為需要設置的波特率
    void Uart1_Init( unsigned int baudrate )
    {
        unsigned int baud;
        baud = 16000000 / baudrate;
        Uart1_IO_Init();
        UART1_CR1 = 0;
        UART1_CR2 = 0;
        UART1_CR3 = 0;
        UART1_BRR2 = ( unsigned char )( ( baud & 0xf000 ) >> 8 ) | ( ( unsigned char )( baud & 0x000f ) );
        UART1_BRR1 = ( ( unsigned char )( ( baud & 0x0ff0 ) >> 4 ) );
        UART1_CR2_bit.REN = 1;                      //接收使能
        UART1_CR2_bit.TEN = 1;                      //發送使能
        UART1_CR2_bit.RIEN = 1;                     //接收中斷使能
    }

    首先設置IO口,然后設置串口相關寄存器。設置好之后串口就可以使用了,但是這時候還不能使用printf函數功能,要使用printf函數,需要重新定向putchar函數。設置代碼如下:

    #include "stdio.h"
    
    int putchar( int ch )
    {
        while( !( UART1_SR & 0X80 ) );              //循環發送,直到發送完畢
        UART1_DR = ( u8 ) ch;
        return ch;
    }

    將putchar添加到串口文件中,然后將函數里面的寄存器設置為串口1,添加頭文件stdio.h,這時候就可以使用printf函數了。

    下來再主函數中使用printf打印數據就可以了

    void main( void )
    {
        unsigned int i = 0;
        SysClkInit();                         
        __asm( "sim" );                       
        LED_GPIO_Init();                      
        Uart1_Init(9600);                      
        __asm( "rim" );                       
        LED = 0;
        while( 1 )
        {
            LED = !LED;
            printf( "%d\r\n", i++ );
            delay_ms( 500 );
        }
    }

    0.5s改變一次LED燈的狀態,然后打印一個數字。串口打印效果如下:

    完整工程下載鏈接: STM8單片機實現串口printf函數打印功能

     

    版權聲明:本文為qq_20222919原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_20222919/article/details/105391581

    智能推薦

    stm8串口通信調試總結 (TTL)

    一、硬件連接     一.GPIO及USART1初始化結構體變量定義 二.串口時鐘及GPIO端口時鐘使能  USART1是掛在 CLK_Peripheral上的外設,為了調用的時候,使代碼易讀,我們定義: 再調用tm8l15x_clk.c中的庫函數使能時鐘     三.TX,RX配置  GPIO端口模式的配置包括 1.確定需要配...

    STM8使用自帶的bootloader

    前言 更多技術整理,歡迎關注本人博客www.tomtwos.com STM8使用自帶的bootloader步驟 首先確認你使用的STM8有沒有自帶的bootloader。 參考下表 STM8空器件可以直接使用自帶的bootloader。 STM8在使用SWIM燒錄后,要想繼續使用自帶的bootloader,必須設置可選字節為0x55AA。如下圖: 設置這兩個字節的方法,可以使用ST Visual ...

    STM8

    STM8串口數據異常 STM8s 庫函數配置串口UART1,輸出值與期望輸出值不一致 時鐘配置 UART1配置 原因 STM8s 庫函數配置串口UART1,輸出值與期望輸出值不一致 時鐘配置 CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);//選擇H...

    STM8 LED

    時鐘分頻寄存器(CLK_CKDIVR) 舉例...

    stm8單片機點亮LED中斷定時串口讀寫功能測試筆記

    STM8系列是意法半導體公司生產的8位的單片機。該型號單片機分為STM8A、STM8S、STM8L三個系列 使用測試例程, 測試例程均是來自于青風電子社區示例教程 這次例程使用的是 stm8s207 系列 用到的stm8s的IO定義以及函數封裝來自 :stm8s.h、stm8s_clk.h、stm8s_gpio.h、stm8s_uart1.h 點亮LED燈并通過定時器進行500ms的頻率閃爍 這里...

    猜你喜歡

    STM8學習筆記---定時器輸出7路PWM波

    STM8S003F3P6單片機共有三個定時器定時器1、定時器2、定時器4。其中定時器1為16位高級定時器,定時器2為16位通用定時器,定時器4為8位基本定時器。定時器1和定時器2可以輸出PWM波。其中定時器1有4個通道,定時器2有3個通道。 現在讓定時器1和定時器2所有通道同時輸出PWM波。 首先初始化定時器IO口 通過最小系統圖可以看出定時器通道對應的IO口為: TIM1_CH1–&...

    IAR環境編寫STM8中斷處理函數的技巧

    IAR環境下編寫STM8的中斷函數,對于中斷向量的概念、以及編程處理方法不太好理解,這篇文章總結了幾個關鍵的中斷編程技巧,知此文可以不用看搜索其他相關文章了。 1. STM8 中斷向量表 首先清楚stm8的中斷向量表,下圖來自stm8的datasheet。 中斷向量的起始地址是 0x00 8000。 注意前兩個中斷RESET和TRAP是沒有中斷編號的。 有中斷編號的始自TLI中斷,編號為0;其他中...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    精品国产乱码久久久久久蜜桃不卡