嵌入式作业题答案.docx
《嵌入式作业题答案.docx》由会员分享,可在线阅读,更多相关《嵌入式作业题答案.docx(27页珍藏版)》请在冰豆网上搜索。
嵌入式作业题答案
第1章嵌入式系统概述
1.什么是嵌入式系统?
嵌入式系统的组成?
答:
嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
组成:
嵌入式处理器、外围设备、操作系统、应用软件。
2.典型的嵌入式处理器有哪些?
3.答:
微处理器、微控制器、DSP处理器、片上系统SOC。
4.典型的RTOS操作系统有哪些?
5.答:
嵌入式LinUX、卩CLinUX、WindoWSEmbeddedCE、WindoWSEmbeddedComPaCt7>μC/OS-II>μC/OS-III、VXWorks、eCos等。
6.列举身边的嵌入式应用产品?
7.嵌入式系统的设计可以分成四个阶段:
需求分析、架构设计和概要设计、详细设计和开发、测试反馈。
第2章COrteX-M体系结构
8.ARMCOrteX系统的处理器分为:
A、R、M。
9.ARMCOrteX-M3为32位微控制器,请问32位指的是CPlJ字长。
10.3、COrteX-M3处理器能够以小端格式或大端格式访问存储器中的数据字,而访问代码时始使用小端格式
11.ARMCOrteX-M3体系结构采用哈佛总线结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行进行。
12.CM3寄存器分为通用寄存器,包括R0~R15和特殊功能寄存器,包括程序状态寄存器、异常屏蔽寄存器、控制寄存器。
13.寄存器R13是堆栈指针寄存器。
14.寄存器R14是程序连接寄存器。
15.寄存器R15是程序PG
16.CM3的堆栈指针分为__MSP___=PSPrO存储器堆栈堆栈分为:
向上生长(即向高地址方向生长)的递增堆栈;向下生长(即向低地址方向生长),称为递减堆栈。
堆栈指针指向最后压入堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个数据项放入的空位置,称为空堆栈。
试判断CM3属于递减堆栈堆栈和满堆栈堆栈。
17.在CM3中记录程序状态的寄存器是=XPSR=。
都分别有些什么状态—应用状态、中断状态、可执状态。
18.PRIMASK寄存器的作用是_中断屏蔽寄存器_o
19.寄存器CONTRO的作用是控制处理器工作级别及堆栈切换。
20.CM3支持的4GB存储空间被划分成:
CODE片上RAM片上外设、片外RAM片外外设、内核私有6个区域。
21.CM沖有一个位绑定区分别位于片上RAM和片上外设区,其大小为1M字节,由32M字节空间的位绑定别名区来访问。
22.CM3支持1£种系统异常,和240种外设中断。
23.SySTiCk是一个___24位的系统定时器。
通常的功能是_作为操作系统时钟__。
第3章STM32基础及最小系统设计
24.STM32F103RBT7芯片的在片Flash存储器有128KB字节,在片SRAM存储器有20KB字节。
25.STM32F103RBT7芯片工作时电源电压是3.3V。
26.STM32最小系统电路包含:
MCU芯片、电源电路、时钟电路、复位电路和启动设置电路。
27.连接在APB1上的设备有:
电源接口、备分接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、WatChDOg、Timer2、Timer3和Timer4。
28.连接在APB2上的设备有:
UART1、SPI1、TimerI、ADC1、ADC2、I/O(PA〜PE,第二功能I/O)。
29.假定STM32F103单片机外部振荡器是8MHz。
执行下列程序。
voidBSP=Init(VOid)
{
RCC=HSECOnfig(RCC=HSE=ON);
HSEStartUPStatUS=RCC=WaitFOrHSEStartUP();
if(HSEStartUpStatus==SUCCESS)
{
RCC=PCLK2Config(RCC=HCLK=Div1);//PCLK2=HCLK=72MHz
RCC=PCLK1Config(RCC=HCLK=Div2);//PCLK1=HCLK/2=38MHZ
RCC=HCLKCOnfig(RCC=SYSCLK=DiV1);//HCLK=SYSCLK=72MHZ
RCC=PLLCOnfig(RCC=PLLSource=HSE=Div1,RCC=PLLMUl=9);//PLLCLK=8*9=72MHzRCC=PLLCmd(ENABLE);//EnabIePLL
While(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//等待PLL就绪
RCC_SYSCLKCOnfig(RCC_SYSCLKSOUrCe_PLLCLK);//设置PLL作为时钟源
WhiIe(RCC_GetSYSCLKSource()!
=0x08);//等PLL时钟源启动就绪
}
}
请问,上述程序执行后,HCLK=72MHZ,PCLKI=38MHZ,PCLK2=72MHZ,
30.利用COrteX-M3内核的24位定时器(SySTiCk),定时10ms,请计算初值并写出初始化程序,SySTiCk配置函数:
uint32_tSySTiCk_COnfig(Uint32_tticks)o假设HCLK的时钟是72MHz。
1
答:
初值=720000-1oN10ms,共中N是计数的次数,由于SySTiCk是减计数器,因此初值为720000-1。
72M
VoidSySTiCkInit(VOid)
{
SySTiCk_COnfig(720000-1);
}
第5章通用I/O结构及应用
31.STM32F103微控制器的I/O端口有PA~PG,每组多达16端口。
32.STM32F103微控制器的I/O端口的功能:
通用输入/输出、中断功能、复用功能和重映射功能。
33.请编程实现如图所示4只发光二极管流水。
/********************************************************/
/*说明:
PC8-PC15连接LED
********************************************************/
#include"stm32f10x.h"
#include"system_stm32f10x.h"
#include"stm32f10x_gpiO.h"
#include"stm32f10x_rcc.h"
VOidDeIayMs(intn);
/********************************************************/
intmain(vOid)
{
GPIO」nitTypeDefGPIO_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」nitStrUCtUre);
GPIO_Write(GPIOC,OXFFFF);
34.请编程实现键控蜂鸣器,当按键KEYI按下时,蜂鸣器发声,再按下不发声,按键采用中断方式控制
*******************************************************
/*说明:
KEY1->PA0;Buz->PB4
按键采用中断,在中断服务程中取反PB4
*******************************************************
#include"stm32f10x.h"
#include"system_stm32f10x.h"
#include"stm32f10x_gpio.h"
#include"stm32f10x_rcc.h"
#include"stm32f10x_exti.h"
#include"misc.h"
中断第二级配置
***************
**/
voidNVIC_COnfigUration(void)
{
NVIC_InitTyPeDefNVIC_InitStrUCture;
NVIC_InitStrUCtUre.NVIC_IRQChanneI=EXTI0_IRQn;
NVIC_InitStrUCtUre.NVIC_IRQChanneIPreemPtiOnPriority=0;
NVIC_InitStrUCtUre.NVIC_IRQChanneISUbPriOrity=0;
NVIC_InitStrUCtUre.NVIC_IRQChanneICmd=ENABLE;
NVIC_Init(&NVIC—lnitStructure);
}
中断第三级配置
****************
**/
voidEXTI_COnfigUration(void)
{
EXTI_InitTypeDefEXTI_InitStrUCtUre;
GPIO_EXTILineCOnfig(GPIO_PortSoUrceGPIOA,
GPIO_PinSoUrce0);
EXTLInitStrUCtUre.EXTLLine=EXTI_Line0;
EXTI_InitStrUCtUre.EXTI_MOde=EXTI_MOde_InterrUpt;
EXTLInitStrUCtUre.EXTLTrigger=EXTI_Trigger_Falling;
EXTLInitStrUCtUre.EXTLLineCmd=ENABLE;
EXTI_Init(&EXTI_lnitStrUCtUre);
}
按键初始化
**********************
**/
voidkey_init(VOid)
{
GPIO_lnitTypeDefGPIO」nitStrUCtUre;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_lnitStrUCtUre.GPIO_Pin=GPIO_Pin_0;
GPIO_lnitStrUCtUre.GPIO_Mode=GPIO_Mode_IPU;
GPIO_lnitStrUCtUre.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStrUCtUre);
}
蜂鸣器端口初始化
****************
**/
voidBUZZer_Init(VOid)
{
GPIO_InitTypeDefGPIO」nitStrUCtUre;
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_lnitStrUCtUre.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_lnitStrUCtUre.GPIO_Mode=GPIO_Mode_OUt_PP;
GPIO_Init(GPIOB,&GPIO_InitStrUCtUre);
GPIO_ResetBits(GPIOB,GPI0_Pin_4);〃置低电平,关闭蜂鸣器}
intmain(void)
{
key_init();
BUZZer_Init();
__set_PRIMASK(0x00);//一级开关使能
NVIC_COnfigUration();//二级开关使能
EXTI_COnfigUration();//三级开关使能
while
(1){;}
}
/********************************************************/
VoidEXTIO-IRQHandIer(Void)
{
if(EXTI_GetITStatUS(EXTI_LineO)!
=RESET)
{
GPIO_WriteBit(GPIoB,
GPI0_Pin_4,(BitACtion)(1-GPI0_Read0utputDataBit(GPIoB,GPIO_Pin_4)));;
}
EXTI_CIearITPendingBit(EXTI_Line0);
}
第6章定时器结构及应用
35.STM32F103定时器是16位定时器。
36.STM32F103的基本定时器有:
TIM6、TIM7,通用定时器有:
TIM2~TIM5,高级定时器有:
TIM1、TIM8。
37.STM32F103定时器的主要功能有:
定时功能、输入捕获功能、输出比较功能(PWM)等。
38.已知系统时钟为72MHz,采用定时器TIM1产生周期为100ms的定时时间间隔并通过LED发光二极管指示定时过程,发光二极管与PC15相连。
分析:
TIM1的时钟为72MHz,定时100ms,需要计数7.2X106,已超出计数值范围,因此必须对输入时钟信号进行分频。
分频系数有多种选择,
只要在计数范围内即可,只是计数值越大,分频率越高。
对输入时钟进行状态反转。
360分频,则计数值为2000,程序采用中断的方式,计时时间到LED
/*****************************************************
{
说明:
已知系统时钟为72MHz,采用定时器TIM1产生周期为100ms
/*
的定时时间间隔并通过LED发光二极管指示定时过程。
TIM1Configuration:
OUtPUtCOmPareTimingMode:
*****************************************************/
TIMICLK=72MHz,PreSCaIer=360,period=2000
#include"stm32f10x.h"
*/
#include"system_stm32f10x.h"
TIM_TimeBaSeInitTyPeDefTIM_TimeBaSeStrUCture;
#include"stm32f10x_GPIO.h"
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
#include"stm32f10x_tim.h"
TIM_TimeBaSeStrUCtUre.TIM_PeriOd=2000;//初值
#include"stm32f10x_rcc.h"
TIM_TimeBaSeStrUCtUre.TIM_PreSCaler=360-1;//时钟预分频值
#include"misc.h"
TIM_TimeBaSeStrUCtUre.TIM_ClockDivision=TIM_CKD_DIV1;
/*****************************************************
TIM_TimeBaSeStrUCtUre.TIM_COUnterMOde=
说明丄ED端口初始化PA15接LED.PD2控制锁存器
TIM_COUnterMOde_Down;//计数方式
*****************************************************/
TIM_TimeBaSeInit(TIM1,&TIM_TimeBaSeStrUCture);
voidGPIO_COnfigUration(void)
TIM_ITCOnfig(TIM1,TIM」T_UPdate,ENABLE);//使能中断(三级)
{
TIM_Cmd(TIM1,ENABLE);
GPIO_InitTyPeDefGPIO_InitStrUCture;
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
voidNVIC_COnfigUration()//使能第二级中断开关
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
{
GPIO_InitStrUCtUre.GPIO_Pin=GPIO_Pin_15;
NVIC_InitTyPeDefNVIC_InitStrUCture;
GPIO_InitStrUCtUre.GPIO_Mode=GPIO_Mode_OUt_PP;
NVIC_InitStrUCtUre.NVIC_IRQChanneI=TIM1_UP_IRQn;
GPIO_InitStrUCtUre.GPIO_SPeed=GPIO_SPeed_50MHz;
NVIC_InitStrUCtUre.NVIC_IRQChanneIPreemPtiOnPriority=0;
GPIO_Init(GPIOC,&GPIO」nitStructure);
NVIC_InitStrUCtUre.NVIC_IRQChanneISUbPriOrity=0;
GPIO_Write(GPIOC,OXFFFF);
NVIC_InitStrUCtUre.NVIC_IRQChanneICmd=ENABLE;
/*************^下面^为74HC573存控制H****************/
NVIC_Init(&NVIC—lnitStructure);
GPIO_InitStrUCtUre.GPIO_Pin=GPIO_Pin_2;
}
GPIO」nitStructure.GPIO_Mode=GPIO_Mode_OUt_PP;
intmain()
GPIO」nitStructure.GPIO_Speed=GPIO_SPeed_2MHz;
{
GPIO」nit(GPIOD,&GPIO_InitStrUCture);
GPIO_COnfigUration();
//NLE置高,打开锁存器74HC573
NVIC_COnfigUration();
GPIO_SetBitS(GPIOD,GPIO_Pin_2);
TIM1_COnfigUration();
}
while
(1)
voidTIM1_COnfigUration(void)
}
第7章USART结构及应用
39.常见的短距离异步串行通信协议标准有:
RS232标准、RS485标准。
40.在异步串行通信中RS232标准的硬件连线主要有:
RX(数据接收线)、TX(数据发送)、GND(地线)组成。
41.STM32F103中的USART模块支持:
同步串行数据收和异步串行数据收发。
42.STM32F103中的USART模块支持:
全双工异步通信、同步单向通信和半双工单线通信。
43.STM32F103的USART模块程序初始化中主要涉及:
波特率、数据位、校验、停止位等设置。
44.STM32F103的USART模块的波特率最高可达:
4.5Mbit∕s。
45.请利用STM32F103的USART模块实现与计算机之间通信,STM32F103发送:
"Pleaseinputdata!
:
"到计算机,计算机利用串口调试软件接
收数据,然后计算机发送数据到STM32F103,并通过开发析上的LCD显示出接收的数据。
分析:
如图所示,采用串口2(USART2),用到PA2、PA3两个管脚,STM32F103的USART配置成波特率:
9600bit/s,数据位8位,停
止位1位,校验位无。
数据接收采用中断方式进行。
whiIe
(1)
{
LCD_DiSPIayStringLine(Line4,"ReCeiveData:
");
LCD_DiSPIayStringLine(Line5,RxBUffer);
}
}
第8章SPI结构及应用
46.SPI主从设备需共享时钟线,因此称为:
同步串行通信总线。
47.SPI总线采用主从连接架构,通信双方分为:
主控端(MaSter)和从动端(SIaVe)。
48.SPI接口的硬件连接线共有4根,分别是:
设备片选线SS、时钟信号线SCLK、串行输出数据线MoSl、串行输入数据线MISo
49.STM32F103中的SPI总线通信中数据帧格式有:
8位数据和16位数据。
50.STM32F103中的SPI总线支持硬件CRC校验以实现可靠通信。
51.
请利用STM32F103的SPI总线向LED显示模块发送显示信息,在LED上显示“01234567”。
如图所示硬件连接。
第11章ADC结构及应用
52.A/D转换是将:
连续变化的模拟信号变为对应的离散数字信号。
53.模拟信号转化为数字信号包含三个关键步骤:
采样、量化和编码。
54.A/D转换的主要技术指示有:
位数、采样速率、分辨率等等。
55.STM32F103的ADC模块是一个12位逐次逼近型ADC,包含18个通道,可测量16个外部信号和2个内部信号。
56.当STM32F103的ADC模块被测电压范围是0~3.3V连续变化的模拟信号,ADC转换的参考电压是3.3V,请问当被测信号为3.3V时对应
的转换后的数字量是:
111111111111十进制4096,十六进制OXfff),当被测信号为0V时对应的数字量是:
000000000000。
当转换后的数字量为100000000000(十进制2048,十六进制0x800)时对应的模拟电压为:
1.65V。
57.请利用STM32F103的ADC模块转换如图所示模拟电压并能过LCD显示器显示被测信号电压值。
分析:
PBo对应ADCI模块的8号通道。
拟采用软件触发采样,通过查询标志位,获取转换结果。
程序流程图如上图所示
#include"stm32f10x.h"
#include"stm32f10x_conf.h"
#include"stdio.h"
#include"lcd.h"
#include"delay.h"
voidadc_init(Void)
{
GPIO_InitTyPeDefGPIO_InitStrUCture;
ADC_InitTyPeDefADC_InitSt