0 系列文章入口
嵌入式适合哪些人学
本专业的学生
主要是电子类的学生,比如电子信息工程、通信工程、自动化、机械电子工程、仪器仪表等专业的学生,本人就是电子信息工程专业。计算机科学、软件工程之类的也可以学,但是这些偏纯软件方向,可能去BAT之类的是更好的选择。
纯软想转行的工程师
现在互联网看似接近饱和,移动互联网带来的春天已经过去,头部APP结束了神仙打架的斗争,移动互联网已经渗透到生活的角角落落,打个车,买个菜都要用个APP,纯软找工作没有之前那么吃香了。反而是电动汽车、智能家电、无人机、机器人等大放异彩,开辟出了新的千万亿级别的市场。纯软有着软件开发的先天优势,加上现在的嵌入式系统本身好多都已经基于linux、andriod等操作系统平台,越来越脱离底层硬件,偏向纯软件开发,纯软件工程师转行也不失为一个好选择。例如下图中基于linux的核心板,已经完成了最新linux 5.4内核版本操作系统的驱动支持,软件开发完善,并经过长时间老化测试、高低温测试、通断电测试,测试后性能稳定,且核心板的外形小巧,尺寸仅为37mm*39mm,采用邮票孔封装焊接到底板,稳固不易松动,可适应于工程机械产品严苛的工业环境要求。核心板实现OTG,TF卡多种烧写方式,预留140个引脚的外扩接口,其包含了丰富的外设资源,便于灵活开发应用。
敲黑板:真的只要写应用层就可以了!!!
图1 基于linux核心板的嵌入式开发
电子爱好者
如今知识传播的方式和速度都有了质的飞跃,各种电子模组层出不穷,不是科班出身,也能玩转嵌入式。嵌入式开发越来越像搭积木,想要语音识别、人脸识别、图像显示、联网通信都有相应的模组可以购买,无需研究模数转换、信号处理、电磁场电磁波等等高深学科。甚至自己的主控芯片都可以不了解,Arduino对芯片底层进行了封装,MicroPython还支持使用Python语言操作硬件例如OpenMV。直接像写纯软件一样调用函数接口,就可以操作硬件电路。什么晦涩难懂的寄存器、硬件驱动统统不用管,也能开发出很牛的作品。
图2 基于Python开发OpenMV
嵌入式学什么
如果只是爱好者,我建议就学arduino就够了,十几块钱买个esp8266或者二三十买个esp32就可以玩起来了,教程特别多,还可以连接互联网,我不在这里赘述,我自己后面也会分享基于arduino的设计。对了arduino是一个组织,不是一个单片机型号,他们把常见的单片机的底层进行了统一的封装也就是硬件抽象,比如stm32、avr、esp8266等等,在不同型号的的单片机上开发感觉都一样,不用关心底层。缺点不能直接和硬件打交道,所以没有那么灵活,实时性也差一点,建议本专业的还是不能止步于此。arduino是基于c++的,当然只是使用的话用c那部分内容就够了,没必要自己造一个对象出来。嵌入式的话c是肯定要学的,会c++就更好了。这里涉及到面向对象还是面向过程编程的知识,暂时按下不表吧。
如果是本专业的学生,我觉得可以从stm32起步,因为资源实在是太多了,硬件驱动都可以用STM32CUBEMX自动生成了。
图3 基于STM32CUBEMX生成硬件驱动
还有就是学好专业课,c语言、微机原理、数字电路、模拟电路、信号与系统、控制工程、电磁场与电磁波,相信我以后多多少少都能用上些。就算是不知道有啥用,光想卷高分考研进大厂也必须学,嵌入式行业大厂和小厂就不是一个职业感受。进阶方向的话还是要向ZYNQ(ARM+FPGA)、实时操作系统、嵌入式AI、控制算法等有难度的挣钱多的方向。
Talk is cheap Show me the CODE!
8051单片机串口收发
以下是一个基于标准8051单片机(假设使用11.0592MHz晶振)通过软件模拟实现接近115200波特率收发的简单示例。请注意,由于标准8051的定时器限制,直接实现115200波特率可能不太精确,但我们可以尽量接近。
首先,我们需要配置单片机的串口(UART)为模式1(8位可变波特率,无奇偶校验位,1个停止位)。然后,使用定时器1来生成接近的波特率。
#include <reg51.h>
#define FOSC 11059200UL // 晶振频率
#define BAUDRATE 115200 // 目标波特率
// 计算定时器重装值(这里为了简化,直接给出一个接近的值,可能需要调整以达到最佳效果)
#define TH1_VAL ((65536 - (FOSC / 12 / 32) / BAUDRATE) >> 8)
#define TL1_VAL (