来一点百度里的解释:
串口是显控设备与信号处理板之间通信的主要接口,也是显控设备与其他设备、设备与设备之间的协议数据帧通信传输的重要接口。 [2] 串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。串口通信协议是基于串口使得通信双方能够相互沟通信息的一种约定,其定义了双方遵循的协议数据帧格式和其传输方式。 [2] 在串口通信中,常用的协议包括RS-232、RS-422和RS-485。
数据通讯方向
数据通讯的同步方式
物理层
硬件连接:
连接在MCU的P110,P109的GPIO上。
相关代码:
进去就打印RA4 开始:
printf("RA4 START");
初始化:
fsp_err_t err = FSP_SUCCESS;
err = R_SCI_UART_Open (&g_uart_ctrl, &g_uart_cfg);
if (FSP_SUCCESS != err)
{
APP_ERR_PRINT ("\r\n** R_SCI_UART_Open API failed **\r\n");
}
return err;
串口回调:
g_uart_event = (uint8_t)p_args->event;
if(DATA_LENGTH == g_counter_var)
{
g_counter_var = RESET_VALUE;
}
if(UART_EVENT_RX_CHAR == p_args->event)
{
switch (p_args->data)
{
case CARRIAGE_ASCII:
{
g_counter_var = RESET_VALUE;
g_data_received_flag = true;
break;
}
default:
{
g_temp_buffer[g_counter_var++] = (uint8_t ) p_args->data;
break;
}
}
}
找印涵数:
/* Calculate length of message received */
msg_len = ((uint8_t)(strlen(p_temp_ptr)));
g_uart_event = RESET_VALUE;
err = R_SCI_UART_Write (&g_uart_ctrl, p_msg, msg_len);
if (FSP_SUCCESS != err)
{
APP_ERR_PRINT ("\r\n** R_SCI_UART_Write API Failed **\r\n");
return err;
}
while ((UART_EVENT_TX_COMPLETE != g_uart_event) && (--local_timeout))
{
if (UART_ERROR_EVENTS == g_uart_event)
{
APP_ERR_PRINT ("\r\n** UART Error Event Received **\r\n");
return FSP_ERR_TRANSFER_ABORTED;
}
}
if(RESET_VALUE == local_timeout)
{
err = FSP_ERR_TIMEOUT;
}
return err;
输出结果:
|