请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

第三期:聊聊STM32CubeMX及HAL库的使用情况、技巧等

[复制链接]
埃斯提爱慕 提问时间:2018-11-5 08:50 /
提示: 作者被禁止或删除 内容自动屏蔽
1 收藏 评论32 发布时间:2018-11-5 08:50

举报

32个回答
tanic 回答时间:2018-11-5 17:28:48
我向来是不惮于接触新事物的,cubemax也做了几个项目了,不过只用到了基本外设,加一个freertos,
一句话串口不好用,大部分条件下,项目不需要那么花哨。比如串口噪声,串口溢出等错误标志位啥的能搞上的都搞上了,没必要啊。这样搞得结果就是用户必须要写一个出错了的回调函数,来错误处理,否则串口死掉,死掉的原因是HAL库串口空闲繁忙保护机制。然而错误处理没有demo,全靠摸索。不做错误处理的只要一直正常也能用,一旦出错就死了,会给人造成不稳定的假象。一个简单的串口尚且如此,不知道其他驱动有没有类似的问题。太过复杂的架构,解决问题的办法不好找,对于初级工程师来说是不可能完成的任务。总的来说HAL库任然需要实际项目的考验,以及应用案例的支持。
完--撒花鼓掌

点评

学习的路很长,接触任何一种新事物,都是学习的过程。HAL库还是考虑的很全面,有很大一部分功能在我们的项目中用不到,这方面是需要弄清楚的。  发表于 2018-11-5 19:07
奇迹 回答时间:2018-11-5 14:08:51
提示: 作者被禁止或删除 内容自动屏蔽
a421701136 回答时间:2018-11-6 08:51:01
我刚开始也很抗拒HAL库,但是在新项目中使用了HAL,还是觉得很方便。免掉了所需外设和时钟的初始化配置,只需要把精力集中在功能需求上。而且各种stm32系列的芯片代码都是通用的,很方便就移植过来。  大家都很担心HAL有bug,而且因为层层嵌套不好查找。我觉得不用担心,一方面我没有遇到过。另外一方面,HAL已经出来那么久了,就算有bug也有人反馈了。我觉得就跟使用操作系统一样的,操作系统也有bug,而且操作系统也会损耗一部分cpu性能和内存,但是开发起来方便快捷。

点评

其实是没必要害怕BUG的,想想ST的工程师总比我的水平高吧,而且人家是一个团队完成的库,我只有学习的份。需要做的只有理解它,运用它。  发表于 2018-11-6 09:05
STM1024 回答时间:2018-11-5 08:54:00
一般都是先生成HAL代码,然后再修修改改,这样可能更方便一点。
不过总体上来说,HAL确实提升了开发的效率,省的不停滴查手册

点评

是的,不过涉及到细节部分,还是需要看手册(Reference manual、Datasheet等)的,毕竟手册是最详细的资料。  发表于 2018-11-5 09:03
waiman 回答时间:2018-11-5 10:36:19
我的方法类似你用的,也是用文件夹区分BSP,API,APP等,然后每一层用一个.h文件include。
接入HAL的,只是修改main.c和stm32f1xx_it.c 这两个文件。所以重新生成工程(或者换芯片),也不用修改自己的代码。
而且这样的分布,如果只是修改BSP里面的.c文件,只会重新编译BSP文件夹里面的不好影响到其他层。
这样的好处,就是提升编译速度。

点评

有道理,模块化程序设计思路。  发表于 2018-11-5 11:10
一代睡神的崛起 回答时间:2018-11-5 13:13:08
一如既往的喜欢标准库,也使用过HAL库但是编译起来太烧配置,因为使用得比较少也不好做过多的评论。听说HAL驱动集成得很好

点评

标准库很经典,不过时代在进步,想以后跨平台移植方便还是HAL库,想省Flash空间,还是有LL库可选择的。  发表于 2018-11-5 13:19
确实很烧Flash空间,不过现在的MCU的Flash也足够大,动不支就是1M 2M的大小,哈哈,烧烧也无所谓。。  发表于 2018-11-5 13:18
bjx1234 回答时间:2018-11-5 13:27:48
不怎么好用,而且能保证生成的驱动就一点问题没有吗?

点评

不排除它还有别的Bug,但它还是给我提供了很多方便,在接收它的方便的同时,我会去适应它。微软、谷歌、苹果的软件不也在不断更新嘛  发表于 2018-11-5 14:18
其实我之前在用HAL库操作内部Flash时,也遇到过问题,当时以为是Bug。后来发现还是我没弄明白,调用函数错误导致。  发表于 2018-11-5 14:17
maxtch 回答时间:2018-11-5 13:56:10
标准库和 HAL 我都不用。开发起来代码复杂度和直接操作寄存器差不了多少,烧空间。所谓的跨平台,这种 HAL 因为没有别的厂家支持,也只不过是一种供应商锁定的方法罢了。

点评

其实别的厂商也有类似的。现在的MCU外设越来越强大,操作寄存器是很直接,但是用到USB、以太网等外设呢?  发表于 2018-11-5 14:21
奏奏奏 回答时间:2018-11-5 15:02:28
一直在这个论坛里推stm32cubemx与HAL库,
其实我也想顺便推荐一下LL库,但是LL库目前没有在项目中使用,不敢误人子弟。

之前想用STM32F107VCT6的时候用TCP联网,看了教程也不会用,自己觉得可能用MCU做这些应用并不是太合适。
单纯的控制,GPIO,中断,CAN,I2C,定时器,PWM,串口,这些基本功能还是挺方便的

点评

你的经验,分享出来,对别人就是一种帮助。在互联网、物联网的大趋势下,MCU也不仅仅是简单的控制,接入网络也是需要的,目前我做过Modbus-TCP。  发表于 2018-11-5 15:30
maxtch 回答时间:2018-11-5 15:15:10
至于 USB、网络这类复杂外设,网上可以找到不依赖 HAL 或标准库的独立支持库。而且这类库普遍体积都非常小。

点评

都有各自的习惯以及侧重点  发表于 2018-11-5 15:32
yangjiaxu 回答时间:2018-11-5 16:37:56
该说不说HAL十分方便移植,但是缺点就是不好优化啊,生成的下载文件 都好大

点评

确实是大,也可以选择LL库。不过在Flash容量足够的情况下,还是可以用HAL的。  发表于 2018-11-5 17:09
1209实验室@ujn 回答时间:2018-11-5 16:46:34
HAL观望之中,实际使用觉得并不灵活,无法满足需求,需要按照HAL的结构重新构建底层函数,结果还是太麻烦了,而且相当臃肿。

点评

建议新项目中使用。  发表于 2018-11-5 17:10
tanic 回答时间:2018-11-5 17:14:25
HAL没啥毛病,cubemax把细节都隐藏了,一旦出了问题,就不知道咋搞。推荐有STD库的用STD库。没有的用HAL库,手动移植。弄清楚流程,出了问题才知道怎么解决。总之,鸡蛋不能放在一个篮子里,要用工具,不要被工具用。
一般来说基本外设的初始化配置,手动配置出了问题在与cubemax配置的比较,找问题。
像什么LWIP,GUI,FATFS等中间件,能自己移植就自己移植,USB就算了,USB包含太多子协议,实在复杂,这个建议直接生成,然后再去改描述符啥的,一般直接生成的很难用到实际项目中。

点评

是的,我们要会使用工具,用它来使得开发更便捷。所以必须要了解它,才能合理的运用。知其然也必须知其所以然。更重要的是学习它的优点。  发表于 2018-11-5 18:56
baobo 回答时间:2018-11-6 09:45:53
学习了,谢谢。
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版