引子
初识
笔者接触STM32系列MCU有些年头了。初次接触是2015年,那时是在第二空间(北京)科技有限公司上班,是以STM32F407(后缀好像是RGT6或ZGT6,记得不是很清楚了)为主芯片做VR头戴式设备,当然公司后续也有低端产品,使用的是STM32F103。第二年又兼职帮助硕米(后更名为摩象)科技做了小米VR的头戴式设备第一版嵌入式软件,以STM32F072CB为主芯片。
甭管是高端STM32 F4系列还是低端的F1和F0系列,印象中当时没有HAL库,也只知道有正点原子(当年自主研发的头戴式产品就是以正点原子的探索者开发板为基准开发的),其提供的开发板配套工程代码只有寄存器版本和库函数版本(HAL库出来后称作标准库)。
再相逢
自2016年下半年以后就与STM32系列单片机暂别了,再次与它接触已经是2021年了。当时,当年摩象科技的老合作伙伴出来创业,找准了泳池清洁机器人这个赛道,准备创立一家公司(即后来的智橙动力(北京)科技有限公司),邀我加入,并在公司成立正式之前开始做技术准备和技术储备。
这里说个题外话,智橙动力后来应该是改名和搬家了,2021年成立的时候是在北京,名字是智橙动力(北京)科技有限公司,看来现在已经更名为智橙动力(苏州)科技有限公司了,估计地点也搬到苏州了吧。
回到主题中来,当时(2021年8月中旬)我经过诸多竞品的比对权衡(功能、成本、技术支持完善度等维度),最终选择了STM32F103这款芯片。理由是这块芯片当年玩过,还算比较熟悉,更为重要的一点是,它是野火拂晓电机开发板的主芯片。不过后来又经过一番考量,最终选择了STM32F405作为主芯片(接近于野火骄阳电机开发板的主芯片STM32F407)。
这时就有了两个收获:(1)除正点原子外,知道了与其同等重量级、同样亲和力的野火;(2)再相遇时,发现已不再只有寄存器和标准库了,而是多了一个ST(意法半导体)推出的HAL库以及与之相配合的STM32CubeMX。
不过一开始,从内心对于CubeMX和HAL库是排斥的,因为当年已经使用惯了寄存器和标准库函数,一下要接触一个新鲜事物总是不大情愿的。无奈野火电机的例程大都是基于HAL库的,只得硬着头皮去学这个新的方法。然而,一旦真正用上了、尤其用惯了HAL库和CubeMX,发现它是真好用。通过图形化界面进行配置操作,而后系统会自动生成代码,不但节省了大量的自己配置代码的时间,而且还避免了自己写配置代码所可能产生的遗漏。因此,到后来让我用寄存器和标准库我都不愿意使用了,只愿意使用STM32CubeMX和HAL库。
再聚首
在智橙动力干了半年左右,由于与老板(就是摩象的那个旧相识)的理念存在难以调和的差异,最终离开了那个公司,回归到了个人最愿意从事的操作系统行业。但是去年年底由于公司裁员,赋闲在家了。最近找了一个兼职工作,是基于STM32H743做一个类似于音乐播放器的项目。虽然不再是STM32F系列了,但仍然是STM32系列,也仍然要与STM32CubeMX和HAL库打交道。不过这正好弥补了两年多以前的遗憾。当年由于创业初始,什么都是“跑步前进”,能够调通就好,没有更多时间去写一些细节的东西,再加上当年对于在CSDN上写博客的热情还没有像现在这样高涨,因此对于STM32CubeMX是如何下载、尤其是如何配置等详细过程,没有进行记录。这次正好借着这个机会重新走一遍此过程,以STM32H743为实例,对于CubeMX的详细配置过程以及所遇到的问题及解决详细记录下来,并制作成一个保姆级的教程,以弥补当年的缺憾。
闲言已叙,书归正文。