stm32达到什么程度叫精通?:不请自来,作为一名长期使用STM32单片机进行开发的老司机,来回答一下这个问题。首先、掌握单片机的硬件电路设计是基础单片:-stm32,
不请自来,作为一名长期使用STM32单片机进行开发的老司机,来回答一下这个问题。
首先、掌握单片机的硬件电路设计是基础单片机电路设计是基础,尽管现在单片机已经进化到SoC的阶段,大部分常用功能模块单片机已经集成了,比如、USB、CAN、LAN、LCD、Camera等等,但是仍然需要搞清楚电路逻辑和代码之间的接口逻辑,比如、模块的地址、如何给模块上电、断电、复位、打开/关闭等。如果你的团队软件和硬件是分开的,那么你的电路设计需要输出一个软硬件接口文档给到软件工程师,通过这个文档,软件工程师能够顺利实现Driver层代码设计。
如果说硬件是一个产品的执行机构,那么软件程序就是一个产品的大脑,代表了一个产品的灵魂,我们通常说一个产品不好用不人性化,最多的原因是软件设计方面的问题,硬件也有,但是相比软件方面的设计缺陷要少的多。因此,一个良好的单片机软件设计是一个产品的重中之重。
那么如何STM32软件编程呢?采用倒推来罗列一下:
掌握C语言程序设计,主要用到的是C语言,掌握C语言设计必不可少。
掌握软件编程开发环境的使用方法,比如Keil和IAR的集成开发环境,通常我们代码就是在集成开发环境中编写的,包括代码编写、编译、调试等等。
掌握软件调试方法,可以说软件调试占据了软件开发绝大部分时间。调试器的熟练使用是软件代码排除Bug的利器。通常语法方面的错误编译器在编译阶段可以给我们提示,不符合C语言语法就编译不过去。但是代码编译过并不代表就符合实际项目需求,比如逻辑上是否正确、时序上是否满足要求、指针有没有越界等等问题必须在代码实际运行的时候才会表现出来。Bug的定位分析,通常需要分析软件执行的过程和时序,调试器进行单片跟踪调试就成为必不可少的利器。
调试工具可以使用集成开发环境自带的调试器配合ST出品的ST-link系列进行。
第三、根据实际项目需求进行选型并编程实现项目需求是目的掌握了硬件和软件设计,可以根据项目需求进行项目开发了。根据项目原始需要说明文档并对原始需求说明文档进行分析,输出可以满足项目需求的初步的设计文档。这其中就包括单片机选型,软件设计等。选择性能过剩的单片机,必然会带来成本的增加。当然这不是定死的条件,通常考虑性能、成本、公司的归一化采购等等问题。
最后、高手进阶永远在路上高手分为狭义上的高手。
狭义上的高手,比如你就只是想成为,一个harder或者coder,那么你只需要学习硬件电路设计技术即可,比如,EMC/EMC、高速电路设计和电路稳定性等,或者掌握熟练掌握C语言编程技术、编程算法、嵌入式系统编程等等。
广义上的高手会再进一步,了解具体领域的发展动态,比如,机器人、无人机、机器学习等等,并根据领域的发展、新事物的出现补充新的知识。
你想成为哪种高手呢,欢迎留言。
2我们正在招聘精通STM32单片机的高级工程师,但是很遗憾,目前来面试的都很少能够达到我们的标准,目前给到的薪资是25k-30k,坐标北京,下面说一下我认为的精通。
对stm32的内部功能模块非常熟悉,举个例子,如果我们的产品需要对这款芯片进行加密,你可以提供什么方案,需要操作那些寄存器,流程是什么,批量生产是否可行。
可以快速定位问题并提出解决方案,举个简单的例子,研发中的一款板子,串口不输出数据了,如果查找问题,从哪里入手,是否能够从蛛丝马迹中抽丝剥茧,找到本质的问题。
IAP升级是进阶必须掌握的,如何编写bootloader,bootloader和app之间在flash中如何分区,烧写发生错误了,如何处理,flash是否够用,这都需要你考虑
问个简单的问题吧,如果可以回答,欢迎来我们公司试试面试,如何修改stm32程序运行的起始地址。
精通stm32只能算做是工程师的入门 无论你是用ST还atmel那一家的芯片 都只是提供了一个平台而已 设计最核心的是编程思想和算法 算法是机器的灵魂 就好比人类的思想。 我举个例子 假如你做一台机器人 硬件部分大同小异 但是你想让这个机器人智能化 会思考 会学习就要靠我们人类编写的核心算法了。机器越智能设计人员的水平就越高。
下面我说一下怎么才算精通了stm32
精通stm32你必须要先精通c语言,我碰到很多刚毕业的学生都自称精通c语言,但是一问指针和结构体就不会用了,而指针和结构体的结合使用又是c语言的精髓,学习结构指针有个很好的办法就是去看ST提供的标准库 看里面的寄存器映射,熟练应用了结构体和指针写程序的时候能让你事半功倍。
掌握了c语言然后就是开始学习stm32的操作,最基本的要熟悉的就是stm32的时钟结构 ,io操作 定时器应用 adc dma和各种的通信接口. 就是芯片手册上写到的stm32外设的都要熟练应用 因为stm32可以做的项目太多了 不同的项目可能需要用到不同的外设 例如电池供电的项目要做低功耗 你要考虑stm32的电气参数 stm32L系列的选型。 控制bldc电机需要用到高级定时器等。 只有把这些所有的外设都熟练掌握了 做项目的时候用到那个外设都能轻松应对 这才算是是你精通了stm32。写程序的时候库操作和寄存器操作结合使用效率会更好。
精通了stm32,各种外设没有问题了 剩下的才是真正考验水平的时候。程序框架的设计 程序稳定性 出错机制的设计 算法的优化等 做设计这条路 进无止境!
4
作为一个点灯工程师,插一句嘴,个人拙见,见谅勿喷。我的意见是,对于使用者最不必思考精通的意义。
1、STM32是什么。当然,对于大神而言这是个很愚蠢的问题,但是对于我们使用者而言这是个值得思考的问题。ST每年都会在中国举行峰会,今年的深圳场估计还是马可波罗那。每一次会上一般都有新的片子亮相,同时在不同的展厅也会有不同方向的方案商。当然,我这种人也不是什么厉害的角色,去展会无非就是看看开发板和蹭饭的。峰会过程中会送开发板,自助餐免费,而且挺豪华的,程度上是两个海底捞吧。去年的入场券是在电子发烧友那领取的,大家也可以去关注一下。
STM32峰会
所以,对于我们而言已经是方案下的使用者了。当然,这里不包括一些特殊的厂商。有一次我去一家企业面试,我当时说我测温度用的是LM75和MAX30XX这类的IIC通信IC测。人家说,你这是不行的,我们都是使用ADC+自己的模拟的电路测。
说到这里,只是想说,如果不是在所谓的方案商,那么我们做的工作就是应用型而不是研发型。这里不是说咱们不能做研发,而是时间不允许。真正的工作中一般不是使用一种单片机,我们公司以前有个测量的方案:刚开始是STM32F103+蓝牙模块,后来就直接换成dialog的一款蓝牙SOC(就是小米手环里面使用的主控芯片)。
所以,归根结底一句话:STM32是实现功能的一个工具,我们是使用工具的人。
2、怎样使用STM32。这个问题,似乎不是问题。其实,它是。
一方面,就以现在最普通的分类来看,在使用STM32上就会有电子工程师和嵌入式软件工程师(STM32)两个大类。因为前者是软硬件都需要负责的,也就是说不同的系统里STM32的单片机原理图、PCB图都需要涉及,甚至边上的模拟电路也逃不掉。STM32也只是需要的技能之一,其他的东西也缺一不可,四个脚的桌子少一个脚都不稳。
反正在我接触到的工程师里面,比较厉害的我们杰哥18转到硬件工程师了,我现在的经理也不怎么插手板上的模拟电路。我所在的公司不是特别大,安卓、iso、结构,也就十来个。在这样的公司里,分工已经很明显了。
以前面试过的一家医美产品公司,嵌入式软件工程师(STM32方面)单单就管驱动为主,还是就是一个RTOS。到网站上一搜索应聘需求,要求有几年的工作经验,会C语言(当然,有些岗位JD就喜欢写精通C语言),然后就是外设USB、ADC、Timer、IIC、SPI的应用,附加一些LWIP、ucos、freertos的要求。简化为,能写驱动,会操作RTOS,应该是能够找到一份工作了。
单板
另一方面,除了传统的单片机(STM32F1、F4、H7),ST还开始出一些能够跑Linux的板,那么这里的Linux是不是也该囊括进STM32?这只是个玩笑啊,大家不必当真。因为我是不会徒手写Linux下的UBOOT的,心理上不会,能力上也不会。在这里,如果会移植uboot、Linux kernel 也是能混口饭吃的,所以并不是人人都要精通。
如果是信号采集,那就只想着ADC、Timer这些外设+外部模拟电路怎么用;如果是运动控制,那就应该是另外的内容了。当然,一些PID的理论可能也是必修。
同样,从应用的角度出发,以平均水平来说,STM32的岗位薪资天花板比Linux下的驱动、uboot移植工作的薪资低一些。从业方向上也要窄一些,一些通信、半导体、互联网企业一般不招单片机,在这里可以在51job网站搜搜华为、腾讯的需求。
3、怎样评价自己STM32的掌握程度有些同学在大学的时候就接触单片机了,毕业后也一直从事相关的工作,就像我杰哥和经理,但是也没听说他们精通单片机。当然了,我只是个混饭吃的水平,离这个要求就更远了。
一方面,要知道自己对一门技艺掌握的怎样,自己打分并不合适,可以往自己觉得差不多的岗位投几份简历。其他地方不是很清楚,就深圳而言,单片机的某些岗位学历可以放宽到初中和应届生。就我以前的工作而言(非月薪1W+),似乎也没什么技术含量,刚刚进公司的时候也就是焊接主控IC和一些外设电路。只要用心,这是最重要的一条。如果是有工科类的基础,那就更好了。
真正对某一款单片机达到熟练的使用程度,似乎没有太多的技巧,那就是花时间在项目上,不停地打磨。在这个过程中多干活,少挑刺,做软件编程也可以画画原理图啥的,对加深理解有很大的作用。
如果在工作中,我建议不要频繁跳槽,除非有了新的发展规划。技术的掌握不仅仅是需要时间,还需要一定的环境。每次换一个新的工作环境,一般都需要几个月的时间熟悉新环境。这个时间的花费是值得的,但是如果频率太高那就该注意了,因为不停倒车人会很累还不见得一定能早到。
另一方面,现在有很多的电子论坛网站,一般会有一些活动、比赛。感兴趣的话,大家可以下去了解一下。送开发板、模组比较多的有:电子发烧友、面包板社区。在交流中也能发现自己的优势和短板。
我的意见是,对于使用者最不必思考精通的意义。学习STM32,无非就是兴趣和饭碗。我们要做的就是保护兴趣和饭碗,在时间的打磨下慢慢就熟。如果岗位JD上写着精通,那么要么招总监,那么就是这个岗位JD可能是复制、粘贴的。
5精通stm32这个描述是有明显逻辑问题的。对于这个问题分学生简历或者工作简历来说有那么一点点意义。
stm32作为一款芯片代表的范畴和意义是很大的。第一层,stm32作为意法半导体的主流产品,产品本身包含arm指令,封装,开发工具设计等相关产业链。所以第一层次的精通是从芯片设计和应用本身,这是对于芯片开发厂商的研发人员来说。
第二层,很多公司利用stm32做产品应用对应用的熟练程度和方向是不一样的。比如,有用stm32做开发板的厂家,移植操作系统和每个外设的例程是重点工作,大而全但不精。有些厂家仅仅用stm32来做串口服务器,那对于串口这个外设本身的应用包括中断,查询当时的应用开发,软件架构的设计等等,侧重点是不一样的。
因此,对于精通stm32这个宏大的话题来说,对于学生简历侧重对基础知识比如c 语言的了解和外设的简单应用。对于从业人员精通的概念应该为用stm32做了多少项目,对于技术应用的理解多于对stm32本身。说到底stm32就是个单片机,属于嵌入式开发范畴。
6既然谈到了精通,那就要看看精通是什么意思。我们可以在网上搜索一下精通的含义。
我们看到精通的基本解释,就是透彻理解并能熟练掌握,主要包含两个方面,一个是透彻理解,另一个是熟练掌握,简而言之,就是理论和实操都得很牛。那接下来我们就把这两个概念套入到STM32单片机上。
其一就是要透彻理解STM32的理论知识,比如STM32的存储器和总线构架,STM32各个系列芯片所包含的外设功能,像是时钟,GPIO以及复用,中断,DMA,ADC,DAC,各种高级基本通用定时器,PWM,看门狗,FSMC,SDIO,USB,串口,IIC,SPI,CAN,以太网控制器等等,等等吧。你首先得知道STM32这个单片机,能够提供给你什么样的工具,以便来解决你实际项目开发中所遇到的各种问题,正所谓水来土掩,兵来将挡,如果你连手下有什么将领都不知道,那必败无疑。
其二就是熟练掌握STM32的使用,也就是实操部分。理论知识我们可以通过阅读各种书籍,技术文章或是ST官方的芯片手册编程手册等来加深我们对STM32的理解和认识。那么实操部分想要达到熟练的程度,就要具备非常多的实战项目经验了,一个好的将军一定要在真刀真枪的实战中来磨炼,来培养。所以你所具备的实际项目经验是考核你是否真正精通STM32的一个重要依据。
如果说真能达到精通的层次,还是一定要理论和实操,双剑合璧融为一体。其实单片机开发非常考验技术人员逻辑思维能力,以及数据抽象能力。同一个项目,不同的数据结构,不同的算法,最终到达的效果可能有天壤之别。而这种能力,也只有在真刀真枪的实战中才能得到锻炼和提升。
7作为曾经搞过一段时间STM32板子的来答一下。
首先,精通就好像我们高考时大纲里面对各个知识点要求的等级一样,是一个相对的描述性词语。精通可以是对于底层的原理以及STM32指令架构等内容很熟悉,理论上很精通。也可以是在应用上很精通,当然这个 就很实用主义了。比如使用STM32完成过很多复杂的项目,使用起来得心应手。
其次,STM 32也分为好多版型,但是基本的指令架构还是相通的,个人建议先从小的项目出发,根据项目的需求,逐个学习基础知识点。当一个人可以独立完成一些项目的时候,感兴趣的话,可以深究一下指令架构以及底层的汇编语言的知识,这样也就有一定的深度,达到了熟练应用的程度。
最后,相信山外有山,人外有人。永远都有人比我们更厉害,保持一个求知若渴的心态,不断学习,终有一天会达到别人眼中的精通的。
以上为个人的拙见,欢迎交流。
8只敢说熟悉,哪敢说精通,99.9%都不敢说精通,主要能满足需求的同时,写出工整漂亮的代码,好维护,无bug就是此刻的精通
9要谈到精通,就必须要对这个片子的本身及其相关部分都有一定的了解,简述如下。
1.STM32是基于ARM的单片机系列,因此,对于其核心ARM的体系结构及编程模型必须有所了解。
2.作为一个ARM系列,必须对系列产品的特色有所了解,对各个型号的基本配置做到熟悉,以便应用方案选型时能游刃有余。同时也要对各种相关品牌的类似产品有个对比认识,各自优缺点分别是什么。
3.对于系列产品的内部外设及常用接口熟悉,各个模块的应用有所了解。
4.应用开发过程所涉及到的产品生态有所了解,供应渠道,价位,技术支持等有所了解。开发工具,编译调试工具链,实时内核及各种服务移植熟悉。常用库的熟练使用等。
5.量产相关固化方式,固件校验与加密,问题分析与解决,产品缺陷等等。
以上基本上可以支撑一个STM32中级工程师。但作为非原厂或者一级代理,几乎不会有STM32高级工程师或专家这种提法,嵌入式应用领域做到高级,一定不会拘泥于平台,而是做到超脱。因为作为应用者,单纯弄一种平台永远是坐井观天,成长不起来的。
10不清楚什么程度叫做精通,本人用stm32已经10年,涉及f0,f1,f4,接口涉及spi,usart,i2c,can,sdio,软件涉及汇编,ucos项目中代码量二级优化在无大于64字节的const下编译后bin超256k,项目需求都能满足,满足不了的也通过别的方式实现。但是我觉得我不敢说精通,平时遇到问题还是会查阅手册还有上网查找解决方法,还好这十年使用遇到的问题都能解决掉。