|
瑞萨 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;
- /**
- * [url=/u/brief]@brief[/url] 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);
- }
- }
使用图形化配置工具与瑞萨提供的底层驱动库函数来实现项目吧!寄存器配置这种古老的实现方式还是让其成为历史吧!
|