瑞萨 RA4E2系列MCU为基于 ARM Cortex-M4,通常使用瑞萨的 FSP (Flexible Software Package) 进行开发。串口初始化可以通过图形化配置工具(e2 studio / FSP SmartConfigurator)自动生成代码,也可以手动编写底层驱动代码——好久没有使用寄存器编写了。
在 RA4E2 中,串口是由 SCI (Serial Communication Interface) 模块实现,这点与STM32或国内芯片大不相同。在使用 FSP 时,需要先在 configuration.xml 中配置GPIO与UART stack,然后使用生成的句柄进行初始化和操作。
FSP 的 UART 驱动通常采用异步中断方式,因此需要定义一个回调函数来处理发送完成或接收数据事件。
volatile bool uart_tx_complete_flag = false;
/**
* @brief UART 回调函数
* @param p_args 回调参数指针
*/
void user_uart_callback(uart_callback_args_t * p_args)
{
switch (p_args->event)
{
case UART_EVENT_TX_COMPLETE:
uart_tx_complete_flag = true;
break;
case UART_EVENT_RX_CHAR:
break;
default:
break;
}
}在 hal_entry() 中调用初始化并测试。
void hal_entry(void)
{
fsp_err_t err;
err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
if (FSP_SUCCESS != err)
{
while(1);
}
const char *test_msg = "Hello RA4E2 UART\r\n";
uint8_t *p_data = (uint8_t *)test_msg;
uint32_t data_len = strlen(test_msg);
/* 非阻塞发送 */
err = R_SCI_UART_Write(&g_uart9_ctrl, p_data, data_len);
if (FSP_SUCCESS == err)
{
while (!uart_tx_complete_flag)
{
/* wait for byte */
;
}
uart_tx_complete_flag = false; // 清除标志位
}
/* 主循环 */
while (1)
{
R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS);
}
}使用图形化配置工具与瑞萨提供的底层驱动库函数来实现项目吧!寄存器配置这种古老的实现方式还是让其成为历史吧!
我要赚赏金
