1. 程式人生 > >IAR開發環境使用串列埠printf輸出(基於STM8L15x系列微控制器)

IAR開發環境使用串列埠printf輸出(基於STM8L15x系列微控制器)

這裡我們以STM8L15x系列微控制器使用ADC內部參考電壓測量VDD電壓並將電壓值value通過視窗列印為例編寫程式,相關的adc配置可參見另一篇部落格http://blog.csdn.net/m0_37973607/article/details/77141756(STM8L使用ADC內部參考電壓通道測量VDD電壓)

usart.h標頭檔案:

#ifndef _usart_H
#define _usart_H
#include "stm8l15x.h"
void Usart_Init(void);
#endif

usart.c原始檔:

#include "usart.h"
void Usart_Init(void)

{
        CLK_PeripheralClockConfig (CLK_Peripheral_USART1,ENABLE);    //開啟USART1時鐘
        USART_Init(USART1,9600,USART_WordLength_8b,USART_StopBits_1,USART_Parity_No,USART_Mode_Tx);                 //USART初始化,波特率9600,8位資料長度,1位停止位,無校驗位,傳送模式

        USART_Cmd (USART1,ENABLE);//使能USART1
}

#include "stm8l15x.h"
#include "adc.h"
#include "usart.h"
#include "stdio.h"


int putchar(int data)  
{  
      USART_SendData8(USART1,(u8)data);  //傳送8位資料
     while(!USART_GetFlagStatus (USART1,USART_FLAG_TXE));//等待發送完畢
     return data;  
}  

int main( void )
{    u16 adc1_value=0;
    float value=0;
    Adc_Init(); 
    Usart_Init();
    while(1)
    {
         ADC_SoftwareStartConv(ADC1); //開啟軟體轉換

         while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));//等待轉換結束
         ADC_ClearFlag(ADC1,ADC_FLAG_EOC);//清除對應標誌
         adc1_value=ADC_GetConversionValue(ADC1); //獲取轉換值
         value=1.225*4096/adc1_value; //單位V
printf("ad=%fV\r\n",value); 

    }}

IAR用printf輸出與keil設定不太一樣,首先當然先要包含標頭檔案"stdio.h",然後改寫putchar函式

在IAR開發環境中進行如下配置:

(1)右擊Demo-Debug選擇option


(2)在Options中將Library Configuration改成Full

IAR <wbr>STM8串列埠printf輸出

(3)在Library Options中將Printf formatter改成Large即可

IAR <wbr>STM8串列埠printf輸出

(4)完成上述設定後編譯整個工程,然後下載程式到STM8L15x板子中並進入到Debug除錯環境中,點選View->Terminal I/O調出虛擬終端,然後全部執行,就可以在Terminal視窗中看到列印資訊