- 计算机能唯一识别的数制是 [填空1] 进制数。
- 下列数制的数中,值最小的是:
68H
B
68
11000011B(原码)
00111100(原码)
- 8位的补码二进制数对应表示的十进制数的范围是 **[填空1]**。
- 102 = [填空1] B = [填空2] H = [填空3] Q
- 11000011.11B + 6EH + 45Q + 'a' = [填空1] D
AB1FH + OEFCH = [填空2] H
1E0AH - 2345H = [填空3] H - 比较X=FDH,Y=02H的大小:
- 都为补码时 X [填空1] Y;
- 都为无符号数时 X [填空2] Y。(用 > 或 < 填空)
- [X]补=FF12H,则 X= **[填空1]** D,[X]原= **[填空2]** H (16位二进制表示)
- [X]补=FFFEH,则 X= **[填空1]** D,[X]原= **[填空2]** H (8位二进制表示)
- 12位二进制数[X]补=800H, 则 X= **[填空1]** D;
- X=-87, Y=-45,用补码计算 X+Y= [填空1],并判断 [填空2] (是/否)溢出。(八位二进制补码)
X=86, Y=94,用八位BCD码计算 X+Y= [填空3]。 - X=-6.25,用规格化Float型表示X为 [填空1] (4位16进制数)
- 单片机内部总线根据不同功能可分为 **[填空1]、[填空2]** 和 [填空3] 三种总线。
- 20位地址线可以确定 [填空1] H个不同的地址。(填写十六进制数)
- 在微机系统中,按照使用功能存储器可分为 [填空1] 存储器和 [填空2] 存储器。
- 关于冯诺依曼结构和哈佛结构说法不正确的是:
A. 哈佛结构具有独立的程序存储器和数据存储器
B. 冯诺依曼结构程序指令和数据使用同一个存储空间
C. 哈佛结构中指令和数据可以有不同的数据宽度
D. 冯诺依曼结构中指令和数据可以有不同的数据宽度
- 计算机中数据传输速度最快的存储部件是:
A. RAM
B. ROM
C. Cache
D. 硬盘
- 能够提高CPU运行效率的措施不包括:
A. 流水线技术
B. 高速缓冲存储器Cache
C. 提高地址总线宽度
二、Cortex-M3 处理器
- Cortex-M3处理器执行指令时采用一个三级流水线。单条指令的执行过程分为 **[填空1]、[填空2]、[填空3]** 三个阶段。
- 在Cortex-M3处理器处理指令时,下列哪条指令不会导致之前流水线取指指令和译码结果被丢弃:
A. BNE
B. CBZ
C. SUB
- Cortex-M3处理器中,正在取指的指令地址存在哪个寄存器中:
A. 低组寄存器R0
B. 堆栈寄存器SP(R13)
C. 链接寄存器LR(R14)
D. 程序计数器PC(R15)
- Cortex-M3处理器中,子程序的返回地址存在哪个寄存器中:
A. 低组寄存器R0
B. 堆栈寄存器SP(R13)
C. 链接寄存器LR(R14)
D. 程序计数器PC(R15)
- 已知:
0x1000: MOV RO, PC,Cortex-M3处理器执行该指令后,R0= **[填空1]**。 - 关于Cortex-M3处理器说法错误的是:
A. 采用冯诺依曼架构
B. 在加载/存储数据的同时能够执行指令取值
C. 三级流水线
D. 使用Thumb-2指令集
- 当Cortex-M3处理器的中断屏蔽寄存器BASEPRI=3时,下面哪些优先级的中断可以被响应:
A. 优先级1的中断
B. 优先级2的中断
C. 优先级3的中断
D. 优先级4的中断
- 关于特权访问和用户访问(非特权访问)的区别,下列说法中错误的是:
A. 特权访问情况下,可以设置FAULTMASK寄存器
B. 特权访问情况下,可以设置PRIMASK寄存器
C. 用户访问(非特权访问)情况下可以设置PRIMASK寄存器
D. 用户访问(非特权访问)情况下,可以访问APSR寄存器
- Cortex-M3处理器支持两种工作模式:线程模式和处理模式。在复位时,处理器进入 [填空1] 模式。发生异常时处理器进入 [填空2] 模式。
- 堆栈操作就是对内存的读写操作,但是其地址由专门的寄存器--堆栈指针(SP)给出,其数据操作模式满足 [填空1] 的规则。Cortex-M3使用的是 [填空2] 的满栈”模型。
- 在Cortex-M3中,采用PUSH指令和POP指令进行入栈和出栈操作。PUSH操作时,SP先 **[填空1],再存入数据到SP所指存储器位置;POP操作正好相反,先从SP所指存储器位置读出数据,SP再 [填空2]**。
- 在Cortex-M3中SP=0x200003F8,执行
PUSH {R0, R1, R2}三条指令后,SP= **[填空1]** (16进制数表示)。 - 在Cortex-M3中SP=0x200002F8,执行
POP {R0, R1};PUSH {R2};三条指令后,SP= **[填空1]** (16进制数表示)。 - 在Cortex-M3中SP=0x200003F8,R0=0x1111,R1=0x2222,R2=0x3333,执行
PUSH {R0, R1, R2};POP {R0, R1};PUSH {R2};三条指令后,SP= **[填空1]**,R0= **[填空2]**,R1= **[填空3]**,R2= **[填空4]** (用16进制数填写)。 - Cortex-M3支持访问存储空间大小为:
A. 1GB
B. 2GB
C. 4GB
D. 8GB
- Cortex-M3中,片上外设区的地址范围为 [填空1] ~ **[填空2],共 [填空3] MB。其中,最低1MB空间可进行位带操作,对应的位带别名区地址范围为 [填空4] ~ [填空5]**,共 [填空6] MB。(用16进制数填写)
- Cortex-M3内部SRAM区的位带区中,地址为0x20000004单元的第0位对应的位带别名区地址为:
A. 0x22000000
B. 0x22000020
C. 0x22000040
D. 0x22000080
- X=-6.25,用32位规格化Float型表示X为 **[填空1],用小端模式保存在0x4000开始的存储器单元,则[0x4000]= [填空2],[0x4001]= [填空3],[0x4002]= [填空4],[0x4003]= [填空5]**。(16进制数填写)
- 关于Cortex-M3处理器的异常和中断说法错误的是:
A. 中断延迟至少为12个时钟周期
B. 各个Fault状态寄存器(FSR)都会自动清除
C. 中断向量表中每个向量各占用4个字节
D. 进入异常服务程序后,LR的值被自动更新为EXC_RETURN
- 进入异常服务程序后, LR的值被自动更新为特殊的EXC_RETURN, 这是一个高28位全为1的值, 只有位段[3:0]的值有特殊含义, 如下表所示。下列选项中,不合法的EXC_RETURN值为:
位段 定义 [31:4] EXC_RETURN的标识:必须全为1 3 0:返回后进入处理模式; 1:返回后进入线程模式 2 0:从主堆栈中做出栈操作,返回后使用MSP; 1:从进程堆栈中做出栈操作,返回后使用PSP 1 保留,必须为0 0 0:返回后ARM状态; 1:返回后Thumb状态。在Cortex-M3中必须为1 A. 0xFFFFFFF1
B. 0xFFFFFFF7
C. 0xFFFFFFF9
D. 0xFFFFFFFD
- 复位流程会初始化主堆栈指针(MSP), 假定内存位于0x20000800~0x20001FFF,可以将 [填空1] 写在地址0x00000000处,这样就实现了把主堆栈置于内存的顶部。
- Cortex-M3在Thumb状态下时,异常编号为17的外部中断向量地址为 [填空1] (十六进制数)。如果该中断服务程序的起始地址为0x00001800,则该向量地址中存储的值为 [填空2] (十六进制数)。
- 向量表的开头4个字节存储的是 [填空1] 初始值。
- 简答题: 请简答中断子程序和调用子程序之间的主要区别。
- 简答题: 当Cortex-M3响应一个中断时, 将依次执行哪些操作?
- 关于STM32F103系列存储器说法错误的是:
A. APB1总线用于高速外设
B. 数据字节以小端格式存在存储器中
C. 各外设模块具有独立时钟
D. 闪存存储器中每页主存储块大小为2KB
- 在STM32F103VET6中, 可以通过BOOT[1:0]引脚选择3种不同的启动模式。当BOOT[1:0]=11B时,CPU获取主堆栈指针的地址为:
BOOT1 BOOT0 启动模式 x 0 主闪存存储器 0 1 系统存储器 1 1 内置 SRAM A. 0x08000000
B. 0x20000000
C. 0x40000000
D. 0x80000000
三、汇编(1)
-
Cortex-M3内核的微控制器几乎所有的指令均可根据哪个寄存器中条件码的状态和指令的条件域有条件的执行。
A. APSR
B. IPSR
C. EPSR
-
每一条ARM指令包含4位的条件码,位于指令的哪几位:
A.
B. [3:0]
C.
D. [7:4]
-
Cortex-M3中,上一次操作的结果是个负数,会导致xPSR中条件码中:
A. N=1
B. V=1
C. Z=1
D. C=1
-
段的种类有代码段、数据段和通用段,一个汇编程序至少应该有一个 **[填空1]**。
-
分配一片连续的字节存储单元并初始化的伪指令是:
A. DCB
B. DCW
C. DCD
D. DCFS
-
已知寄存器和部分内存的初始内容如下表所示。请分析下列指令的连续执行结果:
寄存器寄存器 内容 R0 0x08000800 R1 0x08000804 R2 0x08000808 R3 0x0800080C R4 0x08000810 R5 0x08000814 R6 0x08000818 内存 地址 内容 --- --- 0x08000800 0x1234 0x08000804 0x5678 0x08000808 0x1122 0x0800080C 0x5566 0x08000810 0x7788 0x08000814 0x9900 LDR R0, [R1, #4]; R0= [填空1] , R1= [填空2]LDR R0, [R1, #8]!; R0= [填空3] , R1= [填空4]LDR R0, [R1], #4; R0= [填空5] , R1= [填空6]LDMDB R1, {R3, R4}; R3= [填空7] , R4= [填空8]BIC R2, R2, #0x0b; R2= [填空9]AND R0, R0, #0x0b; R2= [填空10] , R0= [填空11]
-
能够在寄存器和存储器之间传送数据的指令不包括:
A. MOV
B. LDR
C. PUSH
D. STR
-
下面哪个指令的执行结果能够改变APSR的值:
A. ADDC
B. CMP
C. LDR
D. LSL
-
已知R0=0x1234,R1=0x2134,
CMP R1, R0的执行后,APSR中状态位不正确的是:A. N=0
B. C=0
C. Z=1
D. V=0
-
ARM指令集中的跳转指令可以完成从当前指令向前或向后的 [填空1] 地址空间的跳转。
A. 16MB
B. 32MB
C. 64MB
D. 4GB
- Cortex-M3中,执行指令
LSR R0, #3对xPSR中条件码中的哪一位没有影响:
A. N
B. C
C. V
D. Z
- 已知Cortex-M3工作在小端模式,R0=0x12345678,执行
REV R1, R0指令后,R1= **[填空1]** (16进制数填写)。 - 若R0=0x55aa8765,则:
SXTB R1, R0; R1= [填空1]SXTH R1, R0; R1= [填空2]UXTB R1, R0; R1= [填空3]UXTH R1, R0; R1= [填空4]BFC R0, #4, #10; R0= [填空5]
- 简答题: ARM程序中有两种方法可以实现程序的跳转,请简答两种方法并比较两种方法的不同。
- 简答题: 简要回答ARM汇编语言中子程序调用和返回过程的要点。
四、汇编(2)
- 可以清零寄存器中数值的某些位同时不影响其它位状态的逻辑运算指令为:
A. AND
B. ORR
C. ORN
D. EOR
- 可以置位寄存器中数值的某些位同时不影响其它位状态的逻辑运算指令为:
A. AND
B. ORR
C. ORN
D. EOR
- 可以对寄存器中数值的某些位取反同时不影响其它位状态的逻辑运算指令为:
A. AND
B. ORR
C. ORN
D. EOR
- 利用逻辑与运算指令(AND)让RO中的第0、4、8位清零其它位保持不变,请写出对应的指令 **[填空1]**。
- 编程题: 编写程序,把首地址为0x08000800的64个字的数据复制到首地址为0x20000800的目标地址块中。并进行必要的注释。
- 编程题: 编写程序,把首地址为0x20002100的32个字的数据求和,将和存储在地址为0x20002200的存储器中。并进行必要的注释。
- 编程题: 编写程序统计首地址为0x20002100开始的32个字的数据中0的个数,结果存于R2中。
- 编程题: 编写程序统计首地址为0x20002100开始的32个无符号数字数据中最小的数,结果存于R2中。
- 编程题: 用stm32f103汇编语言编写子程序实现对32位数组的冒泡法排序。数组首地址存于R0中,数组元素个数存于R1中。
五、ADC & DAC
- STM32单片机的VREF管脚电压为3.3V,STM32单片机DAC模块工作在12位模式时,DAC模块输出的模拟电压范围最小值为 [填空1] V,DAC模块输出的模拟电压范围最大值为 [填空2] V(小数点后4位),当寄存器DAC_DOR的值为 [填空3] (十六进制数)时,该转换器的输出为1.65V。
- STM32单片机的VREF管脚电压为3.3V,STM32单片机DAC模块工作在12位数据左对齐模式时, DAC_DHR12Lx的数据为0x8008时,对应的DAC输出通道的模拟电压为 [填空1] V。
- STM32单片机的DAC输出通道管脚的初始化为哪种模式:
A. 模拟输入模式
B. 浮空输入模式
C. 通用推挽输出模式
D. 复用功能开漏输出模式
- STM32单片机的ADC时,将模拟电压3V和0.3V转换为数字电压所需的时间:
A. 3V转换时间长
B. 0.3V转换时间长
C. 一样长
- STM32单片机的VREF管脚电压为3.3V,STM32单片机ADC模块工作在12位模式时ADC模块输入的模拟电压为0.825V,ADC转换结果为 [填空1] (十六进制数)。
- 若8位ADC的参考电压为5V,则该A/D转换器能够分辨出输入电压变化的最小值为 [填空1] mV。
- 当ADCCLK=14MHz时,ADC被初始化为采样时间为1.5个周期,则ADC的总转换周期为 **[填空1]**。
六、内存扩展
- 下列存储器类型中,读写速度最快的是:
A) 寄存器
B) 高速缓存 (Cache)
C) SRAM
D) NORFlash ROM
- 下列关于随机存储器RAM说法错误的是:
A) SRAM数据不需要动态刷新
B) DRAM数据不需要动态刷新
C) DDR SDRAM在时钟上、下沿分别传输数据
D) RAM数据断电后丢失
- 下列关于FLASH ROM说法错误的是:
A) 擦除后ROM数据位为 “1”
B) 写操作能将数据位从 0 写成 1
C) 擦除操作以区块位单位
D) NOR型闪存的基本存储单元是字节
- 存储器的存取周期为500ns,存储器位数16位,则该存储器的带宽为 [填空1] B/s。
- Cortex_M3处理器的地址总线宽度为 [填空1] 位,可访问 [填空2] GB的地址空间。其中,用于扩展外部存储空间或片外设的地址空间为 [填空3] GB,对应的地址范围为 [填空4] (16进制数表示) 至 [填空5] (16进制数表示)。
- Cortex_M3处理器中用于扩展外部NOR闪存或PSRAM存储设备的地址范围为 [填空1] (16进制数表示) 至 [填空2] (16进制数表示),共 [填空3] MB空间。
- HADDR是需要转换到外部存储器的内部AHB地址线。其中,( ) 位用于选择存储块1的4个NOR/PSRAM块之一。
A) HADDR[31:30]
B) HADDR[28:29]
C) HADDR[27:26]
D) HADDR[25:24]
- 已知SRAM存储器芯片的地址总线管脚为A0~A18,数据总线管脚为D0~D15,该存储器的容量为 [填空1] B。
- 主观题
- 分析下图(图未提供)中外部SRAM存储器芯片对应的地址范围。
- 采用汇编语言编写程序,把如图SRAM中的前32个半字的数据求和,将和存储在地址为0x20002200的存储器中。并进行必要的注释。
- 主观题
- 分析下图(图未提供)中外部NORFLASH ROM存储器芯片的存储容量和对应的入口地址。
- 用汇编语言编写程序,把如图NORFLASH的前64个字的数据复制到首地址为0x20000800的目标地址块中。并进行必要的注释。
七、串行通讯
- 关于串行通讯说法错误的是:
A) 串行通信可以分为同步通信和异步通信两类
B) 在异步通信方式中,接收器和发送器使用同一个时钟。
C) 异步传送中,每一个字符要用起始位和停止位作为字符开始和结束的标志
D) 在异步通信方式中,接收器和发送器使用同一个字符格式。
- 简答题: 简要回答异步串行通讯中的字符组成格式。
- 异步串行通讯时,通讯双方约定采用数据位为8位、偶校验、1个停止位方式通讯,则传输一个字符至少需要( )位。
A) 10
B) 11
C) 12
D) 9
- 异步串行通讯时,通讯双方约定采用数据位为8位、无校验、1个停止位方式通讯,通讯速率为115200bps,则1秒钟内最多传输多少个字符。(只保留整数部分)
A) 11520
B) 10472
C) 9600
- 异步串行通讯时,通讯双方约定采用数据位为8位、奇校验、1个停止位方式通讯,通讯速率为115200bps,则1秒钟内最多传输多少个字符。(只保留整数部分)
A) 11520
B) 10472
C) 9600
- 按照数据传送方向,串行通信可分为 [填空1] 、 [填空2] 和 [填空3] 三种方式。
- 与串行接口有关的寄存器主要由 [填空1] 、 [填空2] 、 [填空3] 和 [填空4] 四部分组成。
- 不能触发串口接收中断的事件:
A) 溢出错误
B) 奇偶校验错误
C) 帧错误
D) 接收移位中
- 异步串行通讯时,通讯双方约定采用数据位为7位、偶校验、1个停止位方式通讯,通讯速率为115200bps,当接收端接收到下列哪个数据时会将奇偶校验错误标志位置位。
A) 0x66
B) 0x65
C) 0x64
D) 0x63
- 串口工作在 [填空1] 模式下时,可以将串口传输的数据不经过CPU直接存入存储器或从存储器直接获取。
八、定时器
-
Cortex-M3微处理器的通用定时器由一个通过可编程预分频器驱动的 [填空1] 位自动装载计数器构成。
-
简答题: 简要介绍Cortex-M3微处理器中普通定时器(TIM2-TIM5)的主要特性。(5点即可)
-
定时器2的时钟不是直接来自APB1,而是来自于输入为APB1 的一个倍频器。当 APB1的预分频系数为8时,定时器2的时钟频率等于 APB1 的频率( )倍。
A) 1
B) 2
C) 4
D) 8
-
假定 AHB=36MHz,当APB1的预分频系数=2 时,APB1= **[填空1]** MHZ,在倍频器的作用下,TIM2~7的时钟频率= **[填空2]** MHZ 。
-
Cortex-M3微处理器中普通定时器的时基单元包含: **[填空1]、[填空2]** 和 **[填空3]**。
-
已知TIM2的时钟为36MHz,TIM2的预分频器寄存器(TIM2_PSC)的值初始化为35,TIM2的自动装载寄存器(TIMx_ARR)的值初始化为999,TIM2 工作在向上计数模式。TIM2的计数器寄存器(TIMx_CNT)的计数频率为 [填空1] Hz, TIM2的溢出事件周期为 [填空2] s。
-
编程与分析题
假设TIM2CLK为36MHz,- 分析下面定时器2的初始化函数功能;
- 仿写每0.5秒发生一次更新事件(进入中断服务程序)的初始化代码;
- 编写定时器2中断服务程序(
void TIM2_IRQHandler(void)), 每次发生更新中断时将PE0管脚电平取反。
void TIMER2_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); TIM_DeInit(TIM2); TIM_TimeBaseStructure.TIM_Period=4999; TIM_TimeBaseStructure.TIM_Prescaler=7199; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); TIM_Cmd(TIM2, ENABLE); } -
简答题: 简要介绍Cortex-M3微处理器的定时器发生溢出事件时,定时器硬件自动执行的操作。
九、中断 (Interrupts)
- ARM cortex m3 内核支持256个中断包括 [填空1] 个内核异常和 [填空2] 个外部中断。
- 简答题: 简要回答Cortex—M3微处理器的中断处理机制。
- 简答题: 简要回答Cortex—M3微处理器的中断优先级分为哪两级并比较这两种中断优先级的不同。
- 向量中断控制器最多可支持( )个IRQ中断
A) 127
B) 128
C) 240
D) 256
- 关于中断嵌套说法正确的是( )
A) 只要响应优先级不一样就有可能发生中断嵌套
B) 只要抢占式优先级不一样就有可能发生中断嵌套
C) 只有抢占式优先级和响应优先级都不一样才有可能发生中断嵌套
D) 以上说法都不对
- 关于中断特殊寄存器说法错误的是( )
A) PRIMASK用于除能在NMI和硬Fault之外的所有异常。
B) FAULTMASK用于除能NMI之外的所有异常。
C) 如果往BASEPRI中写3,中断号大于等于4中断都不被响应。
D) FAULTMASK会在异常退出时自动清零。
- 已知中断和复位控制寄存器AIRCR中的位[10:8] (PRIGROUP[2:0]) 的值为0b101, N1号中断的中断优先级寄存器PRI_N1[7:4]=0b0011, N2号中断的中断优先级寄存器PRI_N2[7:4]=0b0010, N3号中断的中断优先级寄存器PRI_N3[7:4]=0b0110, N4号中断的中断优先级寄存器PRI_N4[7:4]=0b0111, 请分析当N1、N2、N3、N4号中断同时发生时,中断系统的响应优先级顺序为
A) N1>N2 > N3 > N4
B) N1>N2 > N4 > N3
C) N2>N1 > N4 > N3
D) N2>N1 > N3 > N4
- 已知中断和复位控制寄存器AIRCR中的位[10:8] (PRIGROUP[2:0]) 的值为0b101, N1号中断的中断优先级寄存器PRI_N1[7:4]=0b0011, ... (条件同上题), 请分析当N1号中断程序正在运行时、N2、N3、N4号中断同时发生时,其中能中止N1号中断服务程序运行实现嵌套操作的中断号是
A) N2
B) N3
C) N4
D) 以上均不能
- 下列函数中,"检查指定的EXTI线路触发请求发生与否"的函数是( )
A) ITStatus EXTI_GetITStatus(u32 EXTI_Line);
B) void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
C) void EXTI_ClearITPendingBit(u32 EXTI_Line);
D) void EXTI_ClearITPendingBit(u32 EXTI_Line); (选项重复)
- 简答题: 请简要回答Cortex—M3微处理器中事件和中断的关系。
十、通用输入输出接口 (GPIO)
-
复位期间和刚复位后,复用功能未开启,I/O端口被配置成
A) 输入浮空
B) 输入上拉
C) 输入下拉
D) 模拟输入
-
Cotex-M3处理器所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成 [填空1] 模式。
-
I/O端口位被配置为高阻抗模拟输入时,下列说法错误的是
A) 弱上拉和下拉电阻被禁止
B) 施密特触发输出值被强置为‘0’
C) 输出缓冲器被禁止
D) 读取输入数据寄存器时数值为‘1’
-
关于SystemInit函数说法错误的是
A) 是系统初始化函数的标准命名
B) 在调用main函数之前,在启动文件中调用
C) 用于系统复位和初始化STM32系列单片机的时钟
D) 系统启动时,由用户自行调用
-
I/O端口位被配置为开漏输出配置时,下列说法错误的是
A) 弱上拉和下拉电阻被禁止
B) 激活施密特触发输入
C) 输出寄存器上的‘0’激活N-MOS
D) 输出寄存器上的‘1’激活P-MOS
-
根据stm32架构图,下列外设时钟使能代码中错误的是
A) RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
B) RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM1, ENABLE);
C) RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
D) RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);
-
代码分析题
#include "stm32f10x.h" // 包含STM32F1系列微控制器的头文件 void delay_ms(unsigned short int Number); // 延时子函数 int main(void) { GPIO_InitTypeDef GPIO_InitStructure; // 声明用于GPIO初始化的结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); // 使能PE口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 对PE0引脚进行设置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 选择推挽输出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 频率最高为50MHz GPIO_Init(GPIOE, &GPIO_InitStructure); // 对引脚进行配置 while(1) { GPIO_SetBits(GPIOE, GPIO_Pin_0); // 输出高电平 delay_ms(500); GPIO_ResetBits(GPIOE, GPIO_Pin_0); // 输出低电平 delay_ms(500); } } void delay_ms(unsigned short int Number) { unsigned int i; while(Number--) { i = 12000; while(i--); } }- 请分析说明下面程序主要功能。
- 在这个程序基础上增加部分代码,使PB0管脚的输出逻辑与PE0相反。
十一、汇编语言与指令集 (重复部分)
- 可以清零寄存器中数值的某些位同时不影响其它位状态的逻辑运算指令为:
A) AND
B) ORR
C) ORN
D) EOR
答案
一、基础知识
- 二
- 11000011B(原码) (-67)
- -128 ~ +127
- 01100110, 66, 146
- 305.75, BA1B, FA65
- <, >
- -238, 80EEH
- -2, 82H
- -2048
- 01111110(-132), 是, 180 (BCD码溢出)
- C0C8H
- 地址总线, 数据总线, 控制总线
- FFFFF
- 内部, 外部
- D
- C
- C
二、Cortex-M3 处理器
- 取指, 译码, 执行
- C
- D
- C
- 0x1004
- A
- A, B
- C
- 线程, 处理
- 后进先出(LIFO), 递减
- 减4, 加4
- 0x200003EC
- 0x200002FC
- SP=0x200003F4, R0=0x2222, R1=0x3333, R2=0x3333
- C
- 0x40000000, 0x5FFFFFFF, 512, 0x42000000, 0x43FFFFFF, 32
- B
- C0C80000, 00, 00, C8, C0
- B
- B
- 0x20002000
- 0x00000084, 0x00001801
- 主堆栈指针(MSP)
- 区别:1. 调用方式:子程序由BL等调用指令调用;中断由硬件信号触发。2. 返回地址:子程序返回地址存入LR;中断返回地址(EXC_RETURN)也存入LR,但格式特殊。3. 现场保护:调用子程序需手动保存现场;中断发生时,硬件自动将部分寄存器(R0-R3, R12, LR, PC, xPSR)压栈。4. 模式切换:中断会使处理器从线程模式切换到处理模式。
- 操作:1.硬件压栈(xPSR, PC, LR, R12, R3-R0)。2.取中断向量。3.更新SP, LR, PC, IPSR。4.执行中断服务程序。
- A
- B
三、汇编(1)
- A
- A
- A
- 代码段
- A
- 1:0x1122, 2:0x08000804, 3:0x7788, 4:0x0800080C, 5:0x5566, 6:0x08000810, 7:0x9900, 8:0x7788, 9:0x08000800, 10:0x08000800, 11:0x0
- A
- B, D (CMP和LSLS等会影响标志位)
- C
- B
- C
- 0x78563412
- 1:0xFFFFFF65, 2:0xFFFF8765, 3:0x00000065, 4:0x00008765, 5:0x55aa8805
- 方法:1. B/BL指令:相对跳转,跳转范围有限(±32MB)。2. LDR PC, =label / MOV PC, Rm:绝对跳转,可以跳转到4GB地址空间的任意位置。
- 调用:使用BL指令,它会将返回地址(下一条指令的地址)存入LR寄存器,然后跳转到子程序。返回:在子程序末尾,使用
MOV PC, LR或BX LR或POP {..., PC}将LR的值加载回PC,实现返回。
四、汇编(2)
- A
- B
- D
AND R0, R0, #0xFFFFEEEE或BIC R0, R0, #0x00001111- (代码略)
- (代码略)
- (代码略)
- (代码略)
- (代码略)
五、ADC & DAC
- 0, 3.3, 800H
- 1.6504
- A
- C
- 400H
- 19.53
- 14个周期 (1.5 + 12.5)
六、内存扩展
- A
- B
- B
- 4000000 (4MB/s)
- 32, 4, 2, 0x60000000, 0xDFFFFFFF
- 0x60000000, 0x6FFFFFFF, 256
- C
- 524288 (512KB)
- (需图)
- (需图)
七、串行通讯
- B
- 由1位起始位(低电平),5-9位数据位,可选的1位校验位和1-2位停止位(高电平)组成。
- B
- A
- B
- 单工, 半双工, 全双工
- 数据寄存器, 状态寄存器, 控制寄存器, 波特率寄存器
- D
- A
- DMA
八、定时器
- 16
- 16位向上/向下/中央对齐计数器, 可编程预分频器, 4个独立通道可用于输入捕获/输出比较/PWM/单脉冲模式, 可生成DMA请求, 支持外部时钟。
- B
- 18, 36
- 计数器寄存器(TIMx_CNT), 预分频器寄存器(TIMx_PSC), 自动重载寄存器(TIMx_ARR)
- 1MHz, 0.001s (1ms)
- (代码分析和编写略)
- 硬件会将计数器清零,并可选择性地置位更新中断标志位(UIF)。
九、中断 (Interrupts)
- 16, 240
- 当中断发生时,CPU自动保存现场(部分寄存器),跳转到中断向量表找到对应的服务程序地址,执行服务程序,执行完毕后恢复现场并返回。
- 抢占优先级和响应优先级。抢占优先级高的中断可以打断正在执行的抢占优先级低的中断。当多个中断同时挂起时,先响应响应优先级最高的中断。
- C
- B
- C
- C
- A
- A
- 中断是事件的一种。事件可以触发中断(进入CPU),也可以只触发其他外设(如DMA,ADC)而无需CPU介入。
十、通用输入输出接口 (GPIO)
- A
- 输入
- D
- D
- D
- B, C
- 功能:使PE0口的LED灯以1秒的周期闪烁(亮500ms,灭500ms)。增加代码:(在main函数中增加对PB0的初始化,并在while循环中增加控制逻辑)
- (代码略)
十一、汇编语言与指令集 (重复部分)
- A