打印
[STM32F4]

STM32 F407 HAL_RxCpltCallback停止调用

[复制链接]
165|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Hitomi22|  楼主 | 2025-7-17 09:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我遇到了回调函数的问题。回调函数在不确定次数的调用后会停止被触发。USART 2和3最初都有这个问题,但通过在每次回调中清除溢出错误标志,USART 2的回调能够被持续调用了。
然而这个方法对USART 3没有帮助。USART 3的RX通常会在STM需要重启前调用回调函数两次。有时它只会被调用一次,极少数情况下回调函数完全不会被调用。
USART 2和3的区别在于它们的波特率:分别是115200和3000000比特/秒。由于USART 3的速度较高,我不得不将过采样降低到8个样本,而USART 2使用16个样本的过采样。
这是我的回调函数
oid HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)        // OK{         if(huart->Instance == USART2) {                  send_uart("UART2 OK\n");                  __HAL_UART_CLEAR_OREFLAG(&huart2);                  HAL_UART_Receive_IT(&huart2, (uint8_t *) getBuffer, 10);          } else if (huart->Instance == USART3) {                  send_uart("UART3 OK\n");                  __HAL_UART_CLEAR_OREFLAG(&huart3);                  HAL_UART_Receive_IT(&huart3, (uint8_t *) getBuffer, 100);          }}
调试时检查SFRs发现,USART3的数据寄存器确实多次接收到了数据。但不知为何这似乎没有触发RxCpltCallback。USART3连接着一个IMU,我通过复位IMU来检查回调函数是否被调用。我用逻辑分析仪检查了IMU发出的信号,每次复位时确实都有信号从IMU传到STM。
有什么可能的原因?是不是最好避免使用HAL,改用LL来编写?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

36

帖子

0

粉丝