回答

收藏

STM32L476 NUCLEO 开发板使用 FreeRTOS + 串口

STMCU STMCU 5405 人阅读 | 0 人回复 | 2016-09-26


1. 首先拿到板子,先跑了一下freertos系统。
函数简单介绍下:
// 定义一些线程的参数,优先级,堆栈之类的。
osThreadDef(THREAD_1, LED_Thread1, osPriorityNormal, 0, configMINIMAL_STACK_SIZE);
// 创建线程
LEDThread1Handle = osThreadCreate(osThread(THREAD_1), NULL);
// 阻塞线程,这个函数很有用的,可以先记住。
osThreadSuspend(LEDThread1Handle);
// 系统开始
osKernelStart();
总的来说,ST肯定在freertos源码的基础上,他们封装了一层函数。所以名字变了,本来是task,现在称呼为thread。

2. 上面的不是关键,要说串口这个BUG。
这个路径的例程。
\en.stm32cubel4\STM32Cube_FW_L4_V1.5.0\Projects\STM32L476RG-Nucleo\Examples\UART\UART_TwoBoards_ComIT\Src
为什么说这个函数,我觉得这个函数有问题,或者是我用的不对。  
if(HAL_UART_Receive_IT(&UartHandle, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
  {
    Error_Handler();
  }

我理解是,串口接收指定长度的数据,数据接收满就会退出。但是实际测试效果不好。基本是乱码。
串口自发自收就是这个结果了。



3. 然后看了下函数原型。风格和我以前用的不一样,估计要好好研究了。我怀疑串口接收是在中断接收的,不是这个函数。
这个函数估计只是设置用的。
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
{
  /* Check that a Rx process is not already ongoing */
  if(huart->RxState == HAL_UART_STATE_READY)
  {
    if((pData == NULL ) || (Size == 0))
    {
      return HAL_ERROR;
    }

    /* Process Locked */
    __HAL_LOCK(huart);

    huart->pRxBuffPtr = pData;
    huart->RxXferSize = Size;
    huart->RxXferCount = Size;

    /* Computation of UART mask to apply to RDR register */
    UART_MASK_COMPUTATION(huart);

    huart->ErrorCode = HAL_UART_ERROR_NONE;
    huart->RxState = HAL_UART_STATE_BUSY_RX;

    /* Process Unlocked */
    __HAL_UNLOCK(huart);

    /* Enable the UART Parity Error Interrupt */
    SET_BIT(huart->Instance->CR1, USART_CR1_PEIE);

    /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */
    SET_BIT(huart->Instance->CR3, USART_CR3_EIE);

    /* Enable the UART Data Register not empty Interrupt */
    SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE);

    return HAL_OK;
  }
  else
  {
    return HAL_BUSY;
  }
}

不过串口中断函数太复杂了,先不研究了。。void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
qhq
分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条