注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
Tobey的个人空间 https://home.eeworld.com.cn/space-uid-719346.html [收藏] [复制] [分享] [RSS]
日志

基于hal库的usart无法进入接收回调函数问题

已有 12066 次阅读2017-8-4 11:38 |个人分类:硬件开发_嵌入式编程


硬件:
      stm32f103c8t6
      一块采用串口通信的GPS模块

开发平台:
      keil5.20
      STM32CubeMx

需要实现的功能:
     usart1用于打印usart2中接收到的数据
     usart2采用中断模式接收来自GPS模块的数据

遇到的问题:
      在while循环中执行中断接收函数,并在回调函数中打印接收到的数据,回调函数调用正常,,
[C] 纯文本查看 复制代码
volatile uint8_t usartTemp[200] ;

int main(void)
{
  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_USART2_UART_Init();

        HAL_UART_Receive_IT(&huart2,usartTemp,200);

  while (1)
  {
       
        HAL_UART_Receive_IT(&huart2,usartTemp,200);
               
  }
  
}

// 数据接收完成后调用回调函数,这里只有usart2接收数据,所以不进行串口对象判断
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
        static uint8_t count = 0;
        printf("=============%d============\n",count);
        printf("%s\n",usartTemp);
        count++;
}


     既然是中断方式接收数据,总不能一直在while中调用吧,,所以,将第一次调用接收函数置于while函数前,然后在回调函数中再次调用接收函数,开启下一轮数据接收,却发现,程序在进行了一次数据接收后就不再接收数据了,打断点确定回调函数中的接收数据函数确实被调用了,然而就是不再进回调函数了,,,,参照网上资料,添加了__HAL_UART_ENABLE_IT后仍然没用,,使用过基于hal的usart中断接收数据的朋友给指点下吧

[C] 纯文本查看 复制代码
volatile uint8_t usartTemp[200] ;

int main(void)
{
        HAL_Init();

        SystemClock_Config();

        MX_GPIO_Init();
        MX_USART1_UART_Init();
        MX_USART2_UART_Init();

        HAL_UART_Receive_IT(&huart2,usartTemp,200);
        // __HAL_UART_ENABLE_IT(&huart2,UART_IT_ERR);
        /  __HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
        while (1)
        {

        //        HAL_UART_Receive_IT(&huart2,usartTemp,200);
               
        }
  
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
        static uint8_t count = 0;
        printf("=============%d============\n",count);
        printf("%s\n",usartTemp);
        count++;
        while(HAL_UART_GetState(&huart2) == HAL_UART_STATE_BUSY_RX) {}
                HAL_UART_Receive_IT(&huart2,usartTemp,200);
//        __HAL_UART_ENABLE_IT(&huart2,UART_IT_ERR);
//        __HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
}

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章