cccgccg 2024-01-18 23:20 采纳率: 57.1%
浏览 261
已结题

HAL库串口接收不执行HAL_UART_RxCpltCallback函数

HAL库串口接收不执行HAL_UART_RxCpltCallback函数。
这份代码执行发送是没问题的,不知道为啥接收的时候出问题了。
uart.c文件:

img

img


(上图最后一行代码配置了HAL_UART_Receive_IT函数)

img


(上图82、83行配置了NVIC)

main.c文件:

img

img

img

img


(HAL_UART_RxCpltCallback函数在这里,第131行代码效果是在屏幕上显示“111”,在向串口发送“aksjh\n”后显示屏无显示,说明没有执行此函数)

  • 写回答

9条回答 默认 最新

  • GISer Liu 2024-01-18 23:24
    关注

    该回答引用自GPT-4,由博主GIS_Liu编写:

    从您提供的问题描述中,您的代码在执行串口发送时没有问题,但是在接收时没有调用HAL_UART_RxCpltCallback函数。在解决这个问题之前,我们先要分析整个UART通信流程以及HAL_UART_RxCpltCallback函数在何种情况下被调用。

    HAL_UART_RxCpltCallback是一个回调函数,它在HAL库中的串口接收中断服务例程(USARTx_IRQHandler)中被调用,这个例程会在接收到指定数量的数据后被触发。

    根据您的描述,我会按照以下步骤进行问题分析和解决方案的提出:

    1. 检查USARTx_IRQHandler中断服务例程是否正确实现:确保USART中断服务例程调用了HAL_UART_IRQHandler
    2. 确认NVIC中断优先级配置是否正确:如果有其他中断服务例程在运行,它们可能会阻止USART中断的执行。
    3. 确认HAL_UART_Receive_IT函数调用:确保你在适当的时候调用了这个函数,以便HAL库设置好接收中断。
    4. 检查接收缓冲区和接收长度:确保接收缓冲区的大小和HAL_UART_Receive_IT中指定的接收长度一致,不会发生溢出。
    5. 确认是否有收到数据:通过查看硬件(例如使用示波器)确认USART实际上是否收到了数据。
    6. 检查硬件连接:确认RX和TX引脚是否正确连接,以及是否有任何硬件故障。

    解决方案

    假设USARTx_IRQHandler和NVIC配置是正确的,您需要确保在程序的某个位置调用了HAL_UART_Receive_IT(&huart1, buffer, size)。这通常在初始化后和/或在HAL_UART_RxCpltCallback函数内部再次调用以准备接收下一个数据块。

    基于您提供的代码片段,这里是一个检查的大纲:

    1. 检查USART中断服务例程
    // 这个函数应该在 stm32fxx_it.c 文件中
    void USARTx_IRQHandler(void)
    {
      HAL_UART_IRQHandler(&huart1);
    }
    
    1. 确认NVIC配置
    // 这应该在您的初始化函数中
    HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(USART1_IRQn);
    
    1. 检查HAL_UART_Receive_IT调用
    // 这应该在初始化函数之后调用
    HAL_UART_Receive_IT(&huart1, (uint8_t *)UART1_Rx_Buf, REC_LENGTH);
    
    1. 在回调函数中重新启动接收
    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    {
      if (huart->Instance == USART1)
      {
        // 处理接收到的数据...
    
        // 重新启动接收
        HAL_UART_Receive_IT(huart, (uint8_t *)UART1_Rx_Buf, REC_LENGTH);
      }
    }
    

    您需要根据实际的需求和代码结构调整这些代码片段,并确保它们适合您的项目。如果您在实际硬件上运行代码并且问题依然存在,请使用示波器检查UART接收引脚是否真的接收到了数据。如果没有,那么问题可能出在硬件连接上。

    希望这能帮助您解决问题,如果需要更详细的分析,您可能需要提供更完整的代码和硬件连接细节。

    如果该回答解决了您的问题,请采纳!如果没有,请详述问题所在!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

问题事件

  • 系统已结题 1月27日
  • 已采纳回答 1月19日
  • 修改了问题 1月18日
  • 创建了问题 1月18日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀