×
嵌入式 > 技术百科 > 详情

STM8 UART2

发布时间:2020-06-17 发布时间:
|

#include"stm8s.h"

#include"stm8s_conf.h"

#include"UART2.h"

#include"stdarg.h"

 

void    UART2_Config(u32 Rate)

{

      CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1,     ENABLE);

      GPIO_Init(UART2_PORT,    TX2_PIN,     GPIO_MODE_OUT_PP_LOW_FAST);

      GPIO_Init(UART2_PORT,    RX2_PIN,     GPIO_MODE_IN_PU_NO_IT);

      UART2_Init(Rate, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO, UART2_SYNCMODE_CLOCK_DISABLE, UART2_MODE_TXRX_ENABLE);

      UART2_ITConfig(UART2_IT_RXNE_OR,ENABLE);

      UART2_Cmd(ENABLE);

}

 

void    UART2_SendByte(u8 Byte)

{

      while(!(UART2->SR & TC)); 

      UART2->DR = Byte;

}

 

#pragma vector =ITC_IRQ_UART2_RX + 2

__interrupt void   UART2_IRQHandler(void)

    u8  Temp;

    if(UART2->SR & UART2_SR_RXNE)

    {

       Temp  =UART2->DR;

       UART2->SR = ~UART2_SR_RXNE;

       UART2_SendByte(Temp);

    }   

}

 

char   * UART2_itoa(int value, char *string, int radix)

{

    int     i, d;

    int     flag = 0;

    char    *ptr = string;

    /* This implementation only works for decimal numbers. */

    if (radix != 10)

    {

        *ptr = 0;

        return string;

    }

 

    if (!value)

    {

        *ptr++ = 0x30;

        *ptr = 0;

        return string;

    }

 

    /* if this is a negative value insert the minus sign. */

    if (value < 0)

    {

        *ptr++ = '-';

 

        /* Make the value positive. */

        value *= -1;

    }

 

    for (i = 10000; i > 0; i /= 10)

    {

        d = value / i;

 

        if (d || flag)

        {

            *ptr++ = (char)(d + 0x30);

            value -= (d * i);

            flag = 1;

        }

    }

 

    /* Null terminate the string. */

    *ptr = 0;

    return string;

}

void UART2_Printf(u8 *Data,...)

    const char *s;

    int d;

    char buf[16];

    va_list ap;

    va_start(ap, Data);

 

while(*Data!=0){                          //判断是否到达字符串结束符

if(*Data==0x5c){  //'\'

switch (*++Data){

case 'r':          //回车符

UART2_SendByte(0x0d);   

 

Data++;

break;

case 'n':          //换行符

UART2_SendByte(0x0a);

Data++;

break;

default:

Data++;

   break;

}

 

}

else if(*Data=='%'){  //

switch (*++Data){

case 's':  //字符串

                s = va_arg(ap, const char *);

                for ( ; *s; s++) {

                    UART2_SendByte(*s);

                }

Data++;

                break;

            case 'd':  //十进制

                d = va_arg(ap, int);

                UART2_itoa(d, buf, 10);

                for (s = buf; *s; s++) {

                    UART2_SendByte(*s);

                }

Data++;

                break;

default:

Data++;

   break;

}  

}

else UART2_SendByte(*Data++);

}

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
无人机新突破:或将利用手机发射塔追踪无人机