Vofa与单片机串口通信实践笔记

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文件中。

    作者:Andc777

    物联沃分享整理
    物联沃-IOTWORD物联网 » Vofa与单片机串口通信实践笔记

    发表回复