记得我刚出来工作的时候,一直从事stc 51单片机产品的开发,后来接触到了NXP的单片机。
一下从51过渡到ARM,确实让我头疼了一段时间,不过还好,都是配置寄存器去开发,至少开发模式是相同的,就是要看着数据手册配置比较耗时间罢了。
后面领导要规划一款新产品,让我和硬件工程师配合去选一个单片机。
当时我还只是改别人代码的水平,哪里懂选型的东西,又不敢让领导知道,就只能偷偷去请教大佬同事。
他在这家公司做了有3,4年了,对产品也很熟悉,他说可以用stm32的单片机来做。
就是那次开始,我正式接触到单片机,乍一想,已经是8,9年前了。
不过当时,教程各方面没现在这么完善,我就在网上买了个开发板,是没有配套视频教程的。
因为我有单片机的基础,所以我认为只要有每个外设的使用例程就可以了。
万万没想到的是,打开那些外设例程的时候,让我一脸茫然,这到底是什么鬼东西?怎么用GPIO点个灯这么复杂。
又要加载库文件,又要定义结构体,又要开启时钟。。。。。
开发模式完全跟我以前不一样,后面研究了才知道stm32可以直接用官网提供的固件库开发。
也就是直接调用他们的函数,就能把stm32的每个外设都用起来,不用去关心寄存器具体是怎么配置的。
如果你深入到固件库的代码,会发现还有一些汇编和c语言混合写的代码。
如果新手没经验,很容易走弯路,最近我们无际单片机编程有个学员就是这样。
他总是喜欢钻牛角尖,什么都想搞透,觉得自己如果不把库函数搞透的话,以后产品开发碰到问题了不知道怎么解决。
其实这种做法有好处也有坏处。
好处就是钻牛角尖你能理解地更加深刻。
坏处就是他钻的时机不对,当你编程水平还不足,产品经验也不足的情况下,盲目去钻研别人几年沉淀出来的精华,明显是不现实的,如果被你钻研透了,你就真的是天才了!
现实大多数人都是普通人,都要遵循正确的方法去学习,这样才能以最快的速度学会。
水平不够的情况下去硬碰硬,最后只能让自己遍体鳞伤,越学越迷茫,越学越焦虑,最后放弃。
学习STM32的重点应该是去学习他们的固件库怎么使用,先把库用熟。
即便我做这个行业10年,你让我不借助例程,自己去调固件库,自己通过寄存器去配置外设,我也做不到。
但是即便我做不到,依然不妨碍我用stm32单片机做产品。
所以,你知道作为一个工程师来说,重点在哪里了吧?
重点根本不在单片机,单片机只是工具,我们第一步就是能把它用起来,而不是去深究它为什么这么用就能把外设开起来。
如果你去钻这种牛角尖,光是stm32这个单片机都够你学5-10年的了。
实际开发产品程序的时候,前期会花几天时间把单片机外设开起来。
然后剩下大多数时间都是在写产品功能逻辑部分的代码,这个才是核心。
特别是像今年stm32价格突然暴涨10倍,一些公司会用一些别的芯片来替代。
试想一下,如果你把所有精力都放到学习单片机上去,那你的开发周期得多长,早都被老板干掉了。
不管学习任何一款单片机,核心都在于你的编程水平和思维。
就好比stm32这款单片机,他们的固件库大量用了指针、结构体和枚举。
这个时候即便你没学过stm32,但是你熟练c语言的指针、结构体、枚举这些,你大概都能看懂他们固件库的底层逻辑。
如果你不熟c语言这些知识,或者找不到好的实用的教程,可以去看我的视频教程,我对这3个知识点有专门的讲解。