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函數打印功能
智能推薦
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中斷定時串口讀寫功能測試筆記
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;其他中...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...