冰糖葫芦 发表于 2019-9-6 17:20:05

FreeRTOS 串口HAL函数串口请教,版主和高手关注一下

st提供的hal库函数,提供了三种串口的接收发发送函数,如何和FreeRTOS配合使用?
    (#) Blocking mode APIs are:
      (++) HAL_UART_Transmit()
      (++) HAL_UART_Receive()
      
    (#) Non Blocking mode APIs with Interrupt are:
      (++) HAL_UART_Transmit_IT()
      (++) HAL_UART_Receive_IT()
      (++) HAL_UART_IRQHandler()

    (#) Non Blocking mode functions with DMA are:
      (++) HAL_UART_Transmit_DMA()
      (++) HAL_UART_Receive_DMA()

第二种中断处理的的中断函数


void USARTx_IRQHandler(void)
{
HAL_UART_IRQHandler(& UartHandle);
}

获取数据是调用函数
HAL_UART_Receive_IT(&UartHandle, (uint8_t *)aRxBuffer, RXBUFFERSIZE)

想实时处理来的数据。每次连续接收8字节的串口数据。

版主,这种的如何获取数据啊,如果要创建一个接收数据的任务?:(

第一次用系统。

eric2013 发表于 2019-9-6 17:52:49

不需要任务接收了,进入串口中断的接收完成回调,说明已经接收完毕了。

冰糖葫_qexio 发表于 2019-9-8 12:18:46

eric2013 发表于 2019-9-6 17:52
不需要任务接收了,进入串口中断的接收完成回调,说明已经接收完毕了。

哦哦。
那我可以创建一个数据处理任务;和一个事件标志组;
vDataProcess()
{
........
    HAL_UART_Receive_IT(&UartHandle, (uint8_t *)aRxBuffer, RXBUFFERSIZE);
........
   //事件标志组等待函数
   EventGroupWait()......
   
}


//在 串口制定个数完成接收 以后的回调函数里面 添加一个事件标志组Give的函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
/* Set transmission flag: transfer complete*/
UartReady = SET;

/* Turn LED3 on: Transfer in reception process is correct */
BSP_LED_On(LED3);

//设置事件标志组的 标志位
EventGroupGive()

}

这样的思路对吗?@eric2013

wxqhit 发表于 2019-9-8 14:47:49

@@eric2013 刚刚注册了账号,用微信登录,两天登录,两个独立的id号。:Q

eric2013 发表于 2019-9-9 00:09:01

冰糖葫_qexio 发表于 2019-9-8 12:18
哦哦。
那我可以创建一个数据处理任务;和一个事件标志组;
vDataProcess()


可以,就是这个思路

eric2013 发表于 2019-9-9 00:09:33

wxqhit 发表于 2019-9-8 14:47
@@eric2013 刚刚注册了账号,用微信登录,两天登录,两个独立的id号。

没事,用一个就行:handshake
页: [1]
查看完整版本: FreeRTOS 串口HAL函数串口请教,版主和高手关注一下