我现在手里有一个项目涉及到串口转发的问题:
平 台:STM32F417IGHX
开发平台:keil5.0
库 文 件:HAL库
需要的应用方法:
现有有一个外部设备(115200,8,1),通过串口与单片机的串口2通过TTL直接连接,我要实现的是将串口2的数据直接转发到串口1(115200,8,1),将串口1的数据直接转发的串口2。
实现时,不采用中断,DMA,直接对数据进行转发,且单片机不作其它操作
代码如下:
..............
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1|GPIO_PIN_0, GPIO_PIN_RESET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1|GPIO_PIN_0, GPIO_PIN_SET);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
while(1)
{
huart1ToHuart2_up();
huart2ToHuart1_up();
}
}
............
void huart1ToHuart2_up(void)
{
unsigned char temp;
if(RESET != __HAL_UART_GET_FLAG(&huart1,UART_FLAG_ORE))
{
HAL_UART_Receive(&huart1,&temp,1,0x0);
__HAL_UART_CLEAR_FLAG(&huart1,UART_FLAG_ORE);
}
if(RESET != __HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE))
{
HAL_UART_Receive(&huart1,&temp,1,0x0);
HAL_UART_Transmit(&huart2,&temp,1,0x0);
__HAL_UART_CLEAR_FLAG(&huart2,UART_FLAG_TC);
}
}
void huart2ToHuart1_up(void)
{
unsigned char temp;
if(RESET != __HAL_UART_GET_FLAG(&huart2,UART_FLAG_ORE))
{
HAL_UART_Receive(&huart2,&temp,1,0x0);
__HAL_UART_CLEAR_FLAG(&huart2,UART_FLAG_ORE);
}
if(RESET != __HAL_UART_GET_FLAG(&huart2,UART_FLAG_RXNE))
{
HAL_UART_Receive(&huart2,&temp,1,0);
HAL_UART_Transmit(&huart1,&temp,1,0x0);
__HAL_UART_CLEAR_FLAG(&huart1,UART_FLAG_TC);
}
}
现的问题:
转发基本能够完成,但在测试时发现,当发送多个字符串(无法做到等长)串口1向串口2发送数据正常,但串口2向串口1发送时出现丢数一般的固定丢10到11个字节。
由于串口2是外部设备的升级口,在使用时可能会由串口1向串口2发送大量的数据(速率比较快)!
寻求大佬的帮助:
1、这种应用有没有其它更好的方法;
2、上述现象出现的问题是什么引起的,有没解决的办法。
|