2014计量学院-嵌入式系统试卷答案 - 图文
更新时间:2024-05-31 18:23:01 阅读量: 综合文库 文档下载
- 浙江计量学院推荐度:
- 相关推荐
中国计量学院2013 ~ 2014 学年第 1 学期《嵌入式系统原理与应用》课程试卷(A)参考答案及评分标准 1. 画出基于ARM-Cortex M3内核最小系统的电路图,并进行简要说明启动引脚所对应的启动模式。(10分)
最小系统的电路图,能正确画出图或者用文字描述得(6分)
启动模式说明,能正确画出图或者用文字描述得(4分)
2. 画出基于CMSIS标准的应用程序的基本结构,并简述其所包含的三个基本功能层。(10分)
基于CMSIS标准的应用程序的基本结构,能正确画出图或者用文字描述得(7分)
《嵌入式系统原理与应用 》课程试卷(A )参考答案及评分标准 第 1 页 共 12页
CMSIS标准的三个基本功能层:(3分)
1. 内核设备访问层:包含用于访问内核寄存器设备的名称定义、地址定义和助手函数。同时也为RTOS定义了独立于微控制器的接口,该接口包括调试通道定义。
2. 中间设备访问层:为软件提供了访问外设的通用方法。芯片供应商应当修改中间设备访问层,对于
中间设备访问层,芯片厂商需要根据自己的设备特性进行更新。 3. 微控制器外设访问层:提供了片上所有外设的定义。
3. 画出STM32内部的总线结构。并简要说明AHB总线与SRAM、DMA及APB总线之间的关系。(10分) 能正确画出图或者用文字描述得6分。
FLITF为Flash控制器。
AHB总线与SRAM、DMA及APB总线之间的关系(4分):
STM32的内部SRAM和DMA单元直接与AHB总线相连,外部设备则使用两条APB总线相连,每一条APB总线又都与AHB总线矩阵相连。
4. 在基于ARM-Cortex M3内核的芯片上编写程序实现如下功能。通过GPIO口引脚实现2个LED 灯交替实现闪烁,2个灯持续时间闪烁时间持续为1秒。(25分) 1) 画出所需要的电路图。(5分)
GPIOA.6GPIOA.7STM32 2) 画出程序的流程图。(5分)
开始RCC设置GPIO设置LED操作While(1);
《嵌入式系统原理与应用 》课程试卷(A )参考答案及评分标准 第 2 页 共 12页
3) 配置Systick定时器,并使用Systick定时器实现1秒钟的延时功能,写出相应的程序。(5分) 方法:1:
SysTick_Config(72000000/ 2000); void Delay(uint32_t nTime) {
TimingDelay = nTime;
while(TimingDelay != 0); }
void TimingDelay_Decrement(void) {
if (TimingDelay != 0x00) {
TimingDelay--; } } 方法2:
Systick_Configuration();
void Systick_Configuration(void) {
/* 失能Systick定时器 */
SysTick_CounterCmd(SysTick_Counter_Disable); /* 选择HCLK为Systick时钟源 */
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); /* 清除Systick计数器 */
SysTick_CounterCmd(SysTick_Counter_Clear);
/* 主频为72/8MHz,配置计数值为9000 * 1000可以得到1s定时间隔*/ SysTick_SetReload(9000 * 1000); }
void Delay_Second(void) {
/* 启动Systick计数 */
SysTick_CounterCmd(SysTick_Counter_Enable); /* 等待Systick计数至0 */
while(SysTick_GetFlagStatus(SysTick_FLAG_COUNT) == 0); /* 失能Systick定时器 */
SysTick_CounterCmd(SysTick_Counter_Disable); /* 清除Systick计数器 */
SysTick_CounterCmd(SysTick_Counter_Clear); }
4) 写出整个交替LED灯闪烁的程序。(10分)
#include \
《嵌入式系统原理与应用 》课程试卷(A )参考答案及评分标准 第 3 页 共 12页
void RCC_Configuration(void); void GPIO_Configuration(void); void Systick_Configuration(void); void Delay_Second(void); int main(void) {
RCC_Configuration(); GPIO_Configuration(); /* 设置SyTtick定时器 */ Systick_Configuration(); while(1) {
GPIO_WriteBit(GPIOA, GPIO_Pin_4,
(BitAction)(1 - GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_4)) );//翻转GPIOA.4电平 Delay_Second(); //见前面的systick延时 } }
void RCC_Configuration(void) {
/* 定义枚举类型变量 HSEStartUpStatus */ ErrorStatus HSEStartUpStatus;
/* 复位系统时钟设置*/ RCC_DeInit(); /* 开启HSE*/
RCC_HSEConfig(RCC_HSE_ON); /* 等待HSE起振并稳定*/
HSEStartUpStatus = RCC_WaitForHSEStartUp(); /* 判断HSE起是否振成功,是则进入if()内部 */ if(HSEStartUpStatus == SUCCESS) {
/* 选择HCLK(AHB)时钟源为SYSCLK 1分频 */ RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* 选择PCLK2时钟源为 HCLK(AHB) 1分频 */ RCC_PCLK2Config(RCC_HCLK_Div1);
/* 选择PCLK1时钟源为 HCLK(AHB) 2分频 */ RCC_PCLK1Config(RCC_HCLK_Div2); /* 设置FLASH延时周期数为2 */ FLASH_SetLatency(FLASH_Latency_2); /* 使能FLASH预取缓存 */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
《嵌入式系统原理与应用 》课程试卷(A )参考答案及评分标准 第 4 页 共 12页
/* 选择锁相环(PLL)时钟源为HSE 1分频,倍频数为9,则PLL输出频率为 8MHz * 9 = 72MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* 使能PLL */
RCC_PLLCmd(ENABLE); /* 等待PLL输出稳定 */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); /* 选择SYSCLK时钟源为PLL */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* 等待PLL成为SYSCLK时钟源 */ while(RCC_GetSYSCLKSource() != 0x08); }
/* 打开APB2总线上的GPIOA时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); }
void GPIO_Configuration(void) {
/* 定义GPIO初始化结构体 GPIO_InitStructure */ GPIO_InitTypeDef GPIO_InitStructure;
/* 设置 GPIOA.4 为推挽输出,最大翻转频率为50MHz*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); }
5.在基于ARM-Cortex M3内核的芯片上编写程序实现如下功能。使用按键与芯片管脚相连,配置两个外部中断,实现在中断0中,通过USART口,输出一个字符串。例如:interrupt 0;在中断1中,通过USART口,输出一个字符串。例如:interrupt 1;执行顺序是先是中断0,然后是中断1。 (1) 画出所需要的电路图。(5分)
(2) 画出程序的流程图。(5分)
《嵌入式系统原理与应用 》课程试卷(A )参考答案及评分标准 第 5 页 共 12页
(3) 配置串口USART1,实现通过串口向PC机的串口助手打印一个字符串。例如:interrupt 0。写出相应的
程序。(5分)
在KEIL C Target option -> target中选择 useMicroLIB void GPIO_Configuration(void) {
/* 定义 GPIO 初始化结构体 GPIO_InitStructure */ GPIO_InitTypeDef GPIO_InitStructure;
/* 设置USART1的Tx脚(PA.9)为第二功能推挽输出模式 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA , &GPIO_InitStructure);
/* 设置USART1的Rx脚(PA.10)为浮空输入脚 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA , &GPIO_InitStructure); }
void USART_Configuration(void) {
USART_InitTypeDef USART_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(USART1 , &USART_InitStructure); USART_Cmd(USART1 , ENABLE); }
int fputc(int ch,FILE *f)
《嵌入式系统原理与应用 》课程试卷(A )参考答案及评分标准 第 6 页 共 12页
{ }
printf(\
(4) 写出整个外部中断以及串口输出的程序。(与第3小题相重合的部分程序不需要再写出)(10分)
#include \#include \
#include \#include \#include \
/* Private function prototypes -----------------------------------------------*/ void RCC_Configuration(void); void Init_GPIOs (void); void Delay(uint32_t nTime); void USART_Configuration(void); void EXTI_Configuration(void); void NVIC_Configuration(void); int main(void) {
/* Configure Clocks for Application need */ RCC_Configuration();
NVIC_Configuration(); Init_GPIOs(); USART_Configuration(); { } }
void Init_GPIOs (void) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(LD_GPIO_PORT_CLK|USERBUTTON_GPIO_CLK, ENABLE);
/* Configure User Button pin as input */ EXTI_Configuration(); while(1)
USART_SendData(USART1,(unsigned char)ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); return ch;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;//USERBUTTON_GPIO_PIN 《嵌入式系统原理与应用 》课程试卷(A )参考答案及评分标准 第 7 页 共 12页
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz; GPIO_Init(USERBUTTON_GPIO_PORT, &GPIO_InitStructure); }
void EXTI_Configuration() {
EXTI_InitTypeDef EXTI_InitStructure;
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource1); EXTI_InitStructure.EXTI_Line = EXTI_Line0|EXTI_Line1 ;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); }
void NVIC_Configuration() {
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
/* Enable and set EXTI0 Interrupt to the lowest priority */
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn ;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn ;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }
void EXTI0_IRQHandler(void) { }
《嵌入式系统原理与应用 》课程试卷(A )参考答案及评分标准 第 8 页 共 12页
printf(\
EXTI_GenerateSWInterrupt(EXTI_Line1); EXTI_ClearFlag(EXTI_Line0);
void EXTI1_IRQHandler(void) { }
6.在基于ARM-Cortex M3内核的芯片上编写程序实现如下功能。定义一个32个整数的一维数组,配置DMA和CPU进行数据搬移,分别计算分别使用DMA和CPU来搬移这个数组所花的时间,并将这两个结果用串口传输到上位机显示。(20分) 1. 画出所需要的电路图。(5分)或者参见第五题去掉按键部分电路
printf(\EXTI_ClearFlag(EXTI_Line1);
2. 画出程序的流程图。(5分)
3. 写出DMA和CPU搬移数据的过程以及串口输出所花时间的程序。(10分) #include \#include \#include \
《嵌入式系统原理与应用 》课程试卷(A )参考答案及评分标准 第 9 页 共 12页
#define BufferSize 32 vu16 CurrDataCounter = 0; vu32 Tick = 0;
uc32 SRC_Const_Buffer[BufferSize ] = {
0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10, 0x11121314,0x15161718,0x191A1B1C,0x1D1E1F20, 0x21222324,0x25262728,0x292A2B2C,0x2D2E2F30, 0x31323334,0x35363738,0x393A3B3C,0x3D3E3F40, 0x41424344,0x45464748,0x494A4B4C,0x4D4E4F50, 0x51525354,0x55565758,0x595A5B5C,0x5D5E5F60, 0x61626364,0x65666768,0x696A6B6C,0x6D6E6F70, 0x71727374,0x75767778,0x797A7B7C,0x7D7E7F80 };
u32 DST_Buffer[BufferSize ]; void RCC_Configuration(void); void NVIC_Configuration(void); void GPIO_Configuration(void); void USART_Configuration(void); void DMA_Configuration(void); void SysTick_Configuration(void); int main(void) {
u8 i = 0;
u8 TickCntCPU = 0; u8 TickCntDMA = 0;
RCC_Configuration(); /* 设置 NVIC */ NVIC_Configuration(); /* 设置 GPIO 端口 */ GPIO_Configuration(); /* 设置 USART */ USART_Configuration(); /* DMA初始化 */ DMA_Configuration(); /* SysTick初始化 */ SysTick_Configuration(); Tick = 0;
for(i = 0; i < BufferSize; i++) {
/* 在 RAM 中开辟一片空间用做DMA目的空间 */
/* 定义 DMA 传输数目变量 */
/* 计时变量 */
《嵌入式系统原理与应用 》课程试卷(A )参考答案及评分标准 第 10 页 共 12页
DST_Buffer[i] = SRC_Const_Buffer[i]; }
/* 保存计时数据 */ TickCntCPU = Tick; for(i = 0; i < BufferSize; i++) {
DST_Buffer[i] = 0; } Tick = 0;
DMA_Cmd(DMA1_Channel6, ENABLE); /* 等待传输完成 */
while(CurrDataCounter != 0); TickCntDMA = Tick;
if(strncmp((const char*)SRC_Const_Buffer, (const char*)DST_Buffer, BufferSize) == 0) {
printf(\ } else {
printf(\ }
printf(\ printf(\ while(1); }
RCC_Configuration() /*在前面基础上增加 开启 DMA , USART1 和 GPIOA 时钟 */ {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); }
void NVIC_Configuration(void) {
/* 定义NVIC初始化结构体 NVIC_InitStructure */ NVIC_InitTypeDef NVIC_InitStructure;
/* #ifdef...#else...#endif结构的作用是根据预编译条件决定中断向量表起始地址*/ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
《嵌入式系统原理与应用 》课程试卷(A )参考答案及评分标准 第 11 页 共 12页
/* 开启DMA16通道中断控制,0级先占优先级,0级次占优先级*/ NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel6_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }
void DMA_Configuration(void) {
DMA_InitTypeDef DMA_InitStructure;
DMA_DeInit(DMA1_Channel6);
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)SRC_Const_Buffer; DMA_InitStructure.DMA_MemoryBaseAddr = (u32)DST_Buffer; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = BufferSize;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Enable; DMA_Init(DMA1_Channel6, &DMA_InitStructure); DMA_ITConfig(DMA1_Channel6, DMA_IT_TC, ENABLE); CurrDataCounter= DMA_GetCurrDataCounter(DMA1_Channel6); }
《嵌入式系统原理与应用 》课程试卷(A )参考答案及评分标准 第 12 页 共 12页
正在阅读:
个人思想总结报告10-23
大学校园心理剧剧本-学习上的挫折10-15
高层建筑施工组织设计06-01
物流项目招投标管理试卷B05-24
完善程序填空09-26
国外社区商业发展的理论与实践10-02
七年级语文竞赛试题附答案(裴吉安)05-19
2019北京中考满分作文范文03-17
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 嵌入式
- 计量
- 试卷
- 答案
- 图文
- 学院
- 系统
- 2014
- 2014年最新行政单位会计制度
- 高三化学第二轮专题复习《元素周期律与元素周期表》历年试题汇编
- 幼师高二期末语文试题及答题卡
- 英语科说课的基本程序和内容要点
- 基于ARM9 的CMOS图像采集系统的设计
- (建工装饰楼宇自控)BAS方案(Webs 600)模板2009-02 - 图文
- (文数)揭阳一中、金山中学2015届高三级第二学期联考
- 罗马尼亚的瓜子市场信息调查与行情分析 - 图文
- 外贸函电部分课文及翻译
- 蠡县医院安全生产应急预案消防演练记录 - 图文
- 外国新闻事业史
- 小学一年级美术第二册教案(人教版)
- 新课改背景下对学生评价形式的改变及其影响
- (样板)放射性同位素与射线装置使用安全和防护年度评估报告
- 倾情赠送:智能化弱电系统解决方案
- 买房宝典
- 苏科版八年级数学上册《第6章一次函数》测试题含答案
- 法律基础知识大综合(法硕入门必看)
- 雷锋杰定稿 - 图文
- 人美版四年级下册练习与指导书法教案