• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

RA生态:串口和printf()函数重定向

武飞扬头像
衾许°
帮助1

UART 配置:点击 Stacks->New Stack -> Connectivity -> UART Driver on r_sci_uart

学新通改的地方就上面一处,其他地方默认即可,默认串口配置:115200波特率,无校验一停止通道0

R_SCI_UART_Open()函数:开启和初始化 UART

/* Open the transfer instance with initial configuration. */
fsp_err_t err = R_SCI_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);
assert(FSP_SUCCESS == err);

回调函数 user_uart_callback ():(函数名自定义):相当于串口中断,在这里的案例是接收中断

volatile bool uart_send_complete_flag = false ;
void user_uart_callback (uart_callback_args_t * p_args)
{
        if (p_args-> event == UART_EVENT_TX_COMPLETE)
        {
                uart_send_complete_flag = true ;
        }
}

 R_SCI_UART_Write()函数:进行串口数据输出

unsigned char buff[]= "RA E2STUDIO" ;
uint8_t buff_len = strlen (buff);
err = R_SCI_UART_Write(&g_uart0_ctrl, buff, buff_len);
if (FSP_SUCCESS != err) __BKPT();
while (uart_send_complete_flag == false ){}
uart_send_complete_flag = false ;

 sprintf()函数:这个应该很多人用过了吧

直接给功能示例了:把格式化的数据写入某个字符串缓冲区

sprintf (send_buff, "\nHello World!.\n" );
uint8_t len = strlen (send_buff);
err = R_SCI_UART_Write(&g_uart0_ctrl, send_buff, len);
if (FSP_SUCCESS != err) __BKPT();
while (uart_send_complete_flag == false ){}
uart_send_complete_flag = false ;
memset (send_buff, '\0' , sizeof ( 100 ));

 printf()函数:

式样化输出函数, 一般用于向准则输出设备按规定式样输出消息。
正在编写步骤时经常会用到此函数

 设置 E2STUDIO 堆栈:BSP处设置

( RA-Eco-RA2L1-48PIN-V1.0 设置 heap size
0x2000 )
( RA-Eco-RA2E1-48PIN-V1.0 设置 heap size
0x1000 )

 学新通

 printf 输出重定向到串口:将 printf 的输出重定向到串口, 然后通过串口将数据发送出去

#ifdef __GNUC__                 //串口重定向
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
        err = R_SCI_UART_Write(&g_uart0_ctrl, ( uint8_t *)&ch, 1 );
        if (FSP_SUCCESS != err) __BKPT();
        while (uart_send_complete_flag == false ){}
        uart_send_complete_flag = false ;
        return ch;
}
int _write( int fd, char *pBuffer, int size)
{
        for ( int i= 0 ;i<size;i )
        {
        __io_putchar(*pBuffer );
        }
return size;
}

 printf 输出

int int_i= 55 ;
float float_i= 66.20f ;
char char_i[]= "hello e2studio" ;
while ( 1 )
{
        printf ( "int_i=%d\n" ,int_i);
        printf ( "float_i=%.2f\n" ,float_i);
        printf ( "char_i='%s'\n" ,char_i);
        R_BSP_SoftwareDelay( 1000 , BSP_DELAY_UNITS_MILLISECONDS); // NOLINT100->160
}

 完整例程:

#include "hal_data.h"
#include <stdio.h>
FSP_CPP_HEADER
void R_BSP_WarmStart ( bsp_warm_start_event_t event);
FSP_CPP_FOOTER
fsp_err_t err = FSP_SUCCESS ; unsigned char send_buff[100];
volatile bool uart_send_complete_flag = false;
void user_uart_callback ( uart_callback_args_t * p_args)
{
        if (p_args->event == UART_EVENT_TX_COMPLETE )
        {
                uart_send_complete_flag = true;
        }
}
#ifdef __GNUC__                 // 串口重定向
#define PUTCHAR_PROTOTYPE int __io_putchar( int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc( int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
        err = R_SCI_UART_Write(&g_uart0_ctrl, ( uint8_t *)&ch, 1);
        if ( FSP_SUCCESS != err) __BKPT();
        while (uart_send_complete_flag == false){}
        uart_send_complete_flag = false;
        return ch;
}
int _write ( int fd, char *pBuffer, int size)
{
        for ( int i=0;i<size;i )
        {
                __io_putchar(*pBuffer );
        }
        return size;
}
void hal_entry ( void )
{
        /* TODO : add your own code here */
        /* Open the transfer instance with initial configuration. */
        err = R_SCI_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);
        assert( FSP_SUCCESS == err);
        unsigned char buff[]= "RA E2STUDIO" ;
        uint8_t buff_len = strlen (buff);
        err = R_SCI_UART_Write(&g_uart0_ctrl, buff, buff_len);
        if ( FSP_SUCCESS != err) __BKPT();
        while (uart_send_complete_flag == false){}
        uart_send_complete_flag = false;
        sprintf (send_buff, "\nHello World!.\n" );
        uint8_t len = strlen (send_buff);
        err = R_SCI_UART_Write(&g_uart0_ctrl, send_buff, len); if ( FSP_SUCCESS != err)         __BKPT();
        while (uart_send_complete_flag == false){}
        uart_send_complete_flag = false;
        memset (send_buff, '\0' , sizeof (100));
        int int_i=55;
        float float_i=66.20f;
        char char_i[]= "hello e2studio" ;
        while (1)
        {
                printf ( "int_i=%d\n" ,int_i);
                printf ( "float_i=%.2f\n" ,float_i);
                printf ( "char_i='%s'\n" ,char_i);
                R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS );
                // NOLINT100->160
        }
        #if BSP_TZ_SECURE_BUILD
        /* Enter non-secure code */
        R_BSP_NonSecureEnter();
        #endif
}

效果演示:

 学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgjicih
系列文章
更多 icon
同类精品
更多 icon
继续加载