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)#endifPUTCHAR_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_HEADERvoid R_BSP_WarmStart(bsp_warm_start_event_t event);FSP_CPP_FOOTERfsp_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)#endifPUTCHAR_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}
效果演示: