中国海洋大学工程学院含简答程序答案修正版ARM原理及应用复习题Word格式.docx
《中国海洋大学工程学院含简答程序答案修正版ARM原理及应用复习题Word格式.docx》由会员分享,可在线阅读,更多相关《中国海洋大学工程学院含简答程序答案修正版ARM原理及应用复习题Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
由于嵌入式系统只针对一项特殊的任务,设计人员能够对它进行优化,减小尺寸降低成本。
嵌入式系统通常进行大量生产,所以单个的成本节约,能够随着产量进行成百上千的放大。
2.ARMCortex-M3有何特点?
分支预测,哈佛结构,内置嵌套向量中断控制器,支持位绑定操作,支持串行调试,内核支持低功耗模式,高效的Thumb216/32位混合指令集,32位硬件除法和单周期乘法,支持存储器非对齐访问,定义了统一的存储器映射,极高的性价比。
3.简述Cortex-M3系统滴答定时器的功能和作用。
SysTick定时器被捆绑在NVIC中,用于产生SysTick异常。
操作系统和所有使用了时基的系统,都必须要一个硬件定时器来产生需要的“滴答”中断,作为整个系统的时基。
其对操作系统尤其重要。
例如,操作系统可以为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;
或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。
因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。
4.STM32共有那几种基本时钟信号?
4种
HSI:
高速内部时钟信号
HSE:
高速外部时钟信号
LSE:
低速外部时钟信号
LSI:
低速内部时钟信号
5.简述嵌套向量中断控制器(NVIC)的主要特性。
支持嵌套和向量中断。
自动保存和恢复处理器状态。
动态改变优先级。
简化的和确定的中断时间,中断延迟大大缩短。
具有43个可屏蔽中断通道。
现低延迟的异常和中断处理。
具有电源管理控制。
具有16个可编程的优先等级。
系统控制寄存器的实现。
6.简述STM32上机调试操作步骤。
(1)启动STM32开发平台程序
(2)编写/改编程序源代码
(3)静态查错无误后,进行编译,避免语法错误和低级失误。
(4)连接硬件烧录程序
(5)观察硬件是否按照预期工作,如非正常工作,优先检查代码中端口/寄存器/变量定义,中断优先级,核心程序代码是否存在错误/漏洞,再检查硬件系统是否有损坏。
(6)根据发现的bug进行debug工作,修改代码,更换/维修硬件系统,直至系统工作正常。
7.简述STM32中USART功能特点。
STM32的USART为通用同步异步收发器,其可以与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。
USART还可以利用分数波特率发生器提供宽范围的波特率选择。
STM32的USART支持同步单向通信和半双工单线通信。
同时,其也支持LIN(局部互连网),智能卡协议和IrDA(红外数据)SIRENDEC规范,以及调制解调器(CTS/RTS)操作。
STM32还具备多处理器通信能力。
另外,通过多缓冲器配置的DMA方式,还可以实现高速数据通信。
8.简述STM32中SPI功能特点。
串行通信设备接口SPI是工业标准串行协议,通常用于嵌入式系统,将微处理器连接到各种片外传感器,转换器,存储器和控制设备。
SPI可以实现主设备或从设备协议,当配置为主设备时,SPI可以连接16个的从设备,发送数据和接收数据寄存器的宽度可以配置为8位或16位。
作用有读写flash(存有字库,图片等等)芯片,与触摸屏控制器通信,读写sd卡。
9.简述STM32中TIM功能特点。
STM32提供了一个高级控制定时器(TIM1,TIM8)。
TIM1由一个16位的自动装载计数器组成,它由一个可编程预分频器驱动。
TIM1适合多种用途,包含测量输入信号的脉冲宽度,或者产生输出波形。
使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。
高级控制定时器TIM1和通用控制定时器TIMx是完全独立的,它们不共享任何资源,因此可以同步操作。
TIM2-TIM5是普通定时器,TIM6和TIM7是基本定时器,其时钟由APB1输出产生。
10.简述STM32中ADC功能特点。
STM32的ADC系统的主要功能特性包括如下几个方面:
ADC开关控制、ADC时钟、ADC通道选择、ADC的转换模式、中断、模拟看门狗、ADC的扫描模式、ADC的注入通道管理、间断模式、ADC的校准模式、ADC的数据对齐、可编程的通道采样时间、外部触发转换、DMA请求、双ADC模式和温度传感器。
11.什么是嵌入式系统?
嵌入式系统一般由哪几部分构成?
嵌入式系统,是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”;
一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成。
嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。
执行装置也称为被控对象
12.Cortex-M3的处理器有那两种工作模式和状态?
如何进行工作模式和状态的切换?
关于工作模式
Cortex-M3处理器支持2种工作模式:
线程模式和处理模式。
在复位时处理器进入“线程模式”,异常返回时也会进入该模式。
出现异常模式时处理器进入“处理模式”。
关于工作状态
Coretx-M3处理器有2种工作状态。
Thumb状态:
这是16位和32位“半字对齐”的Thumb和Thumb-2指令的执行状态。
调试状态:
处理器停止并进行调试,进入该状态。
13.简述STM32的不同复用功能的重映射功能。
IO口可以有多种用途,比如可以作为普通的输入输出口使用,也可以作为PWM通道使用,还有DAC通道等,但需要相应的配置。
14.简述STM32中I2C功能特点。
I2C(芯片间)总线接口连接微控制器和串行I2C总线。
它提供多主机功能,控制所有I2C总线特定的时序、协议、仲裁和定时。
支持标准和快速两种模式,同时与SMBus2.0兼容。
I2C模块有多种用途,包括CRC码的生成和校验、SMBus(系统管理总线—SystemManagementBus)和PMBus(电源管理总线—PowerManagementBus)。
15.STM32高级定时器有哪些功能?
高级定时器TIM1适合多种用途,包含测量输入信号的脉冲宽度,或者产生输出波形。
16.如何设置STM32的串口的波特率。
使用Usart1_Init(void)中的函数USART1->
BRR=取整【(晶振频率)/(需设置的波特率)】函数即可。
17.Cortex-M3的存储空间可以分为哪几个部分,每一部分的地址范围是怎样的?
内核设备:
0xE0000000-0xE00FFFFF
片上设备:
0x40000000-0x5FFFFFFF
SRAM:
0x20000000-0x3FFFFFFF
Flash:
0x00000000-0x1FFFFFFF
18.STM32的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.编制一个循环点亮LED灯的程序。
有4个发光二极管,它们的公共极(阳极)接+5V,阴极通过限流电阻分别于PB12、PB13、PB14、PB15,每次控制其中某个LED灯点亮1S后,转到下一个LED灯亮,循环不止。
#include“main.h”
charflag=0,sec=0,sec1=0;
unsignedshortled_dat[4]={1<
<
12,1<
13,1<
14,1<
15};
charled_num=0;
intmain(void)
{
SysTick_Init();
Led_Init();
While
(1)
SysTick_Proc();
Led_Proc();
}
voidSysTick_Init(void)
SysTick->
LOAD=1E6;
CTRL=1;
voidSysTick_Proc(void)
if(SysTick->
CTRL&
1<
16)
Sec+=1;
if((sec&
0xf)>
9)
sec+=6;
voidLed_Init(void)
RCC->
APB2ENR|=1<
3;
GPIOB->
CRH&
=0x0000ffff;
CRH|=0x33330000;
VoidLed_Proc(void)
if(sec!
=sec1)
sec1=sec;
GPIOB->
BSRR=0xf000;
//灭所有LED灯
BRR=led_dat[led_num];
//亮所有LED灯
if(flag)
{
if(++led_num==4)
led_num=0;
else
if(led_num--==0)
led_num=3;
2.编制一个LED数码管测试程序。
数码管采用共阳极接+3.3V,阴极通过限流电阻分别于PA0、PA1、PA2、PA3、PA4、PA5、PA6和PA7,数码管的段与I/O口连接的对应关系是a->
PA0,b->
PA1,c->
PA2,d->
PA3,e->
PAA4,f->
PA5,g-PA6,dp->
PA7,试编程在数码管实现数字0~9循环显示,每个数字显示1秒。
#include“main.h”
unsignedshortled_dat[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
GPIOA->
=0x00000000;
CRH|=0x33333333;
GPIOA->
//灭所有LED数码管
//亮所有LED数码管
if(++led_num==10)
led_num=9;
3.编制一个使用STM32的USART1与PC机实现串行通讯,串行口使用1位起始位、8位数据位、无校验位和1停止位,波特率位9600bps。
编程实现接收PC机发送的数据后回传给PC机
VoidUsart1_Init(void)
RCC->
2;
14;
CRH&
=0xfffff00f;
CRH|=0x000004b0;
USART1->
BRR=0x0045;
//波特率设置
CR1|=1<
13;
charUsart1_Txd(chardata)
DR=data;
while(!
(USART1->
SR&
7));
returndata;
charUsart1_Rxd(void)
if(USART1->
5)
returnUSART1->
DR;
elsereturn0;
voidmain(void)
Usart1_Init();
while
(1){};
4.编制一个使用STM32的USART2与PC机实现串行通讯,串行口使用1位起始位、8位数据位、无校验位和1停止位,波特率位19200。
编程实现接收PC机发送的数据(大写字母)后转换为小写字母回传给PC机。
voidUsart2_Init(void)
CRL&
CRL|=0x00000bb0;
USART2->
BRR=416;
USART2->
charUsart2_Txd(chardata)
charUsart2_Rxd(void)
if(USART2->
returnUSART2->
charx;
Usart2_Init();
while
(1)
{
if(USART2->
x=USART2->
DR=X+0x20;
}
5.编制一个使用STM32定时器的TIM1的PWM功能,实现产生周期为5ms,占空比位70%的PWM矩形波。
(系统晶振为8MHz)
voidTim1_Init(void)
11;
=0xfffffff0;
CRH|=0x0000000b;
TIM1->
PSC=4000;
ARR=10;
//周期=ARR*0.5ms
CCMR1|=0x60;
CCER|=1;
CCR1=7;
//占空比=CCR1/ARR=70%
BDTR=1<
15;
CR1=1;
while
(1){};