打印
[嵌入式linux]

RA4M2+串口

[复制链接]
2711|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
king86|  楼主 | 2025-6-2 16:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
物理层聚焦于通信系统中具备机械、电子功能部分的特性,保障原始数据在物理媒介上的传输;协议层则主要规范通信逻辑,统一收发双方的数据打包与解包标准。
串口通讯结构图在上面的通讯方式中,两个通讯设备的“DB9接口”之间通过串口信号线建立起连接,串口信号线中使用“RS-232标准”传输数据信号。由于RS-232电平标准的信号不能直接被控制器直接识别,所以这些信号会经过一个“电平转换芯片”转换成控制器能识别的“TTL标准”的电平信号,才能实现通讯。


原理图:
输出结果:
代码:
/* 调试串口 UART4 初始化 */
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);
}
回调:
/* 发送完成标志 */
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_COMPLETE:
      {
            uart_send_complete_flag = true;
            break;
      }
      default:
            break;
   }
}
重定向:
/* 重定向 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

串口助手输出结果:

72189683d633904192.png (45.12 KB )

72189683d633904192.png

47495683d6339ae223.png (45.12 KB )

47495683d6339ae223.png

69726683d636eadd30.png (101.4 KB )

69726683d636eadd30.png

31625683d6385b2b54.png (114.03 KB )

31625683d6385b2b54.png

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

3

帖子

0

粉丝