从选stm32f030r8t6做手机diy说起
手上的这块f0的板子买了很久了但一直没动。这次论坛的手机diy就打算拿它来做。
而事实上,其实我对这个板一点都不熟悉,甚至我现在才意识到,其实我对stm32本身都不熟,是的。
回想一下,我和大多数人一样,51入门,后来在msp430门前走了一转,最终被ti一板难求的严格渠道激怒。从这以后我把ti的mcu和msp430列入黑名单,不到迫不得已绝对不用。
然后我毕业了,实习的时候最先开始接触了stm32,然而那只是个序曲,后来我主要的工作是在一个小众的我以后再也没听人提起过的mcu。
然而那个板子有一套不错的例程,所以我没遇到什么麻烦。这段经历给我的最大启发只是,单片机选型绝对不只是看性能价格,还有许多开发环境开发资源的综合考虑。
也因为这件事,我后来选ide坚持用iar,实在不行用mdk也绝不用厂家自己提供的,如ti的ccs,st的stvp。
综上所述,我最后投入了st的阵营,这种选择好比我会选安卓而不是苹果一样。
在生活里我是草根,普罗大众,我不是有钱人,在开发在技术上,我只是一个小小的开发人员,我无权采购,更没法为自己一次吃下超过哪怕一百片的芯片,所以,意法的策略非常适合我。
只不过在我开始自己玩的时候,stm8出现了分散了我的注意力。
我的性格偏激 极端,这也影响了我的技术选择。
但是越来越多的经历无情的告诉我,这样下去我死定了,至少我还没足够的能力和环境纵容我去剑走偏锋,人生最怕的就是你没有杨过之才,却像尹志平那样自取其辱。
回忆了这么多,其实我只是验证了,我一点都不熟悉stm32
意法的单片机确实是一个伟大的存在,是他首开了 外设库的做法。也是他的库影响了我最初的编程模式。
然而,商业化的东西,但我渐渐对c的语法精深和对编程框架要求越来越高的时候,于是有一天,学生反过来骂老师。
这次的麻烦也一样。
从前玩stm8的时候我就发现了,st的库不仅在每一个库的内部有不少让我挑剔的地方,同时它在处理兼容不同芯片的时候也很让人吐槽。
我曾经以为,stm8有可能是意法的低端产品而且比较新,故此做的比较粗糙,而且也不是太大的事,大多数问题只是不方便编译成库,这可能是我要求比较高?
可是,这次我在找不到f030的串口例程,最终试图借鉴f103的例程时,我终于发现了一个更严重的问题,它的那些标志性的如gpio模式,前后两个库居然出现完全不一样不兼容的设计。
这导致我没能意识到一些硬件上的问题。
这就是说假如我要使用新器件030,即使我熟悉老器件103或者说我拥有可用的103例程,我也有非的去细看手册的时候,而这一切只不过是io复用而已!
说实话,毁誉参半的st库,最伟大之处就在于可以让人不看手册,否则,我要你有什么用?
但实际上在用库的过程里总是存在一些让人非常揪心的地方,以至于现在实际上st的开发者分为两派,一派是坚决以寄存器直接配置做开发,这些人里甚至存在根本就借助库来帮助理解的人。
相之于传统8051来说,新一代的意法和其他所有新生代单片机一样,其寄存器之多,设置之复杂,实在超乎我等想象。
因此,我即使对库产生了很严重的不信任感,我仍然坚持以库开发或至少参考库理解编程手册的内容。
可这次搞030的串口时,直接把我惊呆了,库里的外设例程没有串口的,或许它隐藏在其他例程里?这个值得一试!
但是,我借助103来尝试030的失败,以及我最终意识到这两个库完全没有继承性的时候,我越发感到厌恶。
我不喜欢纠缠底层不喜欢纠缠特别的特性,我只希望它们不要成为我的麻烦。
所以,考虑到,这次我不打算把开发进度的风险绑定在熟悉030的风险上,我想假如我再努力几把,还是不能获得串口例程,我决定直接换103的板子。
对于此前做好的部分,我倒是一点都不担心,首先它们全部只是io操作,其次,对于103的io我确确实实能操作,这是做rc522的时候的,另外,103这个系列是目前的stm32大主流,称为事实上的stm32标准都不为过,一堆的开发板,至今流行至少五六年,例程遍地开花。
比如大名鼎鼎的正点原子,还有其他,或者不少跟在他后面抄袭的。