感谢"小威"兄提供的期中资料

期中考试题

一. 单选题(共10题,20分)

  1. cortex-m3内核最大有__ G的寻址空间【C】
    A. 1 B. 2 C. 4 D. 8
  2. Cortex-M3是ARM公司推出的新一代_ 位低成本. 高性能通用微控制器内核;【C】
    A.8 B. 16 C.32 D. 64
  3. Cortex-M3采用了____。【D】
    A. CISC指令集 B. RISC指令集 C. Thumb指令集 D. Thumb-2指令集
  4. STM32绝大多数情况采用____模式。【A】
    A. 小端模式
    B.中端模式
    C.大端模式
    D.超大端模式
  5. 在APB2上的I/O脚的翻转速度为( )【A】
    A.18MHz B.36MHz C.50MHz D.72MHz
  6. STM32单片机 最多有STM32单片机 最多有____个____位的并行 I/O端口个16位的并行 I/O端口 【C】
    A.7个15位 B.8个15位 C.7个16位 D.8个16位
  7. CM3处理器采用了____级流水线结构。
    A.1 B.2 C. 3 D. 4
  8. 系统控制寄存器 NVIC 和处理器内核接口紧密耦合,主要目的是( ) 【C】
    A.结构更紧凑,减小芯片的尺寸
    B.连接更可靠,减小出错的概率
    C.减小延时,高效处理 最近发生的中断
    D.无所谓,没有特别的意思,远一点也没有关系
  9. 所有的GPIO引脚有一个内部微弱的上拉和下拉,当它们被配置为( )时可以是激活的或者非激活的 【A】
    A.输入 B.输出 C.推挽 D.开漏
  10. 堆栈的指针操作模式是?【B】
    A.先进先出 B.先进后出
    C.后进先出 D.后进后出

二. 判断题(共5题,10分)

  1. STM32的I/O口可直接支持5V电平? 【对】

  2. Cortex-M3芯片优先级数值越大优先等级越高。 【错】

  3. Cortex M3内核中的NVIC共支持256种异常和中断,STM32中也有256种异常和中断。 【错】

  4. 在STM32中中断是不可以屏蔽的,内核总是要在第一时间响应。【错】

  5. stm32的同一个io口可以有不止一种端口映射功能。【对】

三. 填空题(共4题,10分)

  1. STM32寄存器代码区_____________MB,内部SRAM区_____________MB。片内外设区_____________MB,外部RAM区_____________MB

    ​ 【512 512 512 1024】

  2. 物联网体系结构中核心技术是_____________和_____________ 【感知数据管理与处理技术】

  3. MPU是_____________ 【存储器保护单元(Memory Protection Unit, MPU)】

  4. ~025是对八进制数25(0000000000010101)按位求反____。(八进制)

    ​ 【0000000000010101 (~) 1111111111101010 = 177752(八进制) 】

四. 简答题(共6题,60分)

  1. 请解析咬尾中断并简述其作用?

    当处理器在响应某异常时,如果又发生其他中断,当它们优先级不高,则被阻塞。那么,POP和PUSH操作所涉及的系统现场是一样的,这个操作会白白浪费CPU时间。正因为如此,Cortex-M3提供了 “咬尾中断”来缩短这些不必要的操作,通过继续使用上一个异常已经PUSH好的系统现场,在本次异常完成后才执行现场恢复操作。形象一点地讲,后一个异常把前一个的尾巴咬掉了,前前后后只执行了入栈/出栈操作,Cortex-M3提供的“咬尾中断”大大缩短了系统响应时间,“咬尾中断”是在中断结束出栈时起作用

    解释2:

    在处理器在响应某些异常时,如果又发生其他异常,但它们优先级不够高,则它们会被阻塞。

    那么,在当前的异常执行返回后,系统处理悬起的异常时,倘若还是先POP,然后又把POP处理的内容PUSH回去,那么就白白浪费CPU时间了。因此,Cortex-M3不会再POP这些寄存器,而是继续使用上一个异常已经PUSH好的结果,消除POP和PUSH操作的耗时。

    这么一来,看上去好像后一个异常把前一个的尾巴要掉了,前前后后只执行了一次PUSH/POP操作。于是,这两个异常之间的“时间沟”就变窄了很多

    img

  2. 抢占优先级和亚优先级在中断响应过程中如何工作?请举例说明?

    具有高抢占优先级的中断可以在具有低抢占优先级的中断处理过程中被响应,即中断嵌 套,或者说高抢占优先级的中断可以嵌套低抢占优先级的中断。

    当两个中断源的抢占优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后, 如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。

    如果这两个中断同时到达,则中断控制器根据它们的响应优先级高低来决定先处理哪一个; 如果它们的抢占优先级和亚优先级都相等,则根据它们在中断表中的排位顺序决定先处理哪 一个。

    每个中断源都需要指定这两种优先级,所以需要有相应的寄存器位记录每个中断的优先 级

  3. STM32有多少种工作模式?(非低功耗)请简述模式的切换过程。

image-20211214165158065

image-20211214165207738

  1. 请简答STM32F103最小系统的硬件系统模块?

(1)TTL电平串口

(2)3.3V稳压电源、晶体振荡器、启动模式跳线

(3)1个复位按钮、1个电源指示灯、2个用户按钮,3个用户指示灯

(4)32个通用I/O口

  1. GPIO的8种工作模式是?

(1) GPIO_Mode_AIN 模拟输入

(2) GPIO_Mode_IN_FLOATING 浮空输入

(3) GPIO_Mode_IPD 下拉输入

(4) GPIO_Mode_IPU 上拉输入

(5) GPIO_Mode_Out_OD 开漏输出

(6) GPIO_Mode_Out_PP 推挽输出

(7) GPIO_Mode_AF_OD 复用开漏输出

(8) GPIO_Mode_AF_PP 复用推挽输出

  1. 请简问STM32内核采用哪一种架构,该架构冯诺依曼有何区别?

哈佛结构

image-20211214165356818

冯·诺依曼结构

冯·诺依曼结构(von Neumann architecture)又称作普林斯顿体系结构(Princetion architecture)。冯·诺依曼结构的处理器使用同一个存储器,经由同一个总线传输。冯·诺依曼结构处理器具有以下几个特点:

  • 必须有一个存储器;
  • 必须有一个控制器;
  • 必须有一个运算器,用于完成算术运算和逻辑运算;
  • 必须有输入和输出设备,用于进行人机通信。
  • img

哈佛结构

哈佛结构是一种将程序指令存储数据存储分开的存储器结构,如下图所示。中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度,如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。

img哈佛体系结构框图

哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和存储的,执行时可以预先读取下一条指令。

哈佛结构是指程序和数据空间独立的体系结构, 目的是为了减轻程序运行时的访存瓶颈。

哈佛结构能基本上解决取指和取数的冲突问题。

冯·诺依曼体系和哈佛总线体系的区别

二者的区别就是程序空间和数据空间是否是一体的。冯·诺依曼结构数据空间和地址空间不分开,哈佛结构数据空间和地址空间是分开的。

哈佛总线技术应用是以DSP和ARM为代表的。采用哈佛总线体系结构的芯片内部程序空间和数据空间是分开的,这就允许同时取指和取操作数,从而大大提高了运算能力。

DSP芯片硬件结构有冯·诺依曼结构和哈佛结构,两者区别是地址空间和数据空间分开与否。一般DSP都是采用改进型哈佛结构,就是分开的数据空间和地址空间都不只是一条,而是有多条,这根据不同的生产厂商的DSP芯片有所不同。在对外寻址方面从逻辑上来说也是一样,因为外部引脚的原因,一般来说都是通过相应的空间选取来实现的。本质上是同样的道理。

学习通作业

一. 单选题

  1. (单选题)开发板上STM32芯片的供电电压是多少? 【B】

A. 1.8V B. 3.3V C. 5V D. 2V

  1. 串行通信在接收就绪时,若中断使能,会触发哪个中断( )【C】

    • A. 发送完成中断

    • B. 发送数据空中断

    • C. 接收数据就绪可读

    • D. 检测到数据溢出

  2. MAX232芯片在串行通信中,主要起的作用是( ) 【A】

    • A. 电平转换
    • B. 数字滤波
    • C. 电流放大电路
    • D. 提高通信速度
  3. 在SPI通信中有以下4跟信号引脚,( )引脚用于输出时钟信号【D】

    • A. MOSI
    • B. MISO
    • C. /SS
    • D. SCLK

二. 多选题

  1. (多选题)STM32F103系列芯片有哪些启动方式()【ACD】
  • A 主闪存存储器
  • B. SD卡
  • C. 内置SRAM
  • D. 系统存储器
  1. (多选题)以下哪项是STM32芯片运行所必需的条件()【ADE】
    • A. 电源
    • B. GPIO
    • C. 定时器
    • D. 时钟
    • E. 复位电路
  2. (多选题)STM32芯片GPIO输出模式有哪些类型()。【ABCD】
    • A. 通用开漏输出
    • B. 通用推挽输出
    • C. 复用开漏输出
    • D. 复用推挽输出
  3. STM32芯片GPIO输入模式有哪些类型( )【ABC】
    • A. 模拟输入
    • B. 上拉 输入
    • C. 下拉输入
    • D. 时钟输入
  4. (多选题)STM32(Cortex-M3)中有两种优先级的概念,分别是( )。【BD】
    • A. 嵌套优先级
    • B. 抢占优先级
    • C. 高优先级
    • D. 响应优先级
  5. (多选题)以下哪些是STM32的外部中断名称( )【ABC】
    • A. EXTI0中断
    • B. EXTI1中断
    • C. EXTI3中断
    • D. EXTI5中断
  6. 串行数据通信的传输方式有( )。【ABC】
    • A. 单工方式
    • B. 半双工方式
    • C. 全双工方式
  7. USART串口通信模块一般分为三大部分,分别是( )。【ABD】
    • A. 时钟发生器
    • B. 数据发送器
    • C. 寄存器
    • D. 数据接收器

三. 判断题

  1. 为了提高转换精度,ADC使用一个独立的电源供电VDDA,过滤和屏蔽来自PCB的毛刺干扰【对】
  2. STM32外部时钟常常比其内部时钟精度高。【对】
  3. STM32F103系列芯片支持3种低功耗模式,即睡眠模式(Sleep mode)、停止模式(Stop mode)和待机模式(Standby mode)【对】
  4. STM32F103系列微控制器采用的电源工作范围是4.0~5V。 【错】
  5. STM32芯片I/O口可配置为外部中断口,每个GPIO口都可以作为外部中断的输入,但同时最多只能有16路,并且必须配置成输入模式。【对】
  6. STM32单片机不可以承受外接5V电压。 【错】
  7. 复位、NMI、硬件失效(fault)的优先级是负的,是软件可以编程的,比其他任何异常都高。【错】
  8. 响应优先级中断可以嵌套中断【错】
  9. STM32把指定中断优先级的寄存器位减少到4位,利用这4位指定5组优先级。【对】
  10. STM32每根外部中断输入线均可以被单独屏蔽,并且处理器通过一个挂起寄存器保存中断请求的状态【对】
  11. 同步串行通信中,发送器和接收器由同一个时钟源控制;异步串行通信,接收器和发送器有各自的时钟。【对】
  12. STM32帧格式字长可以为8位或9位,USART支持多种停止位的配置:0.5、1、1.5和2个停止位。【对】
  13. STM32的USART接口通过RX(接收数据输入)、TX(发送数据输出)和GND三个引脚与其他设备连接在一起。【对】
  14. 很多无线通信都可以通过串行UART接口和微控制器进行通信,例如:蓝牙(BlueTooth) 、无线网络(WiFi)、Zigbee通信和GPRS通信等。【对】
  15. I2C总线是一种简单、双向二线制同步串行总线SDA(串行数据线)和SCL(串行时钟线)【对】
  16. 在传输数据的时候,SDA线必须在时钟的高电平周期保持稳定,SDA的高或低电平状态只有在SCL 线的时钟信号是低电平时才能改变 。【对】
  17. CAN 总线(Controller Area Network) 相对于RS-485总线,节点之间的数据通信实时性更强。【对】
  18. CAN协议支持四种不同的帧类型:数据帧、远程帧、错误帧和超载帧【对】

PPT补充

  1. 当使用某个外设时,一定要记得开启外设的时钟。

  2. 高速时钟是提供给芯片主体的主时钟,低速时钟只是提供给芯片中的RTC(实时时钟)及独立看门狗使用。

  3. 复位目的:将系统强制定位在一个可知状态

  4. STM32F10xxx支持三种复位形式,分别为:
    系统复位
    电源复位
    备份区域复位。

  5. 开漏是用来连接不同电平的器件,匹配电平用的

  6. 推挽输出:可以输出高、低电平、连接数字器件

  7. 复位期间和刚复位后,复用功能未开启,I/O 端口被配置成浮空输入模式

  8. 当I/O端口配置为输入时:输出缓冲器被禁止

  9. 当I/O端口被配置为输出时:弱上拉和下拉电阻被禁止

  10. 4bit的中断优先级可以分成2组,从高位看,前面定义的是抢占式优先级,后面是响应优先级

  11. 优先级冲突处理:

    优先级冲突处理:

    1. **具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,**即中断的嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。

    2. **当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,**当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。

    3. 如果这两个中断同时到达**,则中断控制器根据他们的优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。**

  12. STM32的每个IO口都可以作为中断输入,这点很好用。要把IO口作为外部中断输入

    1)开启IO口时钟和复用时钟

    2)初始化IO口为输入。

    3)EXTI外部中断配置(中断源的选择,清除中断标志,触发模式)。

    4)配置中断分组(NVIC),并使能中断(分组,指定优先级,使能)

    5)编写中断服务函数。

  13. STM32之所以能够实现定时,是单片机内部在计数脉冲(来自晶振)
    T = 1/F F为频率

考试大纲

第一章:

  1. 什么是嵌入式系统

  2. 常见的几种嵌入式操作系统

  3. 冯若依曼与哈佛结构的区别,stm32采用几级流水线什么架构

  4. 了解针对嵌入式应用,在哪些方面进行架构改进

  5. Cortex系列的按嵌入式系统的典型应用分类

  6. 嵌入式系统的设计可以分成四个阶段

  7. Stm32内部集成的外设有哪些?

第一章习题:

1,2:答案P11 3. 答案P23; 7.答案P10

第二章

  1. Cortex-M3内核的特点以及组成

  2. 系统总线的包含哪几种?

  3. Cortex-M3寄存器分类以及寄存器的作用. stm32堆栈的类型:向下生长的满栈

  4. 存储器4G空间的分配图,以及每部分的大小;CORTEX-M3的存储器管理比ARM有什么优点?

  5. 位带区的地址;位操作的意义;位带区和位带别名的概念,什么是位绑定区. 位绑定别名区?它们有怎样的关系?位带操作的优点?

  6. 大端模式与小端模式;什么情况下只能使用小端格式?

  7. 处理器工作模式与程序执行特权等级有哪些,以及两者之间的配合

  8. (1) NVIC主要功能,(2)支持多少级异常和中断,有几位来表达(3)中断优先级的分类,两者的区别 ;(4)Cortex-M3中断优先级配置,(5)向量表的作用,(6)中断嵌套与咬尾. 迟到处理过程

习题:2. p36; 3. P48 4. P49. p50 5.

第三章

  1. STM32的最小系统的组成

  2. 启动方式有几种P71

  3. 电源控制低功耗模式

第四章

  1. stm32命名规则

  2. 熟练掌握keil5的使用

第五章

  1. GPIO有哪几种工作模式以及各自的使用场合,每种模式的库函数写法

  2. 简述STM32的GPIO主要作用

  3. 简述STM32的不同复用功能的重映射功能。

  4. 什么是GPIO的复用功能,作用

  5. 常用的位运算

  6. STM32的中断与异常,(1)STM32的NVIC的特点;(2)支持多少异常和中断,有几位来表达优先级;(3)外部中断/事件控制寄;(4)中断唤醒的方式;(5)外部中断线的分配;

  7. GPIO基础应用编程和外部中断编程的应用. 会写按键中断程序流程。

习题1. p111; 2. p140. 3. p141. 4. p129;5. p149

习题2

第六章

  1. STM32定时器主要作用;定时器分类;高级定时器的功能

  2. 时基单元的组成,计数器和预分频器是多少位的寄存器

  3. STM32定时器计数的模式

  4. 定时器时钟源的分类

  5. 输入捕获的作用;输入捕获和PWM输入捕获功能的区别;输出比较的功能,PWM输出模式

  6. 已知STM32的系统时钟为72MHz,如何设置相关寄存器,实现20ms定时。熟练掌握定时器和定时器中断的编程. 会计算定时定时的时长,会计算PWM波形的占空比,会画程序流程图

习题1. P153; 2. P155;3. P161. 4. p164-p165; 6 P196

第七章 重点

  1. AD主要技术指标,各指标的含义

  2. ADC选择的原则

  3. STM32的AD主要特征

  4. 规则通道组和注入通道组的含义,意义

  5. 触发注入和自动注入的含义

  6. 会计算波特率,AD最大波特率是多少

  7. 熟练掌握AD转换的初始化和编程流程 p213

    习题1. p201;2. 参考手册;3. P215

第九章

USART

  1. 简述STM32的USART的功能特点

  2. USART硬件连线图,引脚的作用

  3. 分数波特率的计算

  4. 熟练掌握USART的编程流程

  5. 掌握USART的初始化程序

SPI

  1. SPI的主要特点

  2. 工作的最高速率是多少

  3. SPI的时钟相位和时钟极性

  4. SPI各引脚的作用,工程建立时需要添加哪些库文件

  5. 掌握SPI的初始化程序

I2C模块

  1. I2C的主要特点

  2. I2C的工作模式

  3. 根据I2C的硬件连线图说明I2C工作流程

  4. 掌握I2C的初始化程序

CAN 不考

  1. CAN的主要特性

  2. CAN主要的工作模式

  3. 什么是标识符列表模式和屏蔽位模式,两者的区别

  4. 过滤器优先级的规则

  5. CAN位时间特性

  6. can帧的格式

习题 1. ;2. P274

文件作业答案

第1章 嵌入式系统概述

  1. 什么是嵌入式系统?嵌入式系统的组成?

答:嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。组成:嵌入式处理器、外围设备、操作系统、应用软件。

  1. 典型的嵌入式处理器有哪些?

    答:微处理器、微控制器、DSP处理器、片上系统SOC。

  2. 典型的RTOS操作系统有哪些?

    答:嵌入式Linux、μCLinux、Windows Embedded CE、Windows Embedded Compact 7、μC/OS-II、μC/OS-III、VxWorks、eCos等。

  3. 列举身边的嵌入式应用产品?

    智能手表,智能家电等

  4. 嵌入式系统的设计可以分成四个阶段:

    需求分析、架构设计和概要设计、详细设计和开发、测试反馈。

第2章 Cortex-M体系结构

  1. ARM Cortex系统的处理器分为:__ 、____ 、 ____。【A】【R】【M】

  2. ARM Cortex-M3为32位微控制器,请问32位指的是==CPU字长==。

  3. Cortex-M3 处理器能够以==小端格式==或大端格式访问存储器中的数据字,而访问代码时始使用==小端格式==。

  4. ARM Cortex-M3体系结构采用哈佛==总线==结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行进行。

  5. CM3寄存器分为通用寄存器,包括==R0~R15==。和==特殊功能==寄存器,包括==程序状态寄存器==、==异常屏蔽寄存器==、==控制寄存器==。

  6. 寄存器R13是==堆栈指针寄存器==。

  7. 寄存器R14是==程序连接寄存器==。

  8. 寄存器R15是==程序PC==。

  9. CM3的堆栈指针分为==MSP==、==_PSP==。存储器堆栈堆栈分为:向上生长(即向高地址方向生长)的递增堆栈;向下生长(即向低地址方向生长),称为递减堆栈。堆栈指针指向最后压入堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个数据项放入的空位置,称为空堆栈。试判断CM3属于==递减堆栈堆栈==和==满堆栈堆栈==。

  10. 在CM3中记录程序状态的寄存器是==xPSR==。都分别有些什么状态==应用状态==、==中断状态==、==可执状态==。

  11. PRIMASK寄存器的作用是==中断屏蔽寄存器==。

  12. 寄存器CONTROL的作用是==控制处理器工作级别及堆栈切换== 。

  13. CM3支持的4GB存储空间被划分成:==CODE==、==片上RAM==、==片上外设==、==片外RAM==、==片外外设==、==内核私有==6个区域。

  14. CM3中有一个位绑定区分别位于==片上RAM==和==片上外设==区,其大小为==1M==字节,由==32M字节==空间的位绑定别名区来访问。

  15. CM3支持==16==种系统异常,和==240==种外设中断。

  16. SysTick是一个==24==位的系统定时器。通常的功能是==作为操作系统时钟==。

第3章STM32基础及最小系统设计

  1. STM32F103RBT7芯片的在片Flash存储器有 ==128KB== 字节,在片SRAM存储器有 ==20KB== 字节。

  2. STM32F103RBT7芯片工作时电源电压是 ==3.3== V。

  3. STM32最小系统电路包含:==MCU芯片、电源电路、时钟电路、复位电路和启动设置电路==。

  4. 连接在APB1上的设备有:==电源接口、备分接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、WatchDog、Timer2、Timer3和Timer4==。

  5. 连接在APB2上的设备有:==UART1、SPI1、Timer1、ADC1、ADC2、I/O(PA~PE,第二功能I/O)== 。

第5章 通用I/O结构及应用

  1. STM32F103微控制器的I/O端口有PA~PG,每组多达 ==16== 端口。

  2. STM32F103微控制器的I/O端口的功能:==通用输入/输出、中断功能、复用功能和重映射功能。==

  3. 请编程实现如图所示4只发光二极管流水。

img

/********************************************************/
/*说明:PC8-PC15连接LED
********************************************************/
#include "stm32f10x.h"
#include "system_stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
void DelayMs( int n);
/********************************************************/
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9
|GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_Write(GPIOC, 0xFFFF);
/********************************************************/
	while(1)
	{
     GPIO_ResetBits(GPIOC, GPIO_Pin_8);
	 DelayMs(500);
	 GPIO_SetBits(GPIOC, GPIO_Pin_8);
	 GPIO_ResetBits(GPIOC, GPIO_Pin_9);
	 DelayMs(500);
	 GPIO_SetBits(GPIOC, GPIO_Pin_9);
	 GPIO_ResetBits(GPIOC, GPIO_Pin_10);
	 DelayMs(500);
	 GPIO_SetBits(GPIOC, GPIO_Pin_10);
	 GPIO_ResetBits(GPIOC, GPIO_Pin_11);
	 DelayMs(500);
	 GPIO_SetBits(GPIOC, GPIO_Pin_11);
  }
}


void DelayMs(int n)
{
	unsigned int i,j;
	for (i = 0;i<n;++i)
		for(j=0;j<8000;++j);
}

  1. 请编程实现键控蜂鸣器,当按键KEY1按下时,蜂鸣器发声,再按下不发声,按键采用中断方式控制。

img

*******************************************************/
/*说明:KEY1->PA0;Buz->PB4
按键采用中断,在中断服务程中取反PB4
********************************************************/
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_exti.h"
#include "misc.h"
/*************************中断第二级配置*****************/
void NVIC_Configuration(void) 
{
  NVIC_InitTypeDef NVIC_InitStructure;
  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}
/***********************中断第三级配置******************/
void EXTI_Configuration(void)
{
  EXTI_InitTypeDef EXTI_InitStructure;
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
  EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
}
/**********************按键初始化************************/
void key_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/*********************蜂鸣器端口初始化******************/
void Buzzer_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE); //PB4 重映射
  //Buzzer
  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB, GPIO_Pin_4);//置低电平,关闭蜂鸣器
}
int main(void)
{
    key_init();
	Buzzer_Init();
	__set_PRIMASK(0x00); //一级开关使能
	NVIC_Configuration();//二级开关使能
	EXTI_Configuration();//三级开关使能
	/*************************************************/
	while(1) {; }
}
/********************************************************/
void EXTI0_IRQHandler(void)
{
	if(EXTI_GetITStatus(EXTI_Line0) != RESET)
  {
   GPIO_WriteBit(GPIOB, GPIO_Pin_4,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_4)));;
  }
	EXTI_ClearITPendingBit(EXTI_Line0);
}

第6章 定时器结构及应用

  1. STM32F103定时器是 ==16== 位定时器。

  2. STM32F103的基本定时器有:==TIM6、TIM7==,通用定时器有:==TIM2~TIM5==,高级定时器有:==TIM1、TIM8==。

  3. STM32F103定时器的主要功能有:==定时功能==、==输入捕获功能==、==输出比较功能(PWM)==等。

  4. 已知系统时钟为72MHz,采用定时器TIM1产生周期为100ms的定时时间间隔并通过LED发光二极管指示定时过程,发光二极管与PC15相连。

分析:TIM1的时钟为72MHz,定时100ms,需要计数7.2X106,已超出计数值范围,因此必须对输入时钟信号进行分频。分频系数有多种选择,只要在计数范围内即可,只是计数值越大,分频率越高。对输入时钟进行360分频,则计数值为2000,程序采用中断的方式,计时时间到LED状态反转。

/*****************************************************
说明:已知系统时钟为72MHz,采用定时器TIM1产生周期为100ms
    的定时时间间隔并通过LED发光二极管指示定时过程。
*****************************************************/
#include "stm32f10x.h"
#include "system_stm32f10x.h"
#include "stm32f10x_GPIO.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_rcc.h"
#include "misc.h"
/*****************************************************
说明:LED端口初始化PA15接LED.PD2控制锁存器
*****************************************************/
void GPIO_Configuration(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_Write(GPIOC, 0xFFFF);
/*************下面为74HC573锁存控制****************/
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; 
	GPIO_Init(GPIOD, &GPIO_InitStructure);
	//NLE 置高,打开锁存器74HC573
	GPIO_SetBits(GPIOD, GPIO_Pin_2);
}

void TIM1_Configuration(void)
{
 /* ---------------------------------------------------------------
   TIM1 Configuration: Output Compare Timing Mode:
   TIM1CLK = 72 MHz, Prescaler =360,period=2000
 ---------------------------------------------------------------*/ 
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
TIM_TimeBaseStructure.TIM_Period=2000;    //初值
TIM_TimeBaseStructure.TIM_Prescaler=360-1; //时钟预分频值
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode=
TIM_CounterMode_Down;//计数方式
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE); //使能中断(三级)
TIM_Cmd(TIM1, ENABLE);
}
void NVIC_Configuration() //使能第二级中断开关
{
 NVIC_InitTypeDef NVIC_InitStructure;
 NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);
}
int main()
{
	GPIO_Configuration();
	NVIC_Configuration();
	TIM1_Configuration();
	while(1)
;
}

第7章 USART结构及应用

  1. 常见的短距离异步串行通信协议标准有:==RS232标准 ==、==RS485标准 ==。

  2. 在异步串行通信中RS232标准的硬件连线主要有: ==RX(数据接收线) 、 TX(数据发送) 、 GND(地线)== 组成。

  3. STM32F103中的USART模块支持: ==同步串行数据收 和 异步串行数据收发==。

  4. STM32F103中的USART模块支持**:** ==全双工异步通信 、 同步单向通信 和 半双工单线通信== 。

  5. STM32F103的USART模块程序初始化中主要涉及:==波特率 、 数据位 、 校验 、 停止位== 等设置。

  6. STM32F103的USART模块的波特率最高可达: ==4.5Mbit/s== 。

  7. 请利用STM32F103的USART模块实现与计算机之间通信,STM32F103发送:"Please input data!:"到计算机,计算机利用串口调试软件接收数据,然后计算机发送数据到STM32F103,并通过开发析上的LCD显示出接收的数据。

img

分析:如图所示,采用串口2(USART2),用到PA2、PA3两个管脚,STM32F103的USART配置成波特率:9600bit/s,数据位8位,停止位1位,校验位无。数据接收采用中断方式进行。

/****************************************************
说明:本程序是功能是STM32通过串口发:"Please input data!:"
对方通过串口发送数据,本STM32采用中断接收数据,保存在
RxBuffer[]
****************************************************/
#include "stm32f10x.h"
#include "system_stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_usart.h"
#include "misc.h"
#include "lcd.h"
#include   <string.h>
/*****************************************************/
char TxBuffer[]={"Please input data!:"}; 
char RxBuffer[]={0};
char TxCounter;
char RxCounter;
/****************中断第二级配置*****************/
void NVIC_Configuration(void) 
{
 NVIC_InitTypeDef NVIC_InitStructure;
 NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);
}
/****************中断第三级配置*****************/
void UsartIT_Configuration(void)
{
 USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
}
/******************USART初始化***********************/
void usart_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA| 
RCC_APB2Periph_AFIO,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,
ENABLE);
 //RX管脚
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 //TX管脚
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
 GPIO_Init(GPIOA, &GPIO_InitStructure);

USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength= USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl =
USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode =
USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART2, &USART_InitStructure);
USART_Cmd(USART2, ENABLE);
}

/*********************向串口发送一字符串**************/
void USART_SendString(char *str,u8 length)
{
 u8 temp;
 for(temp=0;temp<length;temp++)
 {
USART_SendData(USART2, str[temp]);
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
USART_ClearFlag(USART2, USART_FLAG_TXE);
 }
}
/********************主程序**************************/
int main(void)
{
 usart_init();
UsartIT_Configuration();
NVIC_Configuration();
__set_BASEPRI(0x00);//一级中断开关使能
STM3210B_LCD_Init();
USART_SendString(TxBuffer,strlen(TxBuffer));
/*************************************************/
	while(1)
	{
	 LCD_DisplayStringLine(Line4,"Receive Data:");
    LCD_DisplayStringLine(Line5,RxBuffer);
 }
}

第8章 SPI结构及应用

  1. SPI主从设备需共享时钟线,因此称为:==同步串行通信总线==。

  2. SPI总线采用主从连接架构,通信双方分为:==主控端(Master)和从动端(Slave)==。

  3. SPI接口的硬件连接线共有4根,分别是:==设备片选线SS、时钟信号线SCLK、串行输出数据线MOSI、串行输入数据线MISO==。

  4. STM32F103中的SPI总线通信中数据帧格式有:==8位数据和16位数据==。

  5. STM32F103中的SPI总线支持 ==硬件CRC校验== 以实现可靠通信。

  6. 请利用STM32F103的SPI总线向LED显示模块发送显示信息,在LED上显示“01234567”。如图所示硬件连接。

img

分析:本题主要是利用STM32F103的SPI模块向74LS595芯片发送数据,STM32F103作为主设备,74LS595作为从设备,硬件连接使用SPI1的PA7(MOSI)、PA5(CLK)和NSS(PA4)。

#include "stm32f10x.h"
#include "stm32f10x_GPIO.h"
#include "stm32f10x_spi.h"
#include "stm32f10x_rcc.h"
/* 此表为7段共阳数码管显示0~9的字模,数码管上编号为“SR410361K”可用*/
unsigned char DISP_TAB[12] = 
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
unsigned short DISP_TAB2[10]=
{0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,};
const unsigned char DigTab[8] =
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};  
//  定义数码管位选数据
unsigned char dispBuf[8]; //  定义显示缓冲区
void DelayMs(int n)
{   unsigned int i,j;
	for (i = 0;i<n;++i)
		for(j=0;j<8000;++j);
}

void SPI_LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef   SPI_InitStructure;
RCC_PCLK2Config(RCC_HCLK_Div2);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|
RCC_APB2Periph_SPI1|RCC_APB2Periph_AFIO,ENABLE);
SPI_Cmd(SPI1, DISABLE);  //必须先禁能,才能改变MODE
	
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
 GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
		
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE);
}
/******************************************************
说明:在LED上显示的数据,第ucX位,显示ucData。
参数:ucX:位数;ucData:显示数据0-9;point:0=不带小数点,1=带小数点
***********************************************************/
void dispDataPut(unsigned char ucX, unsigned char ucData,unsigned char point)
{
unsigned short uldata;
dispBuf[ucX & 0x07] = ucData;
if(point==1)
{uldata=(DigTab[ucX]<<8)+DISP_TAB2[dispBuf[ucX & 0x07]];}
else
{uldata=(DigTab[ucX]<<8)+DISP_TAB[dispBuf[ucX & 0x07]];}
 GPIO_ResetBits(GPIOA,GPIO_Pin_4);
SPI_I2S_SendData(SPI1, uldata);
 GPIO_SetBits(GPIOA,GPIO_Pin_4);
}

int main(void)
{	
unsigned char n=0;
SPI_LED_Init();
while(1)
{
	for (n=0; n<=7; n++)
  {
      dispDataPut(n,n,0);  
      DelayMs(5);	 
      }
}
}

第9章 IIC结构及应用

第11章 ADC结构及应用

  1. A/D转换是将:==连续变化的模拟信号变为对应的离散数字信号==。

  2. 模拟信号转化为数字信号包含三个关键步骤:==采样、量化和编码==。

  3. A/D转换的主要技术指示有:==位数、采样速率、分辨率==等等。

  4. STM32F103的ADC模块是一个==12位逐次逼近型ADC==,==包含18个通道==,==可测量16个外部信号和2个内部信号==。

  5. 当STM32F103的ADC模块被测电压范围是0~3.3V连续变化的模拟信号,ADC转换的参考电压是3.3V,请问当被测信号为3.3V时对应的转换后的数字量是:==1111 1111 1111(十进制4096,十六进制0xfff)==,当被测信号为0V时对应的数字量是:==0000 0000 0000==。当转换后的数字量为1000 0000 0000(十进制2048,十六进制0x800)时对应的模拟电压为:==1.65V==。

  6. 请利用STM32F103的ADC模块转换如图所示模拟电压并能过LCD显示器显示被测信号电压值。

img

img

分析:PB0对应ADC1模块的8号通道。拟采用软件触发采样,通过查询标志位,获取转换结果。程序流程图如上图所示。

#include "stm32f10x.h"
#include "stm32f10x_conf.h"
#include "stdio.h"
#include "lcd.h"
#include "delay.h"
void adc_init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  ADC_InitTypeDef  ADC_InitStructure;
  /*使能GPIOB时钟*/
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  , ENABLE);
  /*配置PB0为模拟输入端口*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE);
  /*ADC1的配置*/
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;	
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfChannel = 1;
  ADC_Init(ADC1, &ADC_InitStructure);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_13Cycles5); //ADC1 规则 channel8 配置
  ADC_Cmd(ADC1, ENABLE);   //能ADC1 
  ADC_ResetCalibration(ADC1);  //使能ADC1 复位校准寄存器   
  while(ADC_GetResetCalibrationStatus(ADC1));//检查校准寄存器状态
  ADC_StartCalibration(ADC1);              //启动ADC校准
  while(ADC_GetCalibrationStatus(ADC1));    //检查校准状态
}

#define V_REF 3.300
float adc_read(void)
{
  unsigned int i;
  int AD_value;
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);      //ADC软件启动转换
  while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));//等待ADC转换结束
  AD_value = ADC_GetConversionValue(ADC1);       //读取ADC转换的12位数据
  return AD_value* V_REF /(0xfff);
}
int main(void)
{	
	  float temp;
char Buff[30];
  STM3210B_LCD_Init();//LCD初始化
  LCD_Clear(Blue); //背景颜色
  LCD_SetBackColor(Magenta); //文字颜色
  LCD_SetTextColor(Black);
LCD_DisplayStringLine(Line2, "ADC TEST      ");
  LCD_DisplayStringLine(Line4, "Vref = 3.3V   ");
adc_init();
	while(1)
	{
		temp = adc_read();
		sprintf(Buff,"Result=%04.2f V ",temp);
		LCD_DisplayStringLine(Line7,(u8*)Buff);
		DelayMs(500);
	}
}

一、选择题

1.Cortex-M处理器采用的架构是( D )

(A)v4T (B)v5TE (C)v6 ==(D)v7==

2.NVIC可用来表示优先权等级的位数可配置为是( D )

(A)2 (B)4 (C)6 ==(D)8==

3.Cortex-M系列正式发布的版本是( A )

==(A)Cortex-M3== (B)Cortex-M4 (C)Cortex-M6 (D)Cortex-M8

4.Cortex-M3的提供的流水线是( B )

(A)2级 ==(B)3级== (C)5级 (D)8级

5.Cortex-M3的提供的单周期乘法位数是( C )

(A)8 (B)16 ==(C)32== (D)64

4.下面是Context-M3处理器代码执行方式的是( A )

==(A)特权方式== (B)普通方式 (C)Handle方式 (D)Thread方式

7.Context – M3处理器的寄存器r14代表( B )

(A)通用寄存器 ==(B)链接寄存器== (C)程序计数器 (D)程序状态寄存器

8.Handle模式一般使用( A )

==(A)Main_SP== (B)Process_SP (C)Main_SP和Process_SP (D)Main_SP或Process_SP

9.Cortex – M3使用的存储器格式是( D )

(A)小端格式 (B)大端格式 (C)小端或大端格式 ==(D)没有正确答案==

10.Cortex – M3的存储格式中专用外设总线区域可以使用( A )

==(A)小端格式== (B)大端格式 (C)小端或大端格式 (D)没有正确答案

11.每个通用I/O端口有( )个32位的配置寄存器,( )个32位的数据寄存器,( )个32位的置位/复位寄存器,( )个16位的复位寄存器,( B )个32位的锁定寄存器

(A)2,1,2,1,1 ==(B)2,2,1,1,1== (C)2,2,2,1,1 (D)2,2,1,2,1

12.( A )寄存器的目的就是用来允许对GPIO寄存器进行原子的读/修改操作

==(A)GPIOX_BSRR和GPIOX_BRR== (B)GPIOX_CRL和GPIOX_CRH(C)GPIOX_BSRR和GPIOX_LCKR (D)GPIOX_IDR和GPIOX_ODR

13.所有的GPIO引脚有一个内部微弱的上拉和下拉,当它们被配置为( A )时可以是激活的或者非激活的

==(A)输入 == (B)输出(C)推挽 (D)开漏

14.端口输入数据寄存器的地址偏移为( B )

==(A)00H== (B)08H(C)0CH (D)04H

16.端口输出数据寄存器的地址偏移为( C )

(A)00H (B)08H ==(C)0CH== (D)04H

17.每个I/O端口位可以自由的编程,尽管I/O端口寄存器必须以( D )的方式访问

(A)16位字 (B)16位字节 (C)32位字节 ==(D)32位字==

18.固件库中的功能状态(FunctionalState)类型被赋予以下两个值( A )

==(A)ENABLE或者DISABLE== (B)SET或者RESTE

(C)YES或者NO (D)SUCCESS或者ERROR

19.固件库中的标志状态(FlagStatus)类型被赋予以下两个值( C )

(A)ENABLE或者DISABLE (B)SUCCESS或者ERROR

==(C)SET或者RESTE== (D)YES或者NO

20.STM32F107V有( C )可屏蔽中断通道

(A)40 (B)50 ==(C)60== (D)70

21.STM32F107V采用( A )位来编辑中断的优先级

==(A)4== (B)8 (C)16 (D)32

22.向量中断控制器最多可支持( C )个IRQ中断

(A)127 (B)128 ==(C)240== (D)255

23.系统控制寄存器 NVIC 和处理器内核接口紧密耦合,主要目的是( C )

(A)结构更紧凑,减小芯片的尺寸

(B)连接更可靠,减小出错的概率

==(C)减小延时,高效处理 最近发生的中断==

(D)无所谓,没有特别的意思,远一点也没有关系

24.关于中断嵌套说法正确的是( B )

(A)只要响应优先级不一样就有可能发生中断嵌套

==(B)只要抢占式优先级不一样就有可能发生中断嵌套==

(C)只有抢占式优先级和响应优先级都不一才有可能发生中断嵌套

(D)以上说法都不对

25.在STM32107向量中断控制器管理下,可将中断分为( B )组

(A)4 ==(B)5== (C)6 (D)7

26.中断屏蔽器能屏蔽( B )

(A)所有中断和异常 ==(B)除了NMI外所有异常和中断==

(C)除了NMI、异常所有其他中断 (D)部分中断

27.PWM是( A )

==(A)脉冲宽度调制== (B)脉冲频率调制 (C)脉冲幅度调制 (D)脉冲位置调制

29.要想使能自动重装载的预装载寄存器需通过设置TIMx_CR1寄存器的( B )位

(A)UIF ==(B)ARPE== (C)UG (D)URS

30.以下对于STM32 ADC描述正确的是( B )

(A)STM32 ADC是一个12位连续近似模拟到数字的转换器

==(B)STM32 ADC是一个8位连续近似模拟到数字的转换器==

(C)STM32 ADC是一个12位连续近似数字到模拟的转换器

(D)STM32 ADC是一个8位连续近似数字到模拟的转换器

31.ADC转换过程不含哪项( D )

(A)采样 (B)量化 (C)编码 ==(D)逆采样==

32.ADC转换过程正确的是( A )

==(A)采样—量化—编码==(B)量化—采样—编码

(C)采样—编码—量化(D)编码—采样—量化

33.下列哪项不是ADC转换器的主要技术指标( B )

(A)分辨率 ==(B)频率== (C)转换速率 (D)量化误差

34.以下对STM32F107集成A/D的特性描述不正确的是( B )

(A)12位精度 ==(B)单一转换模式==

(C)按通道配置采样时间(D)数据对齐方式与内建数据一致

35.以下对STM32F107集成A/D的特性描述正确的是( B )

(A)供电需求: 2.6V到3.8V

==(B)输入范围:VREF-≤VIN≤VREF+==

(C)性能线设备的转换时间:28MHz时为1us

(D)访问线设备的转换时间:56MHz时为1us

36.以下为STM32的GPIO端口配置寄存器的描述,在GPIO控制LED电路设计时,要使最大输出速度为10MHz,应该设置( B )

1

2

(A)CNFy[1:0] ==(B)MODEy[1:0]==

(C)MODE (D)CNF

37.以下为GPIO端口配置寄存器的描述,在GPIO控制LED电路设计时,要使最大输出速度为2MHz,应该设置MODE[1:0]值为( C )

1

2

(A)00 (B)01

==(C)10== (D)11

38.. 已知TIM1定时器的起始地址为0x4001 2C00,则定时器1的捕获/比较寄存器1的地址为( D )

(A)0x4001 2C20 (B)0x4001 2C2C

(C)0x4001 2C38 ==(D)0x4001 2C34==

39.已知TIM1定时器的起始地址为0x4001 2C00,则定时器1的捕获/比较寄存器2的地址为( C )

(A)0x4001 2C20 (B)0x40012C2C

==(C)0x4001 2C38== (D)0x4001 2C34

40.SysTick定时器校正值为( B )

(A)9000 ==(B)10000==

(C)12000 (D)15000

41.SysTick定时器的中断号是( C )

(A)4 (B)5

==(C)6== (D)7

42.上图中Tamper连接了STM32F10X的PC13GPIO,PC13通用IO端口映射到外部中断事件线上是( D )

无标题9.png

(A)EXTI线14 (B)EXTI线15

(C)EXTI线12 ==(D)EXTI线13==

43.上图中WKUP连接了STM32F10X的PA0 GPIO,PA0通用IO端口映射到外部中断事件线上是( A )

无标题10.png

==(A)EXTI线0== (B)EXTI线1

(C)EXTI线2 (D)EXTI线3

/** @addtogroup Peripheral_registers_structures
 \* @{
 */  
/** 
 \* @brief Analog to Digital Converter 
 */
typedef struct
{
 __IO uint32_t SR;
 __IO uint32_t CR1;
 __IO uint32_t CR2;
 __IO uint32_t SMPR1;
 __IO uint32_t SMPR2;
 __IO uint32_t JOFR1;
 __IO uint32_t JOFR2;
 __IO uint32_t JOFR3;
 __IO uint32_t JOFR4;
 __IO uint32_t HTR;
 __IO uint32_t LTR;
 __IO uint32_t SQR1;
 __IO uint32_t SQR2;
 __IO uint32_t SQR3;
 __IO uint32_t JSQR;
 __IO uint32_t JDR1;
 __IO uint32_t JDR2;
 __IO uint32_t JDR3;
 __IO uint32_t JDR4;
 __IO uint32_t DR;
} ADC_TypeDef;

ADC注入通道数据偏移寄存器有4个,其偏移地址为14H-20H,JOFR1的偏移地址为( D )

(A)0x20 (B)0x1c

(C)0x18 ==(D)0x14==

/** @addtogroup Peripheral_registers_structures
 \* @{
 */  
/** 
 \* @brief Analog to Digital Converter 
 */
typedef struct
{
 __IO uint32_t SR;
 __IO uint32_t CR1;
 __IO uint32_t CR2;
 __IO uint32_t SMPR1;
 __IO uint32_t SMPR2;
 __IO uint32_t JOFR1;
 __IO uint32_t JOFR2;
 __IO uint32_t JOFR3;
 __IO uint32_t JOFR4;
 __IO uint32_t HTR;
 __IO uint32_t LTR;
 __IO uint32_t SQR1;
 __IO uint32_t SQR2;
 __IO uint32_t SQR3;
 __IO uint32_t JSQR;
 __IO uint32_t JDR1;
 __IO uint32_t JDR2;
 __IO uint32_t JDR3;
 __IO uint32_t JDR4;
 __IO uint32_t DR;
} ADC_TypeDef;

ADC注入通道数据偏移寄存器有4个,其偏移地址为14H-20H,JOFR2的偏移地址为( B )

(A)0x14 ==(B)0x18==

(C)0x1c (D)0x20

46.Cortex-M3的提供的流水线是( B )

(A)2级 ==(B)3级==

(C)5级 (D)8级

47.Contex – M3处理器的寄存器r14代表( B )

(A)通用寄存器

==(B)链接寄存器==

(C)程序计数器

(D)程序状态寄存器

48.固件库中的功能状态(FunctionalState)类型被赋予以下两个值( A )

==(A)ENABLE或者DISABLE==

(B)SET或者RESTE

(C)YES或者NO

(D)SUCCESS或者ERROR

49.固件库中的标志状态(FlagStatus)类型被赋予以下两个值( C )

(A)ENABLE或者DISABLE

(B)SUCCESS或者ERROR

==(C)SET或者RESTE==

(D)YES或者NO

50.DMA控制器可编程的数据传输数目最大为( A )。

==A.65536== B.65535

C.1024 D.4096

51.STM32中,1 个DMA请求占用至少( B )个周期的CPU 访问系统总线时间。

A.1 ==B.2==

C.3 D.4

52.STM32的USART根据( A )寄存器M位的状态,来选择发送8位或者9位的数据字。

==A.USART_CR1== B.USART_CR2

C.USART_BRR D.USART_CR3

53.下面不属于STM32的bxCAN的主要工作模式为( C )。

A.初始化模式 B.正常模式

==C.环回模式== D.睡眠模式

54.和PC系统机相比嵌入式系统不具备以下哪个特点( C )。

A、系统内核小 B、专用性强

==C、可执行多任务== D、系统精简

55.嵌入式系统有硬件和软件部分构成,以下( C )不属于嵌入式系统软件。

A. 系统软件 B. 驱动 ==C. FPGA编程软件== D. 嵌入式中间件

56.在APB2上的I/O脚的翻转速度为( A )。

==A.18MHz== B.50MHz

C.36MHz D.72MHz

57.当输出模式位MODE[1:0]=“10”时,最大输出速度为( B )。

A.10MHz ==B.2MHz==

C.50MHz D.72MHz

58.在ADC的扫描模式中,如果设置了DMA位,在每次EOC后,DMA控制器把规则组通道的转换数据传输到( A )中。

==A.SRAM== B.Flash

C.ADC_JDRx寄存器 D.ADC_CR1

59.STM32规则组由多达( A )个转换组成。

==A.16== B.18

C.4 D.20

60.在STM32中,( A )寄存器的ALIGN位选择转换后数据储存的对齐方式。

==A.ADC_CR2== B.ADC_JDRx

C.ADC_CR1 D.ADC_JSQR

61.ARM Cortex-M3不可以通过( D )唤醒CPU。

A.I/O端口 B.RTC 闹钟

C.USB唤醒事件 ==D.PLL==

62.STM32嵌套向量中断控制器(NVIC) 具有( A ) 个可编程的优先等级。

==A.16== B.43

C.72 D.36

64.STM32的外部中断/事件控制器(EXTI)支持( C )个中断/事件请求。

A.16 B.43

==C.19== D.36

65.STM32的USART根据( A )寄存器M位的状态,来选择发送8位或者9位的数据字。

==A.USART_CR1== B.USART_CR2

C.USART_BRR D.USART_CR3

66.DMA控制器可编程的数据传输数目最大为(A )。

==A.65536== B.65535

C.1024 D.4096

67.每个DMA通道具有( A )个事件标志。

==A.3== B.4

C.5 D.6

68.STM32中,1 个DMA请求占用至少( B )个周期的CPU 访问系统总线时间。

A.1 ==B.2==

C.3 D.4

二、判断题

1.Cortex-M3系列处理器支持Thumb指令集。( 错 )

2.Cortex-M3系列处理器支持Thumb-2指令集。( 对 )

3.Contex-M3系列处理器内核采用了哈佛结构的三级流水线。( 对 )

4.Cortex-M系列不支持Thumb-2指令集。( 错 )

5.Contex-M3系列处理器内核采用了冯诺依曼结构的三级流水线。( 错 )

6.STM32系列MCU在使用电池供电时,提供3.3~5V的低电压工作能力。( 错 )

7.STM32处理器的LQPF100封装芯片的最小系统只需7个滤波电容作为外围器件。( dui )

8.Cortex-M3在待机状态时保持极低的电能消耗,典型的耗电值仅为2µA。( 错 )

9.当处理器在Thread模式下,代码一定是非特权的。( 错 )

10.Context-M3处理器可以使用4个堆栈。( 错 )

11.在系统复位后,所有的代码都使用Main栈。( 对 )

12.高寄存器可以被所有的32位指令访问,也可以被16位指令访问。( 错 )

13.在系统层,处理器状态寄存器分别为:APSR,IPSR, PPSR。( 错 )

14.APSR程序状态寄存器的28位,当V=0,表示结果为无益处。( 对 )

15.Cortex-M3只可以使用小端格式访问代码。( 错 )

16.所谓不可屏蔽的中断就是优先级不可调整的中断。( 错)

17.向量中断控制器只负责优先级的分配与管理,中断的使能和禁止和它无关。( 错 )

18.Cortex-M3体系架构中,有了位带位操作后,可以使用普通的加载/存储指令来对单一的比特进行读写。(对)

19.Cortex-M3体系架构中,有两个区中实现了位带:一个是 SRAM 区的最低 1MB 范围,第二个则是片内外设 区的最低 1MB 范围。(对)

20.stm3210xx的固件库中,RCC_DeInit函数是将RCC寄存器重新设置为默认值。(对)

21.stm3210xx的固件库中,RCC_PCLK2Config函数是用于设置低速APB时钟。(错 )

22.STM32的串口既可以工作在全双工模式下,也可工作在半双工模式下。( 对)

23.STM32的串口既可以工作在异步模式下,也可工作在同步模式下。(对)

24.每个I/O端口位可以自由的编程,尽管I/O端口寄存器必须以32位字的方式访问。(对)

25.所有的GPIO引脚有一个内部微弱的上拉和下拉,当它们被配置为输入时可以是激活的或者非激活的。( 对)

26.所有的GPIO引脚有一个内部微弱的上拉和下拉,当它们被配置为输出时可以是激活的或者非激活的。(错 )

27.端口输入数据寄存器的复位值为00000000H。( 对)

28.端口输入数据寄存器位[15:0]是只读的,并且仅能按字访问,它们包含相关I/O端口的输入值。(对 )

29.端口输入数据寄存器位[7:0]是只读的,并且仅能按字访问,它们包含相关I/O端口的输入值。( 错)

30.固件包里的Library文件夹包括一个标准的模板工程,该工程编译所有的库文件和所有用于创建一个新工程所必须的用户可修改文件。( 错)

31.从是否可编程的角度 ,中断可分为固定优先级中断和可调整优先( 对 )

32.从某种意义上说,异常就是中断。(对 )

33.所谓不可屏蔽的中断就是优先级不可调整的中断。( 错)

34.向量中断控制器只负责优先级的分配与管理,中断的使能和禁止和它无关。(错)

35.中断的优先级和它在中断向量表里的位置没有关系。( 错)

36.当抢占式优先级不一样时,一定会发生抢占。( 错)

37.向量中断控制器允许有相同的优先级。( 对)

38.如果两个中断的抢占式优先级相同,则按先来后到的顺序处理。(对 )

39ADC主要完成模/数转换功能。( 对)

40.STM32 ADC是一个12位的连续近似模拟到数字的转换器。( 对)

41.ADC转换器在每次结束一次转换后触发一次DMA传输。(对)

42.由AD的有限分辨率而引起的误差称为量化误差。(对)

43.转换速率是指完成一次从模拟到数字的AD转换所需的时间。( 对)

44.STM32 ADC只可以在单一模式下工作。( 错)

45.如果规则转换已经在运行,为了注入转换后确保同步,所有的ADC的规则转换被停止,并在注入转换结束时同步恢复。( 对)

三、填空题

1.ST公司的STM32系列芯片采用了 ==Cortex-M3== 内核,其分为两个系列。 ==STM32F101==

系列为标准型,运行频率为 ==36MHZ== ; ==STM32F103== 系列为标准型,运行频率为 ==72MHZ== 。

2.当STM32的I/O端口配置为输入时, ==输出缓冲器==被禁止, ==施密特触发输入== 被激活。根据输入配置(上拉,下拉或浮动)的不同,该引脚的 ==弱上拉和下拉电阻== 被连接。出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器,对 ==输入数据寄存器== 的读访问可得到I/O状态。

3.STM32的所有端口都有外部中断能力。当使用 ==外部中断线== 时,相应的引脚必须配置成 ==输入模式== 。

4.STM32具有单独的位设置或位清除能力。这是通过 ==GPIOX_BSRR== 和 ==GPIOX_BRR== 寄存器来实现的。

5.ST公司还提供了完善的通用IO接口库函数,其位于 ==stm32f10x_bgpio.c== ,对应的头文件为 ==stm32f10x_gpio.h== 。

6.为了优化不同引脚封装的外设数目,可以把一些 ==复用功能== 重新映射到其他引脚上。这时,复用功能不再映射到 ==它们原始分配的引脚== 上。在程序上,是通过设置 ==复用重映射和调试I/O口配置寄存器(AFIO_MAPR)== 来实现引脚的重新映射。

7.STM32芯片内部集成的 ==12== 位ADC是一种逐次逼近型模拟数字转换器,具有 ==18== 个通道,可测量 ==16== 个外部和 ==2== 个内部信号源。

8.在STM32中,只有在 ==规则通道== 的转换结束时才产生DMA请求,并将转换的数据从 ==ADC_DR== 寄存器传输到用户指定的目的地址。

9.在有两个ADC的STM32器件中,可以使用 ==双ADC== 模式。在 ==双ADC== 模式里,根据 ==ADC_CR1== 寄存器中 ==DUALMOD[2:0]== 位所选的模式,转换的启动可以是ADC1主和ADC2从的交替触发或同时触发。

10.ADC的校准模式通过设置 ==ADC_CR2== 寄存器的 ==CAL== 位来启动。

11.在STM32中, ==ADC_CR2== 寄存器的 ==ALIGN== 位选择转换后数据储存的对齐方式。

12.在STM32内部还提供了 ==温度传感器== ,可以用来测量器件周围的温度。温度传感器在内部和 ==ADC_IN16== 输入通道相连接,此通道把传感器输出的电压转换成数字值。内部参考电压 ==VREFINT== 和 ==ADC_IN17== 相连接。

13.STM32的 ==嵌入向量中断控制器(NVIC)== 管理着包括Cortex-M3核异常等中断,其和ARM处理器核的接口紧密相连,可以实现 低延迟 的中断处理,并有效地处理 ==晚到== 中断。

14.STM32的外部中断/事件控制器(EXTI)由 ==19== 个产生事件/中断要求的边沿检测器组成。每个输入线可以独立地配置 ==输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)== 。每个输入线都可以被独立的屏蔽。 ==挂起寄存器== 保持着状态线的中断要求。

15.STM32的EXTI线16连接到 ==PVD输出== 。

16.STM32的EXTI线17连接到 ==RTC闹钟事件== 。

17.STM32的EXTI线18连接到 ==USB唤醒事件== 。

18.STM32的 ==USART== 为通用同步异步收发器,其可以与使用工业标准 ==NRZ== 异步串行数据格式的外部设备之间进行全双工数据交换。

19.STM32的USART可以利用 ==分数波特率== 发生器提供宽范围的波特率选择。

20.智能卡是一个 ==单线半双工== 通信协议,STM32的智能卡功能可以通过设置USART_CR3寄存器的 ==SCEN== 位来选择。

22.系统计时器(SysTick)提供了1个 ==24位,降序==,的计数器,具有灵活的控制机制

23.STM32的通用定时器TIM,是一个通过 ==可编程预分频器== 驱动的 ==16== 位自动装载计数器构成。

24.STM32通用定时器TIM的16位计数器可以采用三种方式工作,分别为 ==向上计数== 模式、 ==向下计数== 模式和 ==中央对其== 模式。

25.ST公司还提供了完善的TIM接口库函数,其位于 ==stm32f10x_tim.c== ,对应的头文件为 ==stm32f10x_tim.h==。

26.TIM1的==益处/下益时更新事件(UEV)==只能在重复向下计数达到0的时候产生。这对于能产生PWM信号非常有用。

27.TIM1具备 ==16位==可编程预分频器,时钟频率的分频系数为 ==1~65536== 之间的任意数值。

28.STM32系列ARM Cortex-M3芯片支持三种复位形式,分别为 ==系统== 复位、 ==电源== 复位和 ==备份区域== 复位。

29.STM32还提供了用户可通过多个预分频器,可用来进一步配置 ==AHB== 、高速 ==APB(APB2 )== 和低速==APB(APB1 )==域的频率。

30.用户可用通过 ==32.768K== Hz外部振荡器,为系统提供更为精确的主时钟。在时钟控制寄存器 ==RCC_CR== 中的 ==HSERDY== 位用来指示高速外部振荡器是否稳定。

31.ST公司还提供了完善的RCC接口库函数,其位于 ==stm32f10x_rcc.c== ,对应的头文件为 ==stm32f10x_rcc.h== 。

32.当STM32复位后, ==HSL振荡器== 将被选为系统时钟。当时钟源被直接或通过PLL 间接作为系统时钟时,它将不能被 ==停止== 。只有当 ==目标时钟源== 准备就绪了(经过启动稳定阶段的延迟或PLL 稳定),才可以从一个时钟源切换到另一个时钟源。在被选择时钟源没有就绪时,系统时钟的切换 ==不会发生== 。

33.在STM32中,备份寄存器是 ==16== 位的寄存器,共 ==10== 个,可以用来存储 ==20== 个字节的用户应用程序数据。

34.备份寄存器位于 ==备份区== 里,当 ==主电源VDD== 被切断,他们仍然由 ==VBAT== 维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们 ==也不会== 被复位。

35.STM32的备份寄存器还可以用来实现 ==RTC== 校准功能。为方便测量,32.768kHz的RTC 时钟可以输出到 ==入侵检测==引脚上。通过设置RTC 校验寄存器(BKP_RTCCR)的 ==CCO== 位来开启这一功能。

36.当STM32的 ==ANTI_TAMP== 引脚上的信号发生跳变时,会产生一个侵入检测事件,这将使所有数据备份寄存器 ==复位== 。

37.ST公司还提供了完善的备份寄存器接口库函数,其位于==stm32f10x_bkp.c== ,对应的头文件为 ==stm32f10x_bkp.h== 。

38.STM32的DMA 控制器有 ==7== 个通道,每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个 ==仲裁器== 来协调各个DMA 请求的优先权。

39.在DMA处理时,一个事件发生后,外设发送一个请求信号到 ==DMA控制器== 。DMA 控制器根据通道的 ==优先权== 处理请求。

40.DMA控制器的每个通道都可以在有固定地址的 ==外设寄存器==和 ==存储器地址== 之间执行DMA传输。DMA传输的数据量是可编程的,可以通过 ==DMA_CCRX== 寄存器中的 ==PSIZE== 和 ==MSIZE== 位编程。

41.ST公司还提供了完善的DMA接口库函数,其位于 ==stm32f10x_dma.c== ,对应的头文件为 ==stm32f10x_dma.h== 。

45.在STM32中,从外设(TIMx、ADC、SPIx、I2Cx 和USARTx)产生的7个请求,通过逻辑 ==与== 输入到DMA控制器,这样同时 ==只能有一个== 个请求有效。

Q.E.D.


--------------------------------舟清颺的个人博客-------------------------------