介紹
RASC V4.3.0
芯片型號:R7FA2L1AB2DFL#AA0
功能描述
在串口+DTC功能時無法得知接收一幀數據是否接收結束。本例程配合ELC功能聯動定時器來判斷串口接收字節與字節之間超時來判斷一幀數據的接收完成。
主要內容
1新建RASC工程
RASC v4.3.0下載鏈接:
https://github.com/renesas/fsp/releases
如下圖所示:
2安裝好RASC
默認安裝目錄:
C:RenesasRAsc_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 uart0isr_cb( uart_callback_args_t* p_args ) { /* Handle the UART event */ switch ( p_args->event ) { /* Received a character */ case UART_EVENT_RX_CHAR: { break; } /* Receive complete */ case UART_EVENT_RX_COMPLETE: { break; } /* Transmit complete */ case UART_EVENT_TX_COMPLETE: { //置串口0發送完成標志,清接收標志 uart0.uart_rxflag = 0; uart0.uart_txflag = 1; break; } default: { } } }
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
仿真測試如下圖所示:
結論
該方式沒有問題,可以正常應用到開發中。
審核編輯:湯梓紅
-
ARM
+關注
關注
134文章
8964瀏覽量
364974 -
定時器
+關注
關注
23文章
3218瀏覽量
113663 -
IAR
+關注
關注
5文章
339瀏覽量
36494 -
串口
+關注
關注
14文章
1533瀏覽量
75439 -
數據接收
+關注
關注
0文章
11瀏覽量
7803
原文標題:基于RA2L1實現串口DTC數據接收
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論