新手入门
- 积分
- 9
- 金钱
- 9
- 注册时间
- 2023-3-7
- 在线时间
- 2 小时
|
2金钱
求救!!!!!急急急!!!
新手没有太多币,求大佬帮助!!!
最近在进行大疆payload开发,用的是rtos系统,里面代码用的是hal库相关
目前需求是我向uart4发送查询命令,然后uart4会返回8段数据,每段数据开头是有规律的多个字节,但是结尾标志是0x01,这个字节在中间也会出现多次
我需要把从uart4接收到的数据发送到uart3,经过尝试并不能完全接收,在接收端每次只接收到几段就没了(比如8段只接收了3段),下面放下我写的代码,求大佬指导
初始化:
void uart_init(u32 bound)
{
UART4_Handler.Instance = UART4;
UART4_Handler.Init.BaudRate = bound;
UART4_Handler.Init.WordLength = UART_WORDLENGTH_8B;
UART4_Handler.Init.StopBits = UART_STOPBITS_1;
UART4_Handler.Init.Parity = UART_PARITY_NONE;
UART4_Handler.Init.HwFlowCtl = UART_HWCONTROL_NONE;
UART4_Handler.Init.Mode = UART_MODE_TX_RX;
UART4_Handler.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&UART4_Handler);
__HAL_UART_ENABLE_IT(&UART4_Handler, UART_IT_RXNE);
__HAL_UART_ENABLE_IT(&UART4_Handler, UART_IT_IDLE);
//HAL_UART_Receive_IT(&UART4_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE);
}
UART4_TX_GPIO_CLK_ENABLE();
UART4_RX_GPIO_CLK_ENABLE();
/* Enable USART clock */
__HAL_RCC_UART4_CLK_ENABLE();
/*##-2- Configure peripheral GPIO ##########################################*/
/* UART TX GPIO pin configuration */
GPIO_InitStruct.Pin = UART4_TX_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
GPIO_InitStruct.Alternate = UART4_TX_AF;
HAL_GPIO_Init(UART4_TX_GPIO_PORT, &GPIO_InitStruct);
/* UART RX GPIO pin configuration */
GPIO_InitStruct.Pin = UART4_RX_PIN;
GPIO_InitStruct.Alternate = UART4_RX_AF;
HAL_GPIO_Init(UART4_RX_GPIO_PORT, &GPIO_InitStruct);
/*##-3- Configure the NVIC for UART ########################################*/
/* NVIC for UART4 */
HAL_NVIC_SetPriority(UART4_IRQn, UART4_IRQ_PRIO_PRE, UART4_IRQ_PRIO_SUB);
HAL_NVIC_EnableIRQ(UART4_IRQn);
中断函数:
void UART4_IRQHandler(void)
{
if((__HAL_UART_GET_FLAG(&UART4_Handler,UART_FLAG_RXNE)!=RESET))
{
if(USART_RX_OK==0)
{
USART_RX_BUF[USART_RX_STA] = UART4_Handler.Instance->DR;
USART_RX_STA++;
__HAL_UART_CLEAR_FLAG(&UART4_Handler,UART_FLAG_RXNE);
}
}
else if(__HAL_UART_GET_FLAG(&UART4_Handler,UART_FLAG_IDLE)!=RESET)
{
__HAL_UART_CLEAR_IDLEFLAG(&UART4_Handler);
USART_RX_OK=1;
}
HAL_UART_IRQHandler(&UART4_Handler);
}
任务里循环判断发送:
void uart4_Task(void const *argument)
{
T_DjiReturnCode djiStat;
E_DjiChannelAddress channelAddress;
while(1)
{
if(USART_RX_OK==1)
{
channelAddress = DJI_CHANNEL_ADDRESS_MASTER_RC_APP;
djiStat = DjiLowSpeedDataChannel_SendData(channelAddress, USART_RX_BUF, USART_RX_STA);
if (djiStat == DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
USART_RX_STA=0;
USART_RX_OK=0;
}
}
vTaskDelay(10);
}
}
求救!!!!!急急急!!!
|
|