ltbo4b8d6e 发表于 2026-7-14 14:08:18

【瑞萨RA-eco-RA6M4评测】配置串口并打印

本帖最后由 ltbo4b8d6e 于 2026-7-14 15:30 编辑

# 实验目的

**串口的添加,能让** debug 看到相关信息,尝试驱动串口,并且打印 hello 字符串**

# 开发板硬件介绍

!(//m.qjumbo.com/forum/data/attachment/forum/202607/14/140630zg8d4f089px60pgs.jpg)

**P109\\P110 分别对应 TX\\RX**

# FSP 配置

!(//m.qjumbo.com/forum/data/attachment/forum/202607/14/140639qxhhym8oz7obkk5j.jpg)

**先按照硬件配置串口引脚**
!(//m.qjumbo.com/forum/data/attachment/forum/202607/14/140647s7hfcvg8wgq1z3xg.jpg)

**添加串口外设**
!(//m.qjumbo.com/forum/data/attachment/forum/202607/14/140658jfn55b5b3pbpf525.jpg)

**配置串口参数**

# 代码添加

```c
volatile bool uart_send_complete_flag = false;
volatile bool uart_read_complete_flag = false;

void user_uart_callback (uart_callback_args_t * p_args)
{
    switch (p_args->event)
    {
      case UART_EVENT_RX_CHAR:
            {
                //ra6m5_uart_ring_buffer_write(&s_uart_rx_ring_buffer, (uint8_t)p_args->data);
                //read_len++;
                break;
            }
      case UART_EVENT_TX_COMPLETE:
            {
                uart_send_complete_flag = true;
                break;
            }

      case UART_EVENT_RX_COMPLETE:
            {
                //ra6m5_uart_ring_buffer_write(&s_uart_rx_ring_buffer, p_args->data);
                uart_read_complete_flag = true;
                break;
            }
    }
}

int fputc(int ch, FILE *f)
{
    //unuse(f);
    f = NULL;
    fsp_err_t local_err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1);
    if(FSP_SUCCESS != local_err) __BKPT();
    /* 简单超时,避免回调未触发时无限阻塞 */
    volatile uint32_t timeout = 0x1FFFFF;
    while(uart_send_complete_flag == false && timeout--){}
    uart_send_complete_flag = false;
    return ch;
}

int fgetc(FILE *f)
{
    //unuse(f);
    f = NULL;
    uint8_t ch = 0;
    //HAL_UART_Receive(&huart2, &ch, 1, 0xffff);
    fsp_err_t local_err = R_SCI_UART_Read(&g_uart9_ctrl, (uint8_t *)&ch, 1);
    if(FSP_SUCCESS != local_err) __BKPT();
    /* 简单超时,避免回调未触发时无限阻塞 */
    volatile uint32_t timeout = 0x1FFFFF;
    while(uart_read_complete_flag == false && timeout--){}
    uart_read_complete_flag = false;
    return ch;
}

void hal_entry(void)
{
    fsp_err_t err = FSP_SUCCESS;
    /* TODO: add your own code here */
    err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
    assert(FSP_SUCCESS == err);

    err = R_IOPORT_Open(&g_ioport_ctrl, &g_bsp_pin_cfg);
    assert(FSP_SUCCESS == err);

    //printf("hello");
    const uint8_t msg[] = "hello";
    err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)msg, sizeof(msg)-1);
    assert(FSP_SUCCESS == err);
    while(1)
    {

    }
    /* Wake up 2nd core if this is first core and we are inside a multicore project. */
    #if (0 == _RA_CORE) && (1 == BSP_MULTICORE_PROJECT) && !BSP_TZ_NONSECURE_BUILD

    #if BSP_TZ_SECURE_BUILD
    /* Take semaphore so 2nd core can clear it */
    R_BSP_IpcSemaphoreTake(&g_core_start_semaphore);
    #endif

    R_BSP_SecondaryCoreStart();

    #if BSP_TZ_SECURE_BUILD
    /* Wait for 2nd core to start and clear semaphore */
    while(FSP_ERR_IN_USE == R_BSP_IpcSemaphoreTake(&g_core_start_semaphore))
    {
      ;
    }
    #endif
    #endif

    #if (1 == _RA_CORE) && (1 == BSP_MULTICORE_PROJECT) && BSP_TZ_SECURE_BUILD
    /* Signal to 1st core that 2nd core has started */
    R_BSP_IpcSemaphoreGive(&g_core_start_semaphore);
    #endif


    #if BSP_TZ_SECURE_BUILD
    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
    #endif
}
```

# 实验结果

!(//m.qjumbo.com/forum/data/attachment/forum/202607/14/140719oiihmysx32xyb2ao.jpg)

# 实验总结

**开发板的系统时钟需要注意,需要确认是 12M 还是 24M,不理解为啥要这么设计**
!(//m.qjumbo.com/forum/data/attachment/forum/202607/14/140730rzifjyijkxstyt2d.jpg)

页: [1]
查看完整版本: 【瑞萨RA-eco-RA6M4评测】配置串口并打印

Baidu
map