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

[复制链接]
 楼主| 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 高。
Bblythe 发表于 2025-3-26 08:20 | 显示全部楼层
你可以试试在中断回调里做数据处理,比如 HAL_UART_RxCpltCallback(),处理完再启动下一次接收。
Pulitzer 发表于 2025-3-26 08:20 | 显示全部楼层
GPS 这种设备一般会持续发送数据,最好做个循环缓冲区,不然可能会丢数据。
Uriah 发表于 2025-3-26 08:21 | 显示全部楼层
试过用 HAL_UART_Transmit() 吗?HAL 里收和发逻辑不太一样,得分别调 API。
Clyde011 发表于 2025-3-26 08:22 | 显示全部楼层
其实如果你的项目不复杂,直接用 polling 轮询方式可能更简单,不过功耗会稍微大一点。
公羊子丹 发表于 2025-3-26 08:23 | 显示全部楼层
HAL 确实有点绕,特别是对于习惯标准库的人来说,感觉封装太多,反而不好控制。
周半梅 发表于 2025-3-26 08:24 | 显示全部楼层
你的需求完全可以用中断方式完成收发,HAL 库里有 HAL_UART_Receive_IT() 可以用。
帛灿灿 发表于 2025-3-26 08:25 | 显示全部楼层
试试 DMA?GPS 这种持续输出数据的设备,用 DMA 方式接收比中断更省资源。
童雨竹 发表于 2025-3-26 08:26 | 显示全部楼层
你是想用中断逐字节接收,还是想用接收缓冲区等特定长度的数据?
万图 发表于 2025-3-26 08:27 | 显示全部楼层
HAL 里确实隐藏了很多细节,感觉直接操作寄存器更直观,不过 HAL 适配性强,适合通用项目。
过期的塔头 发表于 2025-3-31 23:06 | 显示全部楼层
可以仅使用中断来完成串口的收发数据,避免使用轮询或阻塞式接收,减少 CPU 占用
yzzly 发表于 2025-4-6 08:50 | 显示全部楼层
直接操作寄存器,增加对硬件的理解,更有利于软件编写!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

46

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部