1. HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
/*
huart:使用哪个串口进行通信
pData: 一个地址,用于保存接受到的数据
Size: 接收的数据个数
Timeout:超时时间
*/
这是一个阻塞式的 UART 接收函数。当你调用这个函数时,它会等待直到指定数量的数据被完全接收并存储在提供的缓冲区中。在数据接收完成之前,该函数不会返回。这意味着,如果 UART 接收数据较慢或数据量较大,调用该函数的线程或任务将被阻塞,直到接收完成。
注:Timeout用HAL_MAX_DELAY或0xff,单片机接受速度将会非常慢,有几率会接受不到数据,将超时时间调小则会接受变快。(踩过的坑)
2. HAL_UART_ Receive_IT(UART_HandleTypeDef *huart, uint8_int *data, uint16_t Size)
/*
huart:使用哪个串口进行通信
data: 是一个指向用于存储接收到的数据的缓冲区的指针
Size: 表示期望接收的数据的长度
*/
是一个中断式的 UART 接收函数。当你调用这个函数时,它会配置 UART 以在接收到数据时产生中断。然后,函数立即返回,而不会等待数据接收完成。当 UART 接收到指定数量的数据时,相应的中断服务例程(ISR)会被调用,以处理接收到的数据。
这种方式允许 CPU 在等待数据接收的同时执行其他任务,提高了系统的效率和响应能力。它特别适用于需要同时处理多个任务或需要实时响应的场景。
/***/
3.注意!:
- 在while(1)中写 HAL_UART_Receive_IT(&huart1,(uint8_t *)RxBuffer,1);在回调函数中不再次调用 HAL_UART_Receive_IT(&huart1, (uint8_t *)RxBuffer, 1); 程序也正确。
- 在main函数中写HAL_UART_Receive_IT(&huart1,(uint8_t *)RxBuffer,1);但不在while(1)中,则需要在回调函数最后加上HAL_UART_Receive_IT(&huart1, (uint8_t *)RxBuffer, 1); 否则只会接受一个数据就会停止接受。//每接收一个数据,就打开一次串口中断接收,否则只会接收一个数据就停止接收
4.①void USART1_IRQHandler(void);是一个中断服务函数,用于处理 USART1(通用同步异步收发器 1)的中断事件。当中断发生时,系统会自动调用这个函数来执行相应的处理操作。
例如,可能会在接收到数据、发送完成、发生错误等情况下触发中断,然后在这个函数中进行数据读取、状态处理、错误处理等操作。
②void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);是HAL库
提供的一个回调函数,当 UART(通用异步收发传输器)接收完成时被调用。
比如说,如果使用 HAL 库配置了 UART 的接收,当接收到指定数量的数据或者满足其他接收完成的条件时,就会执行这个回调函数来进行后续的数据处理或操作。
在实际应用中,这两个函数的作用有所不同。USART1_IRQHandler更侧重于整体中断的处理,而 HAL_UART_RxCpltCallback 则是在 HAL 框架下专门针对接收完成这一特定事件的处理。
5.VOFA实时调参在vofapid.c文件中。
标签:HAL,函数,vofa,UART,Receive,单片机,串口,接收,数据 From: https://blog.csdn.net/qq_73751333/article/details/140357251