PSoC 之重定向printf

目录

重定向printf方法

usart简单配置


IDE版本:PSoC Creator 4.4

本文根据PSoc官方文档描述了如何重定向printf的方法以及如何使用PSoC配置USART,如果不知道如何配置USART可以往下看USART配置方法。

重定向printf方法

Printf()函数使用模型
printf()函数格式化一系列字符串和数值,并构建一个写入输出流的字符串。该函数可以与UART结合使用,以简化数据的格式化和传输。本节描述允许在UART组件中使用printf()函数所需的代码。

printf()函数在不同的编译器中有不同的实现。每个编译器都提供了一个负责发送数据的函数。下面列出了支持的编译器的这些函数:

CompilerFunction
GCC_write()
MDK     fputc()
RVDSfputc()
IAR__write()

应用程序应该修改这些函数,以调用通信组件API,通过选定的接口(在本例中是UART接口)发送数据。

下面的代码示例SCB UART组件使用了一个名为"SCB"的示例名:

#include <project.h>
#include <stdio.h>

#if defined (__GNUC__)
    /* Add an explicit reference to the floating point printf library to allow
       the usage of floating point conversion specifier. */
    asm (".global _printf_float");

    /* For GCC compiler revise _write() function for printf functionality */
    int _write(int file, char *ptr, int len)
    {
        int i;
        for (i = 0; i < len; i++)
        {
            SCB_UartPutChar(*ptr++);
        }
        return(len);
    }

#elif defined(__ARMCC_VERSION)
    /* For MDK/RVDS compiler revise fputc() function for printf functionality */
    struct __FILE
    {
        int handle;
    };

    enum
    {
        STDIN_HANDLE,
        STDOUT_HANDLE,
        STDERR_HANDLE
    };

    FILE __stdin = {STDIN_HANDLE};
    FILE __stdout = {STDOUT_HANDLE};
    FILE __stderr = {STDERR_HANDLE};

    int fputc(int ch, FILE *file)
    {
        int ret = EOF;

        switch(file->handle)
        {
            case STDOUT_HANDLE:
                SCB_UartPutChar(ch);
                ret = ch;
                break;

            case STDERR_HANDLE:
                ret = ch;
                break;

            default:
                file = file;
                break;
        }

        return(ret);
    }

#elif defined (__ICCARM__)
    /* For IAR compiler revise __write() function for printf functionality */
    size_t __write(int handle, const unsigned char * buffer, size_t size)
    {
        size_t nChars = 0;

        for (/* Empty */; size != 0; --size)
        {
            SCB_UartPutChar(*buffer++);
            ++nChars;
        }

        return (nChars);
    }

#endif /* (__GNUC__) */


int main()
{
    uint32 i = 444444444;
    float f = 55.555f;

    CyGlobalIntEnable; /* Enable interrupts */
    SCB_Start(); /* Start communication Component */

    /* Use printf() function which will send formatted data through
    * UART (SCB mode) */
    printf("Test printf function. long: %ld, float: %f \n",i,f);

    for(;;)
    {
        /* Place your application code here. */
    }
}

(以上示例中描述了之前提到的四种编译器的重定向printf方法,可根据需要删减不需要的部分)

usart简单配置

(真的只是简单配置一下)

2.左侧找到TopDesign.cysch打开

3.在右侧Communications中找到UART(SCB mode)

4.修改想要的控件名

5.调整需要的参数

6.右侧打开Design Wide Resources

7.将右侧的控件拖选到需要配置的引脚上

8.点击左上角编译按钮,完成

以上配置完成后USART就算配置好了,可以继续回去看printf重定向教程了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值