这样啊,太深的东西我还不太懂,我照着例程对比网上的例子改成了如下程序:
主要功能:每当传输超过50个或者存在换行时,将串口接受的字符串保存起来供其他程序使用
想请大佬提点建议
[C] 纯文本查看 复制代码 char USART_ReceiveData[50];
char ReceiveData_save[50];
char esp_to_UART[50];
int Receive_sum = 0;
uint8_t read;
/* 定义一个串口函数,简化后续代码
串口接收最大50位的字符串,并输出相应信息
判断GPIO引脚是否有效按下
*/
char * uart_reseive_user(COM_PORT_E _ucPort)
{
while (comGetChar(_ucPort, &read))
{
int receive_over = 1;
Receive_sum ++;
bsp_LedToggle(2);
USART_ReceiveData[Receive_sum-1] = read;
if (Receive_sum > 49)
{
USART_ReceiveData[49] = '\0';
comSendBuf(_ucPort, (uint8_t *)"Over_Size\r\n", strlen("Over_Size\r\n"));
receive_over = 0;
}
if(USART_ReceiveData[Receive_sum-2] == '\r' && USART_ReceiveData[Receive_sum-1] == '\n' )
{
USART_ReceiveData[Receive_sum-1] = '\0';
USART_ReceiveData[Receive_sum-2] = '\0'; //接收标志位置1,停止接收数据
comSendBuf(_ucPort, (uint8_t *)USART_ReceiveData, strlen(USART_ReceiveData));
receive_over = 0;
}
if(Receive_sum == 50 || receive_over == 0)
{
memset(ReceiveData_save, 0, sizeof ReceiveData_save);
strcpy(ReceiveData_save,USART_ReceiveData);
memset(USART_ReceiveData, 0, sizeof USART_ReceiveData);
Receive_sum =0;
}
}
return ReceiveData_save;
}
|