[嵌入式linux] RA4M2+串口

[复制链接]
 楼主| 发表于 2025-6-2 16:43 | 显示全部楼层 |阅读模式
物理层聚焦于通信系统中具备机械、电子功能部分的特性,保障原始数据在物理媒介上的传输;协议层则主要规范通信逻辑,统一收发双方的数据打包与解包标准。
串口通讯结构图在上面的通讯方式中,两个通讯设备的“DB9接口”之间通过串口信号线建立起连接,串口信号线中使用“RS-232标准”传输数据信号。由于RS-232电平标准的信号不能直接被控制器直接识别,所以这些信号会经过一个“电平转换芯片”转换成控制器能识别的“TTL标准”的电平信号,才能实现通讯。


原理图:
输出结果:
代码:
  1. /* 调试串口 UART4 初始化 */
  2. void Debug_UART4_Init(void)
  3. {
  4.    fsp_err_t err = FSP_SUCCESS;

  5.    err = R_SCI_UART_Open (&g_uart4_ctrl, &g_uart4_cfg);
  6.    assert(FSP_SUCCESS == err);
  7. }
回调:
  1. /* 发送完成标志 */
  2. volatile bool uart_send_complete_flag = false;

  3. /* 串口中断回调 */
  4. void debug_uart4_callback (uart_callback_args_t * p_args)
  5. {
  6.    switch (p_args->event)
  7.    {
  8.       case UART_EVENT_RX_CHAR:
  9.       {
  10.             /* 把串口接收到的数据发送回去 */
  11.             R_SCI_UART_Write(&g_uart4_ctrl, (uint8_t *)&(p_args->data), 1);
  12.             break;
  13.       }
  14.       case UART_EVENT_TX_COMPLETE:
  15.       {
  16.             uart_send_complete_flag = true;
  17.             break;
  18.       }
  19.       default:
  20.             break;
  21.    }
  22. }
重定向:
  1. /* 重定向 printf 输出 */
  2. #if defined __GNUC__ && !defined __clang__
  3. int _write(int fd, char *pBuffer, int size); //防止编译警告
  4. int _write(int fd, char *pBuffer, int size)
  5. {
  6.    (void)fd;
  7.    R_SCI_UART_Write(&g_uart4_ctrl, (uint8_t *)pBuffer, (uint32_t)size);
  8.    while(uart_send_complete_flag == false);
  9.    uart_send_complete_flag = false;

  10.    return size;
  11. }
  12. #else
  13. int fputc(int ch, FILE *f)
  14. {
  15.    (void)f;
  16.    R_SCI_UART_Write(&g_uart4_ctrl, (uint8_t *)&ch, 1);
  17.    while(uart_send_complete_flag == false);
  18.    uart_send_complete_flag = false;

  19.    return ch;
  20. }
  21. #endif

串口助手输出结果:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

3

帖子

0

粉丝
快速回复 返回顶部 返回列表