不知道大家有没有这样一种感觉?
虽然市面上STM32的教程很多。
很多新手从51单片机过渡到STM32依然有点水土不服。
很多教程刚开始看,就感觉一脸懵逼。
我总结了一下,主要有以下几点不适应:
1.开发模式变了
51单片机主要以配置寄存器去使用外设,而STM32则直接提供标准库和HAL库调用使用外设。
使得大家需要去熟悉库,才能把外设用起来,而官方的库使用了很多c语言高阶编程,比如说面向对象编程思维,实现这种思维主要以指针、结构体、枚举等。
如果你的c语言基础不好,库里面很多代码看起来都很吃力。
2.外设资源更丰富了
STM32涉及到很多概念,可能之前都没接触过,例如时钟系统、DMA、NVIC等,需要花费一些时间去理解和掌握。
3.配置过程更繁琐了
我们在学习STM32开发时,需要对芯片进行一些繁琐的配置,例如时钟配置、GPIO配置、定时器配置、USART配置、中断配置等等,这些比51单片机配置起来更复杂。
主要是要适应这种开发方式,库用熟了以后,你会发现STM32比51使用更简单。
虽然现在教程都讲得非常细致,但是我觉得并不利于新手学习。
第一个是很多专业的概念,理解起来比较费劲,一个知识点可能牵扯出更多的不可理解的知识点。
第二个是教程过于系统,基本把STM32每个外设都讲了,其实很多外设实际用得很少,但是学习需要付出大量时间,导致学习周期太漫长。
我认为学习STM32这种级别的单片机,最好的方式就是通过项目去学习。
我学STM32的时候,正好公司碰到了一个新项目需要STM32做。
在此之前,我已经做过几个基于51单片机的项目,也改过基于NXP单片机的项目代码。
所以对不同单片机配置流程有一定的了解,c语言基础也还可以。
项目很急,没有时间给我系统去学STM32。
我就在网上购买了一个STM32开发板。
这已经是2012年的事了,我买开发板的目的主要是想要每个外设的例程,当时还没有视频教程。
我看项目需要用到哪些外设,然后先在开发板用例程把外设调通,再把代码复制到项目里,改改参数,比如说改改GPIO、改改定时器中断时间、改改串口引脚。
大概花了2周时间,项目涉及到的外设基本都成功用起来了,剩下的时间都放在做项目功能上。
说起来有点搞笑,我一直都觉得自己误打误撞,正好撞对了STM32正确的学习姿势。
为什么我认为通过项目学STM32是最好的学习方式?
1.基于实际需求
通过项目学习,可以更好地基于实际项目需求,去学习STM32相应的外设,这样可以避免漫无目的学习,更能够让初学者感受到学习的价值和实际应用。
学STM32一定先要用起来,比如说外设初始化代码先配置好,先把外设调出来,再通过代码去理解理论,通过理论去配置外设,时间至少多几倍。
所有单片机外设都大同小异,单片机只是工具,关键是通过项目你才能深刻理解每个外设到底有什么用,实际用在哪里。
2.综合应用
几乎每个初学者都会碰到一种情况,花了大几个月通过开发板学STM32,学完以后让你用STM32去做项目,一脸懵逼。
这是非常普遍的现象,跟开发板定位有关,开发板的定位是教你学会某款单片机。
而对于项目,单片机只是很小的一部分,更多的是项目综合功能的整合。
比如像无际单片机特训营的项目
单片机外设调通一般就不会去深究它,有90%的工作量都是实现项目功能,比如433M无线数据解码算法、菜单UI系统、温湿度采集、触摸按键检测、语音提示、无线探测器组网、和WiFi模块、4G模块通讯实现APP控制、电话功能、短信功能、还有固件远程升级功能等。
对于做项目来说,你会用单片机外设和精通单片机外设,对做项目来说没什么区别。
而你的编程思维和代码水平,才是项目能否做稳定的关键因素。
那问题来了,既然如此,为什么要花这么多时间去深究单片机?而不是培养编程思维和代码水平?这不就是明显的走弯路吗?