硬汉嵌入式论坛

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

HAL库存在的BUG问题

[复制链接]

13

主题

59

回帖

98

积分

初级会员

积分
98
发表于 2025-3-15 12:53:09 | 显示全部楼层 |阅读模式
最近用HAL库开发项目,遇到一个问题。
系统有FREERTOS系统,一个任务间隔一段时间通过HAL_UART_Transmit(&huart4,TXbuffer,20)发送数据,进一次HAL_UART_IRQ中断使能一次HAL_UART_Receive_IT(&huart4,(uint8_t *)UartDR,1)接收数据
,工作一段时间后发现中断调用HAL_UART_Receive_IT时无法使能UART接收中断。
调试发现是因为在HAL_UART_Transmit(&huart4,TXbuffer,20)调用HAL_LOCK()时,中断里面无法再次使能UART接收中断,这样的问题是不是HAL库的BUG,大家有什么好的办法解决吗,除了在UART中断里面强行调用HAL_UNLOCK()之外



回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115653
QQ
发表于 2025-3-15 16:25:02 | 显示全部楼层
HAL库这几个API非常考究调用调用姿势,因为里面好几个LOCK和BUSY判断。

当前有个问题是楼主的发送是发送完成后,通过HAL_UART_Receive_IT等待接收吗,还是这个HAL_UART_Receive_IT一直在开启,发送和接收会同时进行的情况。
回复

使用道具 举报

13

主题

59

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2025-3-16 21:38:41 | 显示全部楼层
eric2013 发表于 2025-3-15 16:25
HAL库这几个API非常考究调用调用姿势,因为里面好几个LOCK和BUSY判断。

当前有个问题是楼主的发送是发送 ...

不是,每次中断都通过HAL_UART_Receive_IT再次使能接收中断,但是会概率性因为发送的LOCK导致无法再次打开中断使能接收
回复

使用道具 举报

354

主题

2164

回帖

3231

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3231
发表于 2025-3-17 11:20:25 | 显示全部楼层
如果使用HAL库,就要完全按照官方例程的顺序调用函数,不要自己开关中断,也不要在中断函数中加自己的东西。只使用回调函数处理数据才行。
回复

使用道具 举报

13

主题

59

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2025-3-20 13:16:30 | 显示全部楼层
caicaptain2 发表于 2025-3-17 11:20
如果使用HAL库,就要完全按照官方例程的顺序调用函数,不要自己开关中断,也不要在中断函数中加自己的东西 ...

嗯,现在遇到这个问题就是进入中断之后在打开接收中断打不开了?如何解决这个问题呢,求教
回复

使用道具 举报

23

主题

187

回帖

256

积分

高级会员

积分
256
QQ
发表于 2025-3-20 14:38:48 | 显示全部楼层
ajianyes 发表于 2025-3-20 13:16
嗯,现在遇到这个问题就是进入中断之后在打开接收中断打不开了?如何解决这个问题呢,求教

干脆不用 HAL 库用坛主的驱动好了:)
回复

使用道具 举报

39

主题

1504

回帖

1626

积分

至尊会员

积分
1626
发表于 2025-3-21 11:23:27 | 显示全部楼层
估计还是你使用问题  里面有很多状态判断   你状态处理不对  他判断就不通过
回复

使用道具 举报

5

主题

229

回帖

249

积分

高级会员

积分
249
发表于 2025-3-23 15:05:00 | 显示全部楼层
你是不是在中断回调里面使用了发送函数?
回复

使用道具 举报

6

主题

239

回帖

257

积分

高级会员

积分
257
发表于 2025-3-23 17:35:55 | 显示全部楼层
串口用DMA接收发送,简单好用,接收用超时标志,为啥要手工用HAL阻塞发送接收?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-9 15:46 , Processed in 0.280058 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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