|

楼主 |
发表于 2025-7-8 10:01:21
|
显示全部楼层
/**
* @brief USART1 Initialization Function
* @param None
* @retval None
*/
static void MX_USART1_UART_Init(void)
{
/* USER CODE BEGIN USART1_Init 0 */
/* USER CODE END USART1_Init 0 */
/* USER CODE BEGIN USART1_Init 1 */
/* USER CODE END USART1_Init 1 */
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USART1_Init 2 */
huart_group[0] = huart1; //COM_USER
__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);
//__HAL_DMA_ENABLE_IT(&hdma_usart1_rx,DMA_IT_TC);
HAL_UARTEx_ReceiveToIdle_DMA(&huart1,user_dmarx_buff,DMABUFF_LEN);
__HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);
/* USER CODE END USART1_Init 2 */
}
/**
* @brief Reception Event Callback (Rx event notification called after use of advanced reception service).
* @param huart UART handle
* @param Size Number of data available in application reception buffer (indicates a position in
* reception buffer until which, data are available)
* @retval None
*/
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
uint8_t* buffptr = NULL;
uint8_t com;
bool status;
//uint16_t remaining,rx_length;
//
HAL_UART_DMAStop(huart); // 优先停止DMA传输
//
if (huart->Instance == USART1)
{
buffptr = user_dmarx_buff;
com = COM_USER;
}
else if(huart->Instance == USART2)
{
buffptr = eg916_dmarx_buff;
com = COM_EG916GL;
}
else if(huart->Instance == USART3)
{
buffptr = m992_dmarx_buff;
com = COM_M992INS;
}
else if(huart->Instance == USART6)
{
buffptr = radio_dmarx_buff;
com = COM_M5RADIO;
}
else
{
buffptr = NULL;
}
//
if(buffptr)
{
//HAL_UART_DMAStop(huart); // 停止DMA传输
//remaining = __HAL_DMA_GET_COUNTER(huart->hdmarx);
//rx_length = DMABUFF_LEN - remaining;
//UART_QUE_WRITE(&m_nUART_RXQUE[com],buffptr,rx_length);
UART_QUE_WRITE(&m_nUART_RXQUE[com],buffptr,Size);
uartdeal_queue_item.message_id = com;
//uartdeal_queue_item.param_length= Size;
osMessageQueuePut(msg_queue_uartdeal_id,&uartdeal_queue_item,NULL,NULL);
//for test
if(Size > 1000)
{
uartdeal_queue_item.message_id = com;
}
//// 继续接收数据
HAL_UARTEx_ReceiveToIdle_DMA(huart, buffptr, DMABUFF_LEN);
}
} |
|