目录
1 面试问题 2
1.1人事面试 2
1.1.1自我介绍 2
1.1.2上家公司是做什么的,公司什么时候成立的,地点在哪,规模多大, 老板是谁,人数有多少?公司各部门组成,研发部门有多少人?产品开发流程?项目小组多少人,怎么配比? 2
1.1.3为什么要离职? 2
1.1.4上家薪资多少钱?薪资构成? 3
1.1.5接下来规划? 3
1.1.6期望薪资 3
1.1.7你的优缺点是什么? 3
1.1.8 你在上家公司主要是做什么内容? 3
1.2技术面试 3
2 项目总结 3
2.1 家装多功能甲醛智能检测仪 3
2.2 智能家居助手 3
2.3 智能门锁 3
2.3.1 项目总述 3
2.3.2 项目功能详细介绍 4
2.3.3 项目开发中遇到问题以及解决方案 8
3 MCU技术总结+面试题 8
3.1物理接口 8
3.1.1 SPI 8
3.1.2 IIC 10
3.1.3 UART 10
3.1.4 RS485、RS232 10
3.2 内核相关 10
3.3 片上外设相关 10
3.4 操作系统 10
3.5 IAP、低功耗 10
3.6 Cubemax、LVGL 10
4 Linux技术总结+面试题 11
5 C语言相关知识+面试题 11
1 面试问题
1.1人事面试
1.1.1自我介绍
面试官您好我叫肖文杰,毕业xxxxxx,xxx专业。 有近一年的嵌入式开发经验 之前在郑州的一家公司做嵌入式开发,做过智能家居助手、内网监控管理、家装多功能甲醛智能检测仪三个项目,我觉得我比较符合咱们公司发布的招聘岗位要求标准同时我也很心仪咱们因此公司来参加这次面试,我是一个善于沟通乐于沟通的人,有很高的团队合作意识和责任意识同时也有很好的钻研精神和自学能力喜欢不断地学习新的知识精益求精。咱们公司的薪资待遇和发展方向与前景非常符合我的期待,所以希望在以后的日子里有幸能够和您成为同事和伙伴。
1.1.2上家公司是做什么的,公司什么时候成立的,地点在哪,规模多大, 老板是谁,人数有多少?公司各部门组成,研发部门有多少人?产品开发流程?项目小组多少人,怎么配比?
物联网系统软件开发,物联网技术开发、技术服务;智能控制系统;、机械设备、嵌入式电子产品、通讯产品、计量器具
河南云控物联网科技有限公司成立于2018年06月22日
在郑州市高新区西四环
规模大概三十多人左右
赵艳伟,丁 留 冰
公司由 行政部 4 销售部 研发部 研发部 9 个人
先立案 - 需求分析-得到信息和产品架构-产品总体方案设计-软硬件设计-软硬件详细设计-软硬件调试与验证-产品软硬件联调-软件测试-软硬件集成测试-样机测试-交付
按项目分配
1.1.3为什么要离职?
因为临近毕业的时候忙着毕设和论文的事情需要经常请假回学校我自己也不太好意思,然后就是毕业想着来深圳这种大城市多奋斗几年,涨涨阅历
1.1.4上家薪资多少钱?薪资构成?
5000多 一天200
1.1.5接下来规划?
接下来规划 如果入职的话 先好好熟悉公司业务抓紧时间多学习习提高自己做项目的能力和技术水平,正式工作一年以后多学习 Linux 相关知识和前沿知识,长期然后如果能晋升也不会放弃晋升机会。不断学习新技术和积累项目经验。
1.1.6期望薪资
8-10k
1.1.7你的优缺点是什么?
我的优点是 比较能团结团队 乐于助人比较有活力,思路开阔,能把工作看作是对自己有提升的事。缺点是偶尔会有点马虎因为知道这个问题,一般在完成前会反复确认。
1.1.8 你在上家公司主要是做什么内容?
上家公司主要做嵌入式软件的开发,和环境的搭建,也会参与项目需求的分析
1.2技术面试
2 项目总结
2.1 家装多功能甲醛智能检测仪
2.1.1项目总述
家装多功能智能检测仪 主要检测甲醛浓度 二氧化碳浓度 空气质量(空气有机物含量)烟雾浓度 空气的温湿度以及室内的光照强度 也可以通过 wifi 接入网络 实现从网络获取时间天气,同时还有智能语音播报模块,能够播报当前采集到的各种数据和时间信息 并且配备了 2000ma 的电池可以进入低功耗模式 待机时长能够达到 1-2 个月 同时支持 IAP 本地系统升级
2.1.2 项目详细功能介绍
功能总览:
烟雾浓度检测
光照强度测量
甲醛浓度、二氧化碳浓度、VOC
温度、湿度
语音播报
屏幕显示
耗电
甲醛浓度检测、空气质量、二氧化碳:
型号是 KQM6600
物理接口: UART(串口)
进行通信 在项目中是 UART4 波特率为 9600 voc(有机物含量) ch2o(甲醛浓度) co2(二氧化碳)
每次传输八个字节 每秒传输一次 地址码 + H1 + L1 + H2 + L2 + H3 + L3 + 校验值(和校验) 高位整数 低位小数
UART GPIO 模式为 浮空输入 输出为
需要配置:开启时钟 配置 、 GPIO 、UART4 、波特率、配置中断优先级开启中断
烟雾浓度检测、光照强度:
开启外设时钟,配置ADC的时钟分频系数,低于14Mhz
配置ADC用到的IO口,配置位模拟输入模式
配置ADC的工作模式,规则组还是注入组、扫描模式还是单次模式或者循环模式、触发方式软件触发还硬件触发、数据对齐方式
配置通道的转换顺序
使能ADC
校准ADC
读取数据流程:
开启ADC转换
等待ADC转换完成
读取数据寄存器中的数值
DMA:
开启时钟、设置单次传输数据个数、设置数据源、设置内存地址、设置数据宽度、内存地址自增、循环搬运、通道优先级
空气温湿度:
型号:DHT11
物理接口:单总线
通过时间来进行数据传输 先延时 20ms 表示接收 一次传输 40 位数据 8+8+8+8+8
时序:
空闲高电平
先拉低至少 18ms
主机拉高 20-40us
发送 80us 的低电平响应信号
DHT 拉高 80us
开始传输数据
当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态
配置端口,开启时钟
wifi 模块:
型号:ESP8266
物理接口:UART
链接网络(MQTT):
是一种基于客户端-服务端的发布/订阅模式。与 HTTP 一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。
三种身份:
发布者、代理、订阅者。发布者和订阅者是客户端,代理是服务端, 发布者同时可以是订阅者
MQTT会构建底层网络传输:它将建立客户端到服务器的连接,提供两者之间的一个有序的、无损的、基于字节流的双向传输。
应用数据通过MQTT网络发送时,MQTT会把与之相关的服务质量(QoS)和主题名(Topic)相关连
MQTT客户端作用
发布其他客户端可能会订阅的信息
订阅其它客户端发布的消息
退订或删除应用程序的消息
断开与服务器连接
MQTT服务端作用
可以是一个应用程序或一台设备
接受来自客户的网络连接
接受客户发布的应用信息
处理来自客户端的订阅和退订请求
向订阅的客户转发应用程序消息
QoS 0:最多一次,这一级别会发生消息丢失或重复,消息发布依赖于底层TCP/IP网络
QoS 1:最少一次(承诺消息将至少传送一次给订阅者),这一级别会确保消息到达,但消息可能会重复
QoS 2:只有一次(承诺消息仅传送到目的地一次),确保消息只有一次到达
屏幕显示:
型号:ILI19341
接口:屏幕8080 MCU FSMC模拟8080
半双工、异步、并行通信
色彩深度 16 位 电阻式触摸屏 565,用的商家的驱动代码
FSMC 模拟 8080
CSX :片选信号线
RESX:复位线
DC/X : 默认是高,拉低表示数据 拉高表示命令
WRX:写信号 使能
RDX:读信号
D[17:0] 数据线
时序过程:
命令时序由片选信号CSX拉低开始,对数据/命令选择信号线D/CX也置低电平表示写入的是命令地址(可理解为命令编码,如软件复位命令:0x01)
以写信号WRX为列,读信号RDX为高表示数据传输方向为写入
同时,在数据线D[17:0](或D[15:0])输出命令地址,在第二个传输阶段传送的是命令的参数,所以D/CX要置高电平,表示写入的是命令数据
命令数据是某些指令带有的参数,如复位指令编码为0x01,它后面可以带一个参数,该参数表示多少秒后复位(实际的复位命令不含参数,此处只是为了讲解指令编码与参数的区别)。
当需要把像素数据写入GRAM时,过程很类似,把片选信号CSX拉低后,再把数据/命令选择信号线D/CX置为高电平,这时由D[17:0]传输的数据则会被ILI9341保存至它的GRAM中。
总:片选线拉低,D/C 线确保命令还是数据 写使能/读使能 数据线传输
智能语音模块:
型号:SU03T
物理接口:UART
协议格式:AA 55 XX 55 AA
可以在官网自己定义关键词,CH340进行固件烧录
电源:
2.2 智能家居助手
2.2.1项目总述:
智能家居助手分为中控节点和控制节点,控制节点负责采集房间数据和控制房间上电开关,并将信息传输至中控节点,中控节点可以查看各个房间的信息并且对房间进行控制,同时也可以通过手机远程产看信息。
2.1.2 项目详细功能介绍
功能介绍:
节点板:
有人无人检测
温度、湿度
烟雾浓度,空气质量
警报
继电器
OLED显示
485通信
主控板
屏幕
触摸屏
通信485Modubus
OLED显示屏:
型号:0.96寸OLED显示屏
物理接口:SPI
移植官方的驱动代码
烟雾、空气质量、光照检测:
型号:MQ135(有机气体),MQ2(烟雾)
使用到ADC同甲醛助手ADC
具体参照甲醛检测仪
温度、湿度:
型号:DHT11
物理接口:单总线
具体参照甲醛检测仪
警报、继电器、热释电:
型号:热释电(PIR D203S)
主控子节点信息交流:
接口:RS485 + Modubus
见485 技术讲解
见 Modbus 技术讲解
多节点:
2.3 智能门锁
2.3.1 项目总述
智能门锁是一款具有密码开锁、RFID卡开锁、指纹开锁三种开锁方式。支持常用用户也支持一次性临时密码,具有管理员模式(输入管理员密码进入),登录管理员模式可以进行修改、添加、删除用户信息等操作,同时该智能门锁有语音播报功能,能在用户操作时与用户进行互动方便用户按步骤操作。并且支持联网查看,在联网模式下可以查看到锁的状态、开门的时间和开门的人名称和临时密码信息。最后还支持低功耗模式内置____电池最长待机可达___个月。
2.3.2 项目功能详细介绍
功能总览:
密码开锁
RFID射频卡开锁
指纹开锁
临时密码设置
屏幕显示功能选择界面
管理员操作
电源模块和低功耗实现
语音播报
链接网络
密码开锁:
设备型号:BS8116 电容按键
物理接口:IIC协议
工作模式:
系统上电后 8 秒内无按键被触摸,自动进入待机模式,以减少功耗。
一旦有任意键(BS8112A-3、 BS8116A-3 可单独设置唤醒键)被触摸,可唤醒 BS81x 芯片,进入正常模式,并输出按键状态。
待所有键都松掉,8秒后再次进入待机模式RFID卡开锁.
没有按键动作发生时逻辑电平为高电平,当芯片侦测触摸键按下后输出为低电平
一共16个按键每个相当于一位通过得到的最终值表示哪个按键按下
常用密码是不变的,临时密码只能用一次没有用户只有密码也可以登录
进入管理员模式——输入管理员密码可以直接进入管理员模式
RFID卡开锁:
设备型号:MFRC552
物理接口:模拟SPI 与 MCU通信
工作模式:
有两个部分,射频读写器和IC卡(IC卡相当于一张内存卡)。
非接触性IC卡与读卡器之间通过无线电波来完成读写操作。
二者之间的通讯频率为13.56MHZ。
非接触性IC卡本身是无源卡,当读写器对卡进行读写操作时,读写器发出的信号由两部分叠加组成:一部分是电源信号,该信号由卡接收后,与本身的L/C产生一个瞬间能量来供给芯片工作。
另一部分则是指令和数据信号,指挥芯片完成数据的读取、修改、储存等,并返回信号给读写器,完成一次读写操作。
写卡和读卡操作(写卡=注册卡):
寻卡-防冲撞-选卡
验证卡密码
读卡或者写卡
在sflsh中有个数组会存储卡的类型,卡号,密码等信息
注册卡的步骤,将卡号写入IC卡内,将卡号写入sflah中
开锁:将读取到的卡内容与sflash中存储的卡号进行对比如果成功开锁
问题:
写卡时的IC卡卡号是怎么确定和分配的?是自动生成吗?
卡不需要设置密码,卡的密码为默认密码吗?
在什么时候存入sflash
指纹开锁:
设备型号:MG200
物理接口:串口通信1801、波特率115200、0校验位、1停止位、8数据位
工作模式:
MG200为电容式指纹
管理程序的通信接口由若干指令组合而成,模块的每个功能由主控单元MCU(或上位机) 发送独立的指令来执行
MCU与指纹模块的通信通过发送命令数据包然后接收MG200返回应答数据包的形式
指纹模块的 UART 串口不能同时进行收发动作
内部工作过程:
MCU 主控单元向指纹识别模块发送指纹采集及特征量提取的指令。
指纹模块接收到该指令后,通过指纹传感器采集指纹并对图像质量进行判断。
若指纹图像不正常(图像质量差)时,模块将评价结果发送给 MCU 主控单元。
若指纹图像正常时,模块对图像进行特征点提取,并将比对成功与否的结果通知发送 至 MCU 主控单元。
首先就是提取指纹保存在数据库里,然后我们再重新录入指纹与数据库的指纹进行对比。
捕捉指纹征量过程:
等待手指按下
手指按下后,发送提取特征量命令数据包(通过串口通信发送,指纹模块的UART串口不能同时进行收发动作,所以需等串口接收完成再发)
判断接收数据包结果,判断是否通信成功(通信判断的是起始码,发送地址,接收地址,校验和,指令码,预留位),通信成功后
通过接收数据包函数形参接收返回的值result和参数parameter,判断返回的值result,分析捕捉指纹特征量的结果如何。
注册指纹过程:
通过do while 语句确保成功提取三次特征量
成功提取后,发送注册指纹命令数据包 把提取的特征量注册到数据库去
判断接收数据包结果,判断是否通信成功(通信判断的是起始码,发送地址,接收地址,校验和,指令码,预留位),通信成功后
通过接收数据包函数形参接收返回的值result和参数parameter,判断返回的值result,分析注册指纹的结果如何。
比对指纹过程:
等待捕捉指纹特征量函数返回捕捉成功结果
发送对比指纹命令数据包(捕捉到的特征量会与已注册的用户特征量进行比对)
判断接收数据包结果,判断是否通信成功(通信判断的是起始码,发送地址,接收地址,校验和,指令码,预留位),通信成功后
通过接收数据包函数形参接收返回的值result和参数parameter,判断返回的值result,如果成功说明比对指纹为已注册用户指纹。并通过参数parameter,返回对比的指纹用户ID
指纹相关问题:
指纹存储位置,和指纹号的分配是如何实现的?
指纹怎么和用户联系起来的
指纹发给MCU相关操作是在MG200进行还是在MCU进行
临时密码设置:
手机设置临时密码
通过协议帧发送网络
下发至智能锁存入密码库
比对一次后进行擦除
屏幕显示:
设备型号:ST7789VW
物理接口:SPI
色彩深度:565
管理员操作:
1.按键进入管理员模式
2.输入管理员密码
3.进入管理员界面
添加用户、删除用户、删除所有、修改开门密码、查看用户数量、设置wifi、退出管理员模式
电源模块+低功耗模式:
各个模块进入低功耗模式
能够进入低功耗的模块有:BS8116电容按键、ESP32、屏幕、
WIFI设置:
型号:ESP32
AT指令:
AP模式:自身释放热点,共外界设备连接。
AT+CWMODE=2 设置为AP模式
AT+CWSAP=\"ZZXYD\",\"00000000\",5,3 设置WIFI名、密码
AT+RST 重启ESP32
AT+CIPMUX=1 开启多链接
AT+CIPSERVER=1,8080 开启TCP服务器
STA模式:站点模式,连接其他WIFI。
AT+CWMODE=1 设置为STA模式
AT+CWJAP="WIFI名","密码" 连接wifi
AT+RST 重启ESP32
MQTT固件连接云平台:
配置MQTT属性:
AT+MQTTUSERCFG=<LinkID>,<scheme>,<"client_id">,<"username">,<"password">,<cert_key_ID>,<CA_ID>,<"path">
配置MQTT客户端ID:
AT+MQTTCLIENTID=<LinkID><"client_id">
配置MQTT连接属性:
AT+MQTTCONN=<LinkID>,<"host">,<port>,<reconnect>
MQTT发布:
AT+MQTTPUB=<LinkID>,<"topic">,<"data">,<qos>,<retain>
透传与非透传:
数据透传是直接传输原始数据的方式,不对数据进行处理或解析;而非透传则是在数据传输过程中对数据进行处理或解析
智能语音模块:
型号:思泽语音模块
协议:单总线协议
此模块协议格式分为:同步头+数据
同步头:8毫秒高电平加1毫秒低电平
数据表示方式:
逻辑1: 1.5MS高电平加0.5MS低电平
逻辑0: 0.5MS高电平加1.5MS低电平
驱动过程: 先发送同步头,再发送协议指令
(了解即可)
内部存储信息:
型号:W25Q64
物理接口:SPI
时钟频率: 80MHz / 160MHz (Dual SPI) / 320MHz (Quad SPI)
容量:64Mbit / 8MByte
数据传输格式为 8Bit
型号:AT24C02:
物理接口:IIC
AT24C01/02/04/08/16…是一个1K/2K/4K/8K/16K位电可擦除PROM,内部含有128/256/512/1024/2048个8位字节,AT24C01有一个8字节页写缓冲器,AT24C02/04/08/16有一个16字节页写缓冲器。电压可允许低至1.8V,待机电流和工作电流分别为1uA和1mA。该器件通过I2C总线接口进行操作。
2.3.3 项目开发中遇到问题以及解决方案
怎么把不同用户区分,是每个用户拥有的信息是 RFID? 指纹 还是只有指纹
3 MCU技术总结+面试题
3.1物理接口
SPI、UART、IIC、RS485、RS232
名称
类型
协议格式
SPI
全双工、同步、串行
UART
全双工、异步、串行
IIC
半双工、同步、串行
RS485
半双工、异步、串行
RS232
半双工、异步、串行
8080
半双工、同步、并行
单总线
单工
看具体外设
3.1.1 SPI
1.SPI简介
SPI是一种高速的,全双工,同步的,串行通信总线;SPI采用主从方式工作,一般有一个主设备和多个从设备;SPI至少需要四根线:MOSI(主机输出,从机输入),MISO(主机输入从机输出),CS(片选),SCL(时钟)SPI引脚少方便布线。GND
2.特点介绍
高速:只发送信号无需进行应答
全双工:两根数据线,接收和发送可以同时进行
串行:数据在一根线上依次进行收发
同步: 公用一条时钟线使发送和接收同步
3.SPI物理接线线介绍
MOSI:主机输出,从机输入。从机向主机传输数据
MISO:主机输入,从机输出。主机向从机传输数据
CS:输出高电平和低电平 来决定从机是否开启
SCL:时钟前,进行发送和接收的时间同步,下降沿接收,初始点评为高电平(可调)
4.SPI时序图
5.SPI细节与理解点
数据发送接收:数据和发送是同时进行,且只能有主机决定发送和接收,主机在发送数据的时侯,从机也向主机发送数据,主机开始接收数据时,从机也开始接收数据在内部的移位寄存器中实现
SSPSR:移位寄存器 SSBUF:内部缓冲区 Controller : 控制寄存器 :设置SPI总线的传输模式
传输模式:根据起始高低电平,上升沿下降沿读取可以将SPI分为四种通信模式(时钟极性与相位:空闲时为高电平低电平,上升沿发送还是接收)
① 时钟空闲时刻为低电平(CPOL = 0)
上升沿发送
上升沿接收
② 时钟空闲时刻为高电平(CPOL = 1)
3. 上升沿发送
4. 上升沿接收
主机从机:一般只有一个主机和多个从机,每加一个从机就要多加一个CS线,主机只能同时和一个从机进行通信,从机无法主动与主机进行通信
传输原理:通过传输高低电平信号来进行数据传输,可以根据选择数据宽度来确定几个信号为一组,字节8,半字16,全字32
3.1.2 IIC
软件I2C 和硬件I2C
模式:半双工、同步、串行
传输速度:
标准模式(Standard Mode):100 Kbps
快速模式(Fast Mode):400 Kbps
高速模式(High speed mode):3.4 Mbps
超快速模式(Ultra fast mode):5 Mbps
特点:
所有组件之间都存在简单的主/从关系,连接到总线的每个设备均可通过唯一地址进行软件寻址
最大主机设备理论是无限制,最大从机理论是1008个
多主机,多从机,可提供仲裁和冲突检测
从机和主机都挂在SDA线上
一次通讯可以发很多数据
物理结构:
由SDA线 和 SCL 两条总线
I2C 总线内部使用漏极开路输出驱动器,因此 SDA和 SCL 可以被拉低为低电平,但是不能被驱动为高电平,所以每条线上都要使用一个上拉电阻,默认情况下将其保持在高电平。电阻值取决于系统
通讯特性:
完整的 I2C通讯包裹:开始条件、地址传输、数据传输、停止条件
主机在 SCL 线上输出串行时钟信号,数据在 SDA 线上进行传输,每传输一个字节(最高位 MSB 开始传输)后面跟随一个应答位,一个 SCL 时钟脉冲传输一个数据位。
3.1.3 UART
模式:是异步、全双工、串行通信
协议格式是:1801
默认波特率为:115200
特点:
每次只能发送单个字节
有接受发送线和接收线TX,RX
3.1.4 RS485、RS232
232 全双工,异步,串行
只能一对一
公头,母头
485
特点:
支持多节点:一般最大支持 32 个节点。
传输距离远:最远通讯距离可达1200米。
抗干扰能力强:差分信号传输。
连接简单:只需要两根信号线(A+和B-)就可以进行正常的通信。
差分信号传输:
RS485 通信采用差分信号传输,通常情况下只需要两根信号线就可以进行正常的通信。
在差分信号中,逻辑0和逻辑1是用两根信号线(A+和B-)的电压差来表示。
逻辑 1:两根信号线(A+和B-)的电压差在 +2V~+6V 之间。
逻辑 0:两根信号线(A+和B-)的电压差在 -2V~-6V 之间。
连接方式:
在 RS485 通信网络中,通常会使用 485 收发器来转换 TTL 电平和 RS485 电平。
节点中的串口控制器使用 RX 与 TX 信号线连接到 485 收发器上,而收发器通过差分线连接到网络总线。
串口控制器与收发器之间一般使用 TTL 信号传输,收发器与总线则使用差分信号来传输。
发送数据时,串口控制器的 TX 信号经过收发器转换成差分信号传输到总线上。
接收数据时,收发器把总线上的差分信号转化成 TTL 信号通过 RX 引脚传输到串口控制器中。
通常在这些节点中只能有一个主机,剩下的全为从机。
通过对是在UART基础上的,所以是也是读使能线使能写使能线使能
3.1.5 CAN协议
3.2 内核相关
3.3 片上外设相关