Share stm32 serial port printing function

Publisher:HuanleLatest update time:2017-11-19 Source: eefocusKeywords:stm32 Reading articles on mobile phones Scan QR code
Read articles on your mobile phone anytime, anywhere

Share a stm32 serial port printing function. If the printf function takes up a lot of memory and needs to be redirected, the following method can be used to simply print basic information such as debugging information, which can be directly copied and used.

/**********************************************************
                Integer data to string function
        char *itoa(int value, char *string, int radix)
                radix=10 indicates decimal, not decimal, the conversion result is 0;  

            Example: d=-379;
                After executing itoa(d, buf, 10);
                
                buf="-379"                                                                                     
**********************************************************/
char *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;

} /* NCL_Itoa */


/********************************************************************************
* Name: void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...)
* Function: Format serial port output function
* Input parameter: USARTx: Specify serial port
                        Data: Send array
                        ...: Undefined parameter
* Output parameter: None
* Description: Format serial port output function
                "\r" Carriage return USART_OUT(USART1, "abcdefg\r")   
                        "\n" Line feed USART_OUT(USART1, "abcdefg\r\n")
                        "%s" String USART_OUT(USART1, "The string is: %s","abcdefg")
                        "%d" Decimal USART_OUT(USART1, "a=%d",10)
* Calling method: None 
************************************************************************/
void USART_OUT(USART_TypeDef* USARTx, char *Data,...)
{
        const char *s;
    int d;
    char buf[16];
// uint8_t *Data = pData;
    va_list ap;
    va_start(ap, Data);

        while(*Data!=0)
        {        
                                                          //Judge whether the end of the string has been reached
                if(*Data==0x5c)
                { //'\'
                        switch (*++Data)
                        {
                                case 'r': //Carriage return character
                                        USART_SendData(USARTx, 0x0d);           

                                        Data++;
                                        break;
                                case 'n': //Line feed character
                                        USART_SendData(USARTx, 0x0a);        
                                        Data++;
                                        break;
                                
                                default:
                                        Data++;
                                    break;
                        }
                }
                else if(*Data=='%')
                { //
                        switch (*++Data)
                        {                                
                                case 's': //String
                        s = va_arg(ap, const char *);
                        for ( ; *s; s++)
                                        {
                            USART_SendData(USARTx,*s);
                                                while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
                        }
                                        Data++;
                        break;
                    case 'd': //Decimal
                        d = va_arg(ap, int);
                        itoa(d, buf, 10);
                        for (s = buf; *s; s++) 
                                        {
                            USART_SendData(USARTx,*s);
                                                while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
                        }
                                        Data++;
                        break;
                                default:
                                        Data++;
                                    break;
                        }                 
                }
                else USART_SendData(USARTx, *Data++);
                while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
        }
}

Keywords:stm32 Reference address:Share stm32 serial port printing function

Previous article:No such file or directory problem occurs when running an executable program on ARM
Next article:STM32 TFT-LCD liquid crystal learning

Latest Microcontroller Articles
Change More Related Popular Components

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号