快捷搜索:  汽车  科技

stm32与51单片机编程有区别吗:有些人学STM32很吃力 为何学51单片机却觉得简单

stm32与51单片机编程有区别吗:有些人学STM32很吃力 为何学51单片机却觉得简单前段时间,一学生还和我说,他opencv特牛叉,和人合作了几个项目,细问下来才意识到,是openMV呀,就用了STM32h7的封装库,调了API,我问你知道xxx识别函数是如何实现的么,又回答了个三不知。害的我徒弟一块赶了好几天才重新做了项目。此次我再没用过我学校里的学生。一旦牵扯到硬件,实话没几年深耕是是入不了门的,千万不要看别人的吹嘘也别小看单片机。我们一般招人第一看年龄,第二看对硬件(主要是单片机)的理解。现在的学生教不了了。想起某年,我一学生(当然在他们同学堆里很厉害了),非要到我这里来,说是能“干掉”我的大徒弟,我信以为真让他负责了一档的项目。后来,随着项目期限越来越近,方案遥遥无期,还一个劲和我抱怨都不配合他:项目预算太低、开发平台太拉,根本跑不起来。我想不应该呀,遂让大徒弟抽空去跟进下。回来时大徒弟和我笑着说,这下够了,还是重做吧。我拿过来看了下,好家伙,本来STM8就能完全

从事硬件设计相关,也在大学里做过相关的教学工作。说下我的理解。

可能因为,你51也学得马马虎虎。

STM32虽然比51外设、时钟等高出很多,但是其核心差不多的。如果你写过几年汇编,那估计应该懂我说的哈。

stm32与51单片机编程有区别吗:有些人学STM32很吃力 为何学51单片机却觉得简单(1)

你觉得51简单,是因为你看到51例程没调用多少库,觉得就那么几种配置和IO操作方法。不信,你到相关论坛上找个51的量产的工程项目读读代码,估计你一样看不懂。

一旦牵扯到硬件,实话没几年深耕是是入不了门的,千万不要看别人的吹嘘也别小看单片机。我们一般招人第一看年龄,第二看对硬件(主要是单片机)的理解。

现在的学生教不了了。

想起某年,我一学生(当然在他们同学堆里很厉害了),非要到我这里来,说是能“干掉”我的大徒弟,我信以为真让他负责了一档的项目。后来,随着项目期限越来越近,方案遥遥无期,还一个劲和我抱怨都不配合他:项目预算太低、开发平台太拉,根本跑不起来。我想不应该呀,遂让大徒弟抽空去跟进下。回来时大徒弟和我笑着说,这下够了,还是重做吧。我拿过来看了下,好家伙,本来STM8就能完全实现的,人家硬撑到了32f4,还和我抱怨是他好容易才实现的功能。我看了下代码更糟糕,大段大段的重复代码,他自己的代码几乎没有用到过指针,更不用说函数的指针了。库倒是调了不少,感情是个API“高手”。我指着一个库的函数问他,这个函数是怎么实现的,他回答不知道。我告诉他,这个函数实现的功能很简单根本不用调库,自己写一个又快又省空间。还有,你这个一大段一大段的,其实代码形式是一样的,完全可以写成一个函数。人家回答:这又不是形参怎么调?......

害的我徒弟一块赶了好几天才重新做了项目。此次我再没用过我学校里的学生。

stm32与51单片机编程有区别吗:有些人学STM32很吃力 为何学51单片机却觉得简单(2)

前段时间,一学生还和我说,他opencv特牛叉,和人合作了几个项目,细问下来才意识到,是openMV呀,就用了STM32h7的封装库,调了API,我问你知道xxx识别函数是如何实现的么,又回答了个三不知。

所以,大学里虽说是普适教育,但也不能太浅。能用的上的最好还是我徒弟这样的出社会了还再进阶培训过的,比较保险。

STM32知识点比较多,用轮子的感觉更强烈,需要你一上来就按一定的规定来,不允许你啥都没学就基于朴素的直觉。

比如说单片机里的hello world,点亮一个破灯,假如说是低电平点亮

51里main的代码差不多是这样的:

#includevoidmain(void){

P1=~1;//1111 1110while(1);}

而且这样就够了。对于一个学过C的人,很简单嘛,头文件要有,P1这个"变量"的值会反应到电平上,0是低电平1是高电平,轻轻松松。

而STM32,拿F103用库函数的版本来说,main里的差不多是这样的

#include"stm32f10x.h"intmain(void){

GPIO_InitTypeDefA;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ENABLE);

A.GPIO_Mode=GPIO_Mode_Out_PP;

A.GPIO_Pin=GPIO_Pin_5;

A.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOB &A);

GPIO_ResetBits(GPIOB GPIO_Pin_5);

while(1);}

就算我有意把GPIO_InitTypeDef起名为很短的A,依然有很多避不开的、又长又臭的东西

(当然你如果有一定的编程素养又知道STM32怎么运作的,会觉得这些名字都很朴素而简明,然而新手可不见得这么想)

就算你静下心去解构,去了解相关知识点,也会发现——卧槽时钟是什么东西,推挽模式是啥玩意,为啥要初始化配置端口啊,那么多个模式都啥意思咋选啊。

要是C的底子没那么好,可能听到宏啊结构体的,再看到取地址人都傻了。

(当然你也可以不调库自己去写寄存器,但这些流程依然是避不开的,依然要去找手册然后写那些东西,工作量不见得比调库轻松。)

尤其注意到,这里有两个点。

  1. 有的人可能自己发挥很厉害,但他在初期不是能那么容易快速接受一套别人规定的流程,直到他混混沌沌地,在冥冥之中对这些渐渐熟悉了,才开始接受。
  2. 有的人是必须知其所以然才能前进的,你告诉他有个功能,他就会纠结为什么这个函数有这个功能,他会纠结于为什么是这样的,一定要知道为什么办到了才能拿去干活,他很难先把事情放一边,能用就行,然后继续前进。

这两类人甚至有很大交集。

stm32与51单片机编程有区别吗:有些人学STM32很吃力 为何学51单片机却觉得简单(3)

所以教STM32有时还有个认知灌输的问题,你要么把他们的这种思想抹杀掉,引导一种更高效率的新思维与学习方法,要么作为一个经验老道的人用最简明最核心的回复解答他们的疑惑,然后往下走。

然而,如果没有人带,他们纯粹是看资料自学呢?那就太看他们的自学能力了。尤其很多人一吃瘪不是亢奋而是难受,积极性会下降,有很严重的恶性循环。

其实STM32早期不要去想为什么,而是接受,速度就会很快,剧本就会变成要用相应的端口就要使能相应的时钟,可以在代码里快速找到挂着哪个时钟,查手册也行,模式的话先这么用着不急着知道为什么,整个流程是这样的。

愿意通过接受更多新知识,而不是试图从旧知识推出新知识,也不总是纠结于细节的学习,主要任务在于熟悉它、应用它,就容易高歌猛进,等学得差不多的再去把主要精力放在折腾为什么,效率会高很多。

stm32与51单片机编程有区别吗:有些人学STM32很吃力 为何学51单片机却觉得简单(4)

不要被什么“你这样只是很肤浅的理解”的观点所影响,有些事情不是不做,是晚点做而已,总时间会比很多啥都不懂就开始纠结底子又不好又没人带的人要短得多,要这样想。

尤其是,功能做出来之后再折腾细节会更容易把握自己有没有没理解错,也不容易因为功能还没做出来而心急分心。

忘了在哪个警匪片的片段看到这么个台词,大意是进入一个地方不要想着按自己的思路怎么来,先玩明白它是怎么运作的,我觉得这种观点套到学习上也一样。我也是培训老师,嘿嘿,先找我拿一份入门的全套资料自学看看吧,我把顺序和难易程度都标住了,看完了觉得还想进阶可以买我们的课。不买也交个朋友,我们佛系的很的,有问必答。

猜您喜欢: