05 瑞萨RA系列 串口的输入输出(解决浮点数无法打印问题)
串口的配置
FSP配置
1.在FSP配置界面中 在Pins中先配置相关引脚
2…FSP配置界面中 在satcks中新建一个串口模块
3.修改串口的属性卡 如果不需要接收数据数据 可以不配置中断
4.如果要使用peintf进行输出 需要在bsp中配置Heap size 为0x1000
配置完以后就可以生成代码
代码编写
初始化代码编写
关于串口的初始化配置 只需要调用R_SCI_UART_Open()即可
void Debug_UART4_Init(void)
{
fsp_err_t err = FSP_SUCCESS;
err = R_SCI_UART_Open (&g_uart4_ctrl, &g_uart4_cfg);
assert(FSP_SUCCESS == err);
}
printf重定向代码
必须要进行bsp的Heap size 为0x1000 设置!!!!!
/* 重定向 printf 输出 */
#if defined __GNUC__ && !defined __clang__
int _write(int fd, char *pBuffer, int size); //防止编译警告
int _write(int fd, char *pBuffer, int size)
{
(void)fd;
R_SCI_UART_Write(&g_uart4_ctrl, (uint8_t *)pBuffer, (uint32_t)size);
while(uart_send_complete_flag == false);
uart_send_complete_flag = false;
return size;
}
#else
int fputc(int ch, FILE *f)
{
(void)f;
R_SCI_UART_Write(&g_uart4_ctrl, (uint8_t *)&ch, 1);
while(uart_send_complete_flag == false);
uart_send_complete_flag = false;
return ch;
}
#endif
串口的中断回调函数
主要用于接收数据、判断是否发生完成
/* 发送完成标志 */
volatile bool uart_send_complete_flag = false;
void debug_uart4_callback (uart_callback_args_t * p_args)
{
switch (p_args->event)
{
case UART_EVENT_RX_CHAR:
{
/* 把串口接收到的数据发送回去 */
R_SCI_UART_Write(&g_uart4_ctrl, (uint8_t *)&(p_args->data), 1);
break;
}
case UART_EVENT_TX_DATA_EMPTY:
{
uart_send_complete_flag = true;
break;
}
default:
break;
}
}
串口的输出
编写好相关代码后 在主函数调用初始化,就可以愉快的使用printf进行输出
串口的输入
在回调函数中处理 瑞萨没有空闲中断
关于浮点数无法打印问题
需要打开浮点数输出功能
1.点击c/c++ project setting
2.打开浮点数输出功能即可