极客2020嵌入式方向 寒假考核

总分 160分 时间 200分钟

单选题(28分)

请在下划线”____” 上填ABCD代号
7题 每题4

1、Extern这个关键字用的地方很多,几乎所有大嵌入式工程,内部模块(.c文件)之间传递变量的值,都会用到extern关键字。
另一个层面上讲,一个变量的作用域本来仅限于这个.c 文件的, extern将其作用域拓展到了其他.c文件上去了。
现在 我们想让我们的zigbee驱动模块zigbee.c (头文件zigbee.h) 能够访问到我们的串口模块USART.c(头文件USART.h)的缓冲区u8 USART_RX_BUF[100],而且让USART_RX_BUF的第一个字节的值为0x01. (字节高位MSB为USART_RX_BUF[0])
假设在USART.c 已经有这句:u8 USART_RX_BUF[100];的存在了,那么 我们应该在其他几个文件里添加一些代码,
不报错且能实现功能的添加方式是:____

  • A.

    • 在zigbee.c文件添加
      USART_RX_BUF[0]=0x01
      
    • 在zigbee.h文件添加
      extern u8 USART_RX_BUF[100];
      
    • 在USART.h文件添加
      extern u8 USART_RX_BUF[100];
      
  • B.

    • 在zigbee.c文件添加
      USART_RX_BUF[7]=0x01
      
    • 在zigbee.h文件添加
      #include USART.h
      extern u8 USART_RX_BUF[100];
      
    • 在USART.h文件添加
      extern u8 USART_RX_BUF[100];
      
  • C.

    • 在zigbee.c文件添加
      USART_RX_BUF[7]=0x01
      
    • 在zigbee.h文件添加
      extern u8 USART_RX_BUF[100];
      
  • D.

    • 在zigbee.c文件添加
      USART_RX_BUF[7]=0x01
      
    • 在zigbee.h文件添加
      #include USART.h
      extern u8 USART_RX_BUF[100];
      
    • 在USART.h文件添加
      u8 USART_RX_BUF[100];
      

2、第一题很快乐是不是:)悄咪咪告诉你 第一题有两个答案 相信你已经选了一个了,那么第二题的答案是第一题的另一个正确答案,所以是______. (前后顺序无所谓)

3、定义寄存器DATA[7:0] 执行代码DATA<-93H; 以后,则DATA[0]到DATA[7]的值依次为____

  • A. 1100101
    B. 1001001
    C.10010011
    D.10100011
    E. 11001001
    F. 10011001

4、已知信号:

简写 中文
CS 片选信号
WR 写信号
RD 读信号
D[7:0] 数据
D/C 数据/命令 切换信号

下面是写数据/命令的时序图 根据时序图设计一个写入数据/命令的函数(数据命令均为8bits),函数声明:void WR_Byte(u8 dat,u8 cmd)cmd==0 则为传命令, cmd==1 为传数据

吓吓你:)不是设计题 只是判断下面哪个是对的就行____.
(注: DATAOUT执行以后 数据或者命令就已经锁存在D[7:0]总线上了, 简单来说 你可以忽略D[7:0]这条线)

  • A.
    void WR_Byte(u8 dat,u8 cmd)
    {
    	DATAOUT(dat);	    
     	RS=cmd;
    	CS=1;	   
    	WR=0;	 
    	WR=1;
    	CS=0;	  
    	RS=1;	 
    }
    
  • B.
    void WR_Byte(u8 dat,u8 cmd)
    {
    	DATAOUT(dat);	    
     	RS=cmd;
    	CS=0;	   
    	WR=1;	 
    	WR=1;
    	CS=1;	  
    	RS=1;	 
    }
    
  • C.
    void WR_Byte(u8 dat,u8 cmd)
    {
    	DATAOUT(dat);	    
     	RS=cmd;
    	CS=0;	   
    	WR=1;	 
    	WR=1;
    	CS=1;	  
    	RS=0;	 
    }
    
  • D.
    void WR_Byte(u8 dat,u8 cmd)
    {
    	DATAOUT(dat);	    
     	RS=cmd;
    	CS=0;	   
    	WR=1;	 
    	WR=1;
    	CS=1;	  
    	RS=1;	 
    }
    

5、ILI9341 液晶控制器自带显存,其显存总大小为 172800(24032018/8),即 18 位模式(26万色)下的显存量。而在 16 位模式下, ILI9341 采用 RGB565 格式存储颜色数据,此时 ILI9341的 18 位数据线与 MCU 的 16 位数据线以及 LCD GRAM 的对应关系如图所示:
在这里插入图片描述
请问 红色与蓝色组合(也就是没有任何绿色成分)的颜色有多少种?纯绿色(没有红色蓝色成分)的颜色有多少种?

选项 红蓝组合种类 绿色组合种类
A 256 16
B 128 32
C 65536 256
D 256 32

6、计算独立看门狗溢出时间:prep(预分频值)为6,rlr重载值为1250,求在多少ms内喂狗

  • A、1000ms
    B、4000ms
    C、8000ms
    D、10000ms

7、TIM3中断时间计算:加载值arr为999,分频值为8,则进行一次定时器中断时间为多少us

  • A、100us
    B、111us
    C、124us
    D、125us

多选题(30分)

请在下划线”____” 上填ABCDE等代号,每题6分,每空的分数 均分整道题的分数。
5题 每题6

1、我们开发51、stm32 其实还是用MDK5 进行C语言的编程,与你C语言课上的常规C语言集成开发环境(IDE)不同的是,MDK5添加了相关的____以支持嵌入式开发, 但编译器还是相通的,比如你可以设置是GCC编译或者ANSI C编译等等,也有一定的代码标准,比如C95 C99之类的。
这里所说的“编译器”,实质上集成(integrate)了链接器(linker)编译器(compiler)
那么我们在做一个stm32 工程(project)的时候,
首先是在____上敲代码,
之后通过____得到目标文件(一般得到的是汇编文件)
然后再经过____,将汇编代码转化为机器码
最后以特定的格式(.hex .bin或者其他格式)烧录到stm32的flash上(flash的程序代码区域)。

  • A. 汇编器(assembler)
    B. 解释器(interpreter)
    C.编译器(compiler)
    D.链接器(linker)
    E. 库文件(library)
    F. 编辑器(editor)
    G.调试器(debugger)

2、Stm32的各种型号的处理器, 如Cortex系列,是基于____公司开发的架构的,而现在大部分PC机(不包括苹果的产品如mac)的CPU主要是____公司开发的,另外风靡全球的手机的CPU是基于_____公司开发的架构。

  • A. 英伟达(NVIDA)
    B. 英特尔(INTEL)
    C. IBM
    D. 微软(Microsoft)
    E. ARM
    F. 意法半导体(ST)

3、假设我们USART1的默认收发(RX TX)IO PA9 PA10被征用去驱动LED了 而我们项目需要用到所有串口,意味着USART1不能浪费 所以USART1的IO需要进行重映射(remap)
那么 你将如何重新改造我们的void uart_init(u32 bound){} 函数呢?
这里请将几个代码段排序 实现刚刚说到的端口重映射功能:)
排序顺序______________.

  • A.GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
  • B. RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  • C. GPIO_InitTypeDef GPIO_InitStructure;
  • D. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  • E. USART_InitTypeDef USART_InitStructure;
  • F. NVIC_InitTypeDef NVIC_InitStructure;
  • G. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

4、通过IIC总线发送,接收一字节 (byte) 的数据的流程是 ____.

  • A、主设备: 产生起始信号->发送数据->接收否定应答信号->产生结束信号
    B、主设备: 产生起始信号->发送数据->产生结束信号->接收否定应答信号
    C、从设备: 产生起始信号->接收数据->产生否定应答信号->产生结束信号
    D、从设备: 接收数据->产生否定应答信号

5、在编写单片机主函数时,要格外注意硬件初始化顺序。
现已知,LCD初始化中使用了printf函数,pwm中使用了TIM2,以及led。请在主函数中对这些初始化进行排序

  • A、初始化led
    B、初始化pwm
    C、初始化TIM2
    D、初始化串口
    E、初始化LCD

简答题(20分)

1、寒假学习结束以后,对未来学习的进一步计划能否分享一下?

2、在进行寒假任务时,简单讲述下,你遇到的一个很难解决的bug时 应对的方案,以及最终处理的方式(要求说明方案之间的利弊 最好列表说明)

3、打开MDK5 以图片的形式,debug任意一个工程 展示软件debug硬件debug的流程(硬件debug可以没有实物图 但是要有一定的文字说明)

设计题1(30分)

题目:智能家居
智能家居作为物联网的一个比较火的落地方向,市面上有不少相关产品。
而作为物联网的灵魂——通信,是每一个做物联网的同学必需了解的。

问题
(1)这里我们提供ESP8266(wifi模块),zigbee模块,NB-IOT模块,lora模块,蓝牙双模模块(ntf58323)蓝牙mesh组网模块,请你通过查资料 比较wifi 蓝牙 zigbee lora 等通信手段的利弊。(8分)

(2)公司要设计一套的智能家居控制系统,要求能够用app控制家里插电的家电,如灯,热水器,智能插座 等至少 10个节点,
现在你作为嵌入式开发人员,嵌入式设备方面的组网结构需要你设计(12分)
而app(前端)和后端服务器 还有对于大功率开关控制的硬件电路 都由别人来完成

要求

  • 画图加文字说明
  • 时间有限 手画图拍照就行
  • 用软件作图有加分
  • 可以设计多个控制系统 比较利弊 有加分

示例:
在这里插入图片描述

(3)物联网不能脱离互联网生存 很多时候嵌入式网络的设备需要访问服务器,请自行搜索MQTT协议,并用文字或流程图说明,MQTT运行的基本流程.(10分)

设计题2(52分)

题目:红外学习型万能遥控器
考察知识:定时器 输入捕获 调制解调概念 设计协议
背景

  • 产品经理如是说:我们家里遥控器好多,一个控制空调,一个控制风扇,还有电视等,我想弄个万能遥控器,全部都兼容,all in one
    而且,到时候换了新电视,也得搞定。所以我的想法是,空调的红外键位信号,比如开空调,我们可以用我们的产品先“学习”,也就是记录下来开空调的红外指令,存储到flash,然后下一次想开空调,我们就用我们的产品发射红外信号控制就好啦。
    那么,现在你是苦逼的程序员,要开始考虑实现的具体方法了

提示信息

  • 整个产品有以下几个部分组成

    • 红外接收模块
      红外发射模块
      读取/存储信号模块
  • 我们的产品兼容主流的红外协议NEC、RC-5

  • 红外的载波频率为 38KHZ

  • 硬件上 我们有支持38KHZ的红外线发射管和接收管(stm32上有 “一体化”的接收管)
    在这里插入图片描述

问题
(1)下图是实际的红外信号(红外信号->电信号) 高电平表示有红外线,低电平即没有红外线,可以见到密集的载波
在这里插入图片描述

经过示波器测试,发现实际红外接收头发出的信号是这样子的
的形式 (注意 高低电平平的反相 这个特点)
在这里插入图片描述
请问是什么元件导致了接收的原始密集的红外信号变成了这种简单的电信号(一个高电平一个低电平完事)(6分)

这个元件发挥了什么作用(尽量用术语解释 实在不行再大白话)(6分)

(2)现在请用流程图和文字的形式(你能写代码+注释更好),说明红外接收模块的 软件实现思路(当然也要有简单的硬件说明)(10分)

  • 参考:不完全手册 第二十七章 红外遥控实验

(3)现在请用流程图和文字的形式(你能写代码+注释更好),说明红外发射模块的 软件实现思路(假定你输出电信号的IO为PC10 而且连接到红外发射头的正极 能够刚好使得发射头正常工作发射不失真的红外信号)(8分)

  • 参考:不完全手册 第二十七章 红外遥控实验

(4)你终于捕获到了红外信号 也就是获得了一个个高低电平以及电平的持续时间,如果你知道这个红外信号的协议是什么,那恭喜,你可以省下很多空间存红外信号了,比如对于NEC协议,高电平560ms低电平560ms 只用一个‘0’替代就好
但是问题在于 红外协议好多呢,流行度高的可能有5个以上,你咋知道这个红外信号用的什么协议呢?
请你设计一个方法能够存储红外信号 并且要发射的时候还能正确的发射(也就还原出高电平时间与低电平时间)
提示

  • 存储信号数据可能很简单 但是寻址 也就比如,用户要第3个指令发射,你怎么从flash里面定位这第3个指令的位置呢?
  • 另外 更改指令信号数据应该怎么做?比如我想更改第三个指令 从电视开 变成 电视关

简要说明你的思路。(22分)
(有兴趣的同学可以考完试来和阮菜鸡探讨解决方案,或者要实现代码。阮菜鸡大一做了个这个项目 而且是实践证明是可行的 运用到智能家居方面)。

发布了56 篇原创文章 · 获赞 64 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_43178828/article/details/105009703