【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
mcu的种类很多,生产的厂家很多。这里面有进口的,有国产的,并且国产替代的趋势越来越明显。但是,不管是进口,还是国产,使用方法都大同小异。除了硬件之外,软件开发的基本流程上面,也是几乎感觉不到区别。如果同学们在之前的开发过程当中,已经有了stm32开发的经验,那么几乎可以很快切到其他厂家的mcu上面去。那除了mcu切换之外,实际上还是有几个地方需要注意一下。
1、学习的时候可以优先选择stm32
学习它,主要是因为它的资料多。但是生产中用不用它,那就是另外一回事。因为到时候供应链、价格和可替代性,都是需要考虑的因素。但是对于新手来说,stm32的使用还是非常方便的。
2、多准备几个烧录器和串口
实际开发的时候,有可能会遇到多种烧录器,比如dap、st-link v2、wch-link等等。虽然st-link v2可以解决大部分问题,但是保不齐哪天烧录器坏了,如果因此耽误开发就有点得不偿失了,因此各种烧录器多准备几个就可以了,反正也不贵。usb转ttl串口也是一样的道理。
3、用好keil软件能解决大部分问题
除了像ch32v307这种risc-v的mcu,需要指定的mounriver IDE来开发。其他几乎所有的arm mcu都可以用keil开发。唯一的区别,就是添加不同厂家的pack就可以了。当然,这里面有的同学可能会用IAR、CubeIDE,这里面的差距其实没有那么的大。能解决自己问题的IDE,就是好的IDE。
本质上说,mcu的开发更加类似于linux的bootloader,只不过mcu的开发除了硬件之外,还涉及到业务的开发。所以大家使用不同的mcu,应该尽量忽略硬件的差异,而看到事物的本质,特别是业务后面的本质逻辑。从这一点说,大家关心的重点应该是用keil实现业务逻辑,而不是在不同的IDE之间跳来跳去。
4、尽量多使用厂家给出的demo代码
厂家给出的demo代码,几乎都是涉及mcu底层的代码,比如说gpio、uart、spi、iic、ad、dma、watchdog、usb、eth、tim等等。这部分内容通常来说,我们只需要拿过来用就可以了,并不需要过分关注里面的细节。等到出问题了,或者说压力测试通不过的时候,再来看也不迟。
5、掌握编译、链接、烧录的设置
虽然mcu在一颗芯片上集成了cpu、ram和flash,但是本质上它还是符合gcc toolchain的一套规则,即asm、gcc、ld、objdump、objcopy、gdb这套工具链。所以我们需要知道arm汇编语言、c语言编译、工程链接、map文件生成这些基本的原理。除此之外,我们还要知道ram用了多少、flash用了多少,每一部分中code大小是多少、read only data大小是多少,global初始化data大小、global 未初始化data大小、堆的大小、栈的大小、vector向量首地址,这些普通程序根本不会关心的信息,作为mcu开发者都需要知道的。
6、基本的电路阅读和电路调试
简单的电路只有数字部分,复杂一点还有模拟电路。我们自己来说,要看得懂电路,会用万用表量电压,会用示波器测信号,这些基本技能掌握之后,就会给我们的工作带来很多的便利。当然,要是顺手把焊接学习下就更好了。
7、单步调试是最好的学习方法
有了仿真器,其实就可以利用仿真器+keil做mcu的单步调试了,出了什么问题,基本都可以通过看汇编、看寄存器分析出来。这个时候有什么不明白的,除了看看代码,还可以结合芯片手册、万用表、示波器一起去分析,大部分bug都是这么来处理的。
8、重视软件分层和模块复用
虽然大部分mcu代码都是通过while(1) + 中断来完成的。不过,还是建议大家尽量做到代码复用,底层驱动隔离开,中间件做好移植,上层业务代码和底层解耦。平时开发用到的数据结构、算法、crc、pid、字体库、图形包,这些都整理好,最好能够做到,来了一个新的mcu,可以快速移植上去,实现想要的效果。这样,基本上mcu就学到家了。
9、借助于pc程序或者linux系统向上突破
mcu的频率、资源属性,决定了它比较适合做执行层的事情。但是复杂的协议分析、识别、定位和其他算法,这不是mcu擅长的,所以我们可以把mcu当成执行模块,去采样数据或者是执行动作,这样把最核心的部分放到上位机来做,一方面控制了成本,另外一方面也能从整体上提高系统软件的价值。
10、完成项目是继续学习的动力
很多同学掌握mcu之后,不知道如何进一步提升,方法就是做项目。这些项目可以是实际的项目,也可以是自己给自己安排的项目,这都没有关系。通过做项目,可以提升技术水平,关键是还可以通过市场反馈,确认下自己的能力是否可以match市场的需求,以及通过开发什么样的产品可以让自己获得收益。
一开始做的项目可以只是一个模块,等到后面日渐成熟了,可以开始设计产品、出方案。mcu本身既有硬件的部分,又有软件的开发,整体来说和市场接轨还是非常紧密的。