介绍
开发环境:IAR FOR ARM 9.30.1
RASC V4.3.0
芯片型号:R7FA2L1AB2DFL#AA0
功能描述
在串口+DTC功能时无法得知接收一帧数据是否接收结束。本例程配合ELC功能联动定时器来判断串口接收字节与字节之间超时来判断一帧数据的接收完成。
主要内容
1、新建RASC工程
如下图所示:
2、安装好RASC
默认安装目录:
C:\Renesas\RA\sc_v2023-01_fsp_v4.3.0\
双击
运行RASC
3、打开后如下图所示:
4、新建工程
5、配置串口PIN脚功能
6、添加串口功能
7、添加串口dtc收发功能
8、配置串口属性
9、添加定时器
10、配置定时器
这里以超时时间为2ms为例,用户可以根据实际情况超时时间。
11、添加ELC
12、所需外设都已经配置好,生成IAR工程
13、打开IAR工程
14、在hal_entry.c文件添加如下代码:
#define TRANSFER_LENGTH 512 transfer_properties_t uart0_dtcinfo1; typedef struct sf_uart_conf { uint8_t uart_txflag; //发送标志 uint8_t uart_rxflag; //接收标志 uint16_t uart_txlen; //发送长度 uint16_t uart_rxlen; //接收长度 uint8_t uart_rxbuf[TRANSFER_LENGTH]; //接收buf uint8_t uart_txbuf[TRANSFER_LENGTH]; //发送buf } sf_uart_conf_t; sf_uart_conf_t uart0;
//2ms定时器0回调函数 void uart0_rxtimeout_cb( timer_callback_args_t* p_args ) { if ( TIMER_EVENT_CYCLE_END == p_args->event ) { //关定时器0 ( void ) R_GPT_Stop( &g_timer0_ctrl ); //获取串口0 接收DTC信息 R_DTC_InfoGet( &g_transfer1_ctrl, &uart0_dtcinfo1 ); //计算串口0接收长度 uart0.uart_rxlen = TRANSFER_LENGTH - uart0_dtcinfo1.transfer_length_remaining; //置发送标志 uart0.uart_rxflag = 1; } }
void hal_entry(void) { /* TODO: add your own code here */ //初始化定时器0 2ms间隔中断 R_GPT_Open( &g_timer0_ctrl, &g_timer0_cfg ); //初始化串口0 R_SCI_UART_Open( &g_uart0_ctrl, &g_uart0_cfg ); //初始化ELC联动 R_ELC_Open( &g_elc_ctrl, &g_elc_cfg ); //使能ECL R_ELC_Enable( &g_elc_ctrl ); //使能定时器0 ( void ) R_GPT_Enable( &g_timer0_ctrl ); //智串口0发送标志 uart0.uart_txflag = 1; while ( true ) { if ( uart0.uart_rxflag ) { uart0.uart_rxflag = 0; uart0.uart_txlen = uart0.uart_rxlen; R_SCI_UART_Write( &g_uart0_ctrl, uart0.uart_rxbuf, uart0.uart_txlen ); } if ( uart0.uart_txflag ) { uart0.uart_txflag = 0; R_SCI_UART_Read( &g_uart0_ctrl, uart0.uart_rxbuf, TRANSFER_LENGTH ); } } #if BSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter(); #endif }
15、仿真测试如下图所示:
结论
该方式没有问题,可以正常应用到开发中。
全部0条评论
快来发表一下你的评论吧 !