硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1540|回复: 6
收起左侧

[UART] H7串口接收错误

[复制链接]

19

主题

28

回帖

85

积分

初级会员

积分
85
发表于 2024-10-28 10:03:26 | 显示全部楼层 |阅读模式
使用H7的USART1作为R232的串口时,出现芯片接收到数据,但不能进接收中断的情况,目前环境就是:使用HAL_UART_Receive_IT(&huart1,&test,1)接收一个字节数据并触发中断,并在回调函数里重新调用HAL_UART_Receive_IT(&huart1,&test,1),使用USART1_IRQHandler中断处理函数写,        HAL_UART_IRQHandler(&huart1);进入回调函数(调试进不了回调函数),电脑上位机通过USB转ttl模块与板子相连,并通过电脑一直发送数据,让板子接收(板子配置的芯片管脚已经收到数据,且数据正常,但并没有触发中断),其在中断里写HAL_UART_ErrorCallback,调试时进入此函数。在while里一直发数据给上位机,可以正常发送,且数据时正常的。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117564
QQ
发表于 2024-10-28 11:13:29 | 显示全部楼层
在中断里面调用HAL_UART_Receive_IT(&huart1,&test,1),看下这个函数的返回值,看看是不是不对
回复

使用道具 举报

19

主题

28

回帖

85

积分

初级会员

积分
85
 楼主| 发表于 2024-10-28 14:07:08 | 显示全部楼层
eric2013 发表于 2024-10-28 11:13
在中断里面调用HAL_UART_Receive_IT(&huart1,&test,1),看下这个函数的返回值,看看是不是不对

此函数的值为0x08002B5C
回复

使用道具 举报

25

主题

233

回帖

308

积分

高级会员

积分
308
QQ
发表于 2024-10-28 16:30:44 | 显示全部楼层

看起来多半是这个 if 没有通过,可以监控一下 uart 对象的 RxState
屏幕截图 2024-10-28 162128.png

hal 的 uart 中断里首先就会判断接收中断并且触发回调,如果这个时候 RxState 并不是 HAL_UART_STATE_READY 那么你第二个接收就没有开启了
屏幕截图 2024-10-28 162425.png
可以试试在接收回调,调用一下 HAL_UART_AbortReceive_IT() 函数。
不过建议还是改成论坛里的 uart 驱动,buffer 方式的 uart 驱动明显论坛里的更优秀,hal 库为 DMA 增加太多杂七杂八的东西了。
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2024-10-29 12:08:18 | 显示全部楼层
试过 HAL_UART_Receive_IT 启动串口接收后, 在 HAL_UART_RxCpltCallback 回调中处理资料吗
回复

使用道具 举报

19

主题

28

回帖

85

积分

初级会员

积分
85
 楼主| 发表于 2024-10-29 14:19:57 | 显示全部楼层
已解决,是电路内部隔离将电平拉高,芯片不认了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117564
QQ
发表于 2024-10-30 09:34:18 | 显示全部楼层
Luo990619 发表于 2024-10-29 14:19
已解决,是电路内部隔离将电平拉高,芯片不认了

谢谢告知最终原因。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 17:35 , Processed in 0.060033 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表