打印
[STM32F1]

感觉hal库程序比标准库更难读懂,做个uart项目,好难

[复制链接]
572|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Hitomi22|  楼主 | 2025-3-23 22:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F103C6 的 UAR1链接到GPS Neo-6M 模块接受数据,然后使用另一个 UART2 连接到其他主机配置数据,
HAL 很难理解,如何收发数据。
是否可以仅使用中断完成收费,按理说应该可以


使用特权

评论回复
沙发
xuanhuanzi| | 2025-3-25 11:21 | 只看该作者
但是HAL更通用,几乎所有的系列同用一个库函数,这方便移植程序

使用特权

评论回复
板凳
Wxy8030| | 2025-3-25 11:55 | 只看该作者
方便移植其实是个伪命题,就算你用寄存器,其实ST的寄存器都是大同小异、一样方便移植,跟用什么库的难度基本没啥差别

使用特权

评论回复
地板
Wordsworth| | 2025-3-26 08:18 | 只看该作者
如果觉得 HAL 难用,可以用 LL 库,低级库比 HAL 简单不少,而且效率比 HAL 高。

使用特权

评论回复
5
Bblythe| | 2025-3-26 08:20 | 只看该作者
你可以试试在中断回调里做数据处理,比如 HAL_UART_RxCpltCallback(),处理完再启动下一次接收。

使用特权

评论回复
6
Pulitzer| | 2025-3-26 08:20 | 只看该作者
GPS 这种设备一般会持续发送数据,最好做个循环缓冲区,不然可能会丢数据。

使用特权

评论回复
7
Uriah| | 2025-3-26 08:21 | 只看该作者
试过用 HAL_UART_Transmit() 吗?HAL 里收和发逻辑不太一样,得分别调 API。

使用特权

评论回复
8
Clyde011| | 2025-3-26 08:22 | 只看该作者
其实如果你的项目不复杂,直接用 polling 轮询方式可能更简单,不过功耗会稍微大一点。

使用特权

评论回复
9
公羊子丹| | 2025-3-26 08:23 | 只看该作者
HAL 确实有点绕,特别是对于习惯标准库的人来说,感觉封装太多,反而不好控制。

使用特权

评论回复
10
周半梅| | 2025-3-26 08:24 | 只看该作者
你的需求完全可以用中断方式完成收发,HAL 库里有 HAL_UART_Receive_IT() 可以用。

使用特权

评论回复
11
帛灿灿| | 2025-3-26 08:25 | 只看该作者
试试 DMA?GPS 这种持续输出数据的设备,用 DMA 方式接收比中断更省资源。

使用特权

评论回复
12
童雨竹| | 2025-3-26 08:26 | 只看该作者
你是想用中断逐字节接收,还是想用接收缓冲区等特定长度的数据?

使用特权

评论回复
13
万图| | 2025-3-26 08:27 | 只看该作者
HAL 里确实隐藏了很多细节,感觉直接操作寄存器更直观,不过 HAL 适配性强,适合通用项目。

使用特权

评论回复
14
过期的塔头| | 2025-3-31 23:06 | 只看该作者
可以仅使用中断来完成串口的收发数据,避免使用轮询或阻塞式接收,减少 CPU 占用

使用特权

评论回复
15
yzzly| | 2025-4-6 08:50 | 只看该作者
直接操作寄存器,增加对硬件的理解,更有利于软件编写!

使用特权

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

本版积分规则

11

主题

13

帖子

0

粉丝