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

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值