【瑞萨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]