STM32期末考试答案解析详解.docx

上传人:b****3 文档编号:3651080 上传时间:2022-11-24 格式:DOCX 页数:20 大小:23.62KB
下载 相关 举报
STM32期末考试答案解析详解.docx_第1页
第1页 / 共20页
STM32期末考试答案解析详解.docx_第2页
第2页 / 共20页
STM32期末考试答案解析详解.docx_第3页
第3页 / 共20页
STM32期末考试答案解析详解.docx_第4页
第4页 / 共20页
STM32期末考试答案解析详解.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

STM32期末考试答案解析详解.docx

《STM32期末考试答案解析详解.docx》由会员分享,可在线阅读,更多相关《STM32期末考试答案解析详解.docx(20页珍藏版)》请在冰豆网上搜索。

STM32期末考试答案解析详解.docx

STM32期末考试答案解析详解

简述嵌套向量中断控制器(NVIC)的主要特性。

答:

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

STM32嵌套向量中断控制器(NVIC)的主要特性如下:

q具有43个可屏蔽中断通道(不包含16个Cortex-M3的中断线)。

q具有16个可编程的优先等级。

q可实现低延迟的异常和中断处理。

q具有电源管理控制。

q系统控制寄存器的实现。

1.简述STM32的ADC系统的功能特性。

答:

STM32的ADC系统的主要功能特性包括如下几个方面:

ADC开关控制、ADC时钟、ADC通道选

择、ADC的转换模式、中断、模拟看门狗、ADC的扫描模式、ADC的注入通道管理、间断模式、ADC

的校准模式、ADC的数据对齐、可编程的通道采样时间、外部触发转换、DMA请求、双ADC模式和温

度传感器。

2.简述STM32的双ADC工作模式。

答:

在有两个ADC的STM32器件中,可以使用双ADC模式。

在双ADC模式里,根据ADC_CR1寄存

器中DUALMOD[2:

0]位所选的模式,转换的启动可以是ADC1主和ADC2从的交替触发或同时触发。

双ADC工作模式主要包括如下几种:

同时注入模式、同时规则模式、快速交替模式、慢速交替模式、交

替触发模式和独立模式。

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

答:

STM32的USART为通用同步异步收发器,其可以与使用工业标准NRZ异步串行数据格式的外部

设备之间进行全双工数据交换。

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

STM32的USART支持同步单向通信和半双工单线通信。

同时,其也支持LIN(局部互连网),智能卡协议

和IrDA(红外数据)SIRENDEC规范,以及调制解调器(CTS/RTS)操作。

STM32还具备多处理器通信能力。

另外,通过多缓冲器配置的DMA方式,还可以实现高速数据通信。

1.简述STM32的高级控制定时器TIM1的结构。

答:

STM32提供了一个高级控制定时器仃IM1)。

TIM1由一个16位的自动装载计数器组成,它由一个

可编程预分频器驱动。

TIM1适合多种用途,包含测量输入信号的脉冲宽度,或者产生输岀波形。

使用定

时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。

高级控制定时器TIM1和通用控制定时器TIMx是完全独立的,它们不共享任何资源,因此可以同步操作。

2.简述STM32时钟的类型。

答:

STM32提供了三种不同的时钟源,其都可被用来驱动系统时钟SYSCLK,这三种时钟源分别为:

qHSI

振荡器时qHSE振荡器时钟qPLL时钟这三种时钟源还可以有以下2种二级时钟源:

q32kHz低速内部RC,可以用于驱动独立看门狗和RTC。

其中,RTC用于从停机/待机模式下自动唤醒

系统。

q32.768kHz低速外部晶振也可用来驱动RTC(RTCCLK)。

任一个时钟源都可被独立地启动或关闭,这样可以通过关闭不使用的时钟源来优化整个系统的功耗。

1.简述DMA控制器的基本功能。

答:

STM32的DMA控制器有7个通道,每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。

还有一个仲裁器来协调各个DMA请求的优先权。

DMA控制器和Cortex-M3核共享系统数据

线执行直接存储器数据传输。

因此,1个DMA请求占用至少2个周期的CPU访问系统总线时间。

了保证Cortex-M3核的代码执行的最小带宽,DMA控制器总是在2个连续的DMA请求间释放系统时钟至少1个周期。

NVIC和外部中断:

配置中断0(LED绿灯闪1次),中断1(LED蓝灯闪2次),中断2三个中断(LED绿灯闪3次),执行顺序为0-->1-->2

(默认中断0闪烁的是绿灯)按下按键,绿灯闪(一亮一灭)1次,蓝灯闪2次,然后绿灯闪3次,

中断结束。

#inelude"stm32l1xx.h"

#include"stdio.h"

#include"discover_board.h"

#include"stm32l_discovery_lcd.h"

#include"stdarg.h"

/*Privatefunctionprototypes*/

voidRCC_Configuration(void);

voidInit_GPIOs(void);

voidDelay(uint32_tnTime);

voidUSART_Configuration(void);

voidEXTI_Configuration(void);

voidNVIC_Configuration(void);

staticvolatileuint32_tTimingDelay;

intmain(void)

{/*ConfigureClocksforApplicationneed*/

RCC_Configuration();

SysTick_Config(16000000/2000);

NVIC_Configuration();

/*InitI/Oports*/

Init_GPIOs();

USART_Configuration();

EXTI_Configuration();

//printf("\r\nWelcome!

!

!

\r\n");

while

(1)

{//Delay(20);

//printf("\r\nWelcome!

!

!

\r\n");

}

}

voidRCC_Configuration(void)

{RCC_DeInit();

/*EnableHSIClock*/

RCC_HSICmd(ENABLE);

/*!

while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)==RESET)

{}

/*RCC_PLLCmd(DISABLE);

RCC_PLLConfig(RCC_PLLSource_HSI,RCC_PLLMul_3,RCC_PLLDiv_2);

RCC_PLLCmd(ENABLE);*/

/*!

//while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)

//{}

//RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);

RCC_MSIRangeConfig(RCC_MSIRange_6);

RCC_HSEConfig(RCC_HSE_OFF);

if(RCC_GetFlagStatus(RCC_FLAG_HSERDY)!

=RESET)

{while

(1);}

/*EnablecomparatorclockLCDandPWRmngt*/

〃RCC_APB1PeriphClockCmd(RCC_APB1Periph_LCD|RCC_APB1Periph_PWR,ENABLE);

/*EnableADCclock&SYSCFG*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_SYSCFG|

RCC_APB2Periph_USART1,ENABLE);

}

voidInit_GPIOs(void)

{GPIO_InitTypeDefGPIO_InitStructure;

/*EnableGPIOsclock*/

RCC_AHBPeriphClockCmd(LD_GPIO_PORT_CLK|USERBUTTON_GPIO_CLK,ENABLE);

/*ConfigureUserButtonpinasinput*/

GPIO_InitStructure.GPIO_Pin=

GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;//USERBUTTON_GPIO_PIN

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;

GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_4OMHz;

GPIO_Init(USERBUTTON_GPIO_PORT,&GPIO_InitStructure);

LD3&LD4*/

/*ConfiguretheGPIO_LEDpins

GPIO_InitStructure.GPIO_Pin=LD_GREEN_GPIO_PIN|LD_BLUE_GPIO_PIN;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;

GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;

GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;

GPIO_Init(LD_GPIO_PORT,&GPIO_InitStructure);

〃GPIO_LOW(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);

〃GPIO_LOW(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);

/*ConfiguretheUSART1_GPIO_PORT*/

/*ConnectPA9toUSART1_Tx*/

GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);

/*ConnectPA10toUSART1_Rx*/

GPIO_PinAFConfig(GPIOA,GPIO_PinSourcelO,GPIO_AF_USART1);

/*ConfigureUSART1_TxandUSART1_Rxasalternatefunction*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_4OMHz;

GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;

GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;

GPIO_Init(GPIOA,&GPIO_InitStructure);

/*EnableallGPIOsclock*/

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB|

RCC_AHBPeriph_GPIOC|RCC_AHBPeriph_GPIOD|

RCC_AHBPeriph_GPIOE|RCC_AHBPeriph_GPIOH,ENABLE);

}

voidUSART_Configuration(void)

{

USART_InitTypeDefUSART_InitStructure;

USART_ClockInitTypeDefUSART_ClockIni;

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_Mode=USART_Mode_Rx|USART_Mode_Tx;

USART_InitStructure.USART_HardwareFlowControl

USART_HardwareFlowControl_None;

USART_Init(USART1,&USART」nitStructure);

USART_ClockIni.USART_Clock=USART_Clock_Disable;

USART_ClockIni.USART_CPOL=USART_CPOL_Low;

USART_ClockIni.USART_CPHA=USART_CPHA_2Edge;

USART_ClockIni.USART_LastBit=USART_LastBit_Disable;

USART_ClockInit(USART1,&USART_Clocklni);

USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);

USART_Cmd(USART1,ENABLE)

}

voidEXTI_Configuration()

{EXTI_InitTypeDefEXTI_InitStructure;

/定义PA0,PA1,PA2为外部中断输入通道/

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSourceO);

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource1);

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource2);

/*ConfigureEXT1Line012ininterruptmodetriggedonFallingedge*/

EXTI_InitStructure.EXTI_Line=EXTI_LineO|EXTI_Line1|EXTI_Line2;//PA0forUserbutton

EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;

EXTI_InitStructure.EXTI_LineCmd=ENABLE;

EXTI_Init(&EXTI_InitStructure);

}

voidNVIC_Configuration()

{NVIC_InitTypeDefNVIC_InitStructure;

#ifdefVECT_TAB_RAM

//e?

C/C++Compiler\Preprocessor\Defined

symbols?

D^?

?

'?

a?

ECT_TAB_RAM£"?

3Do?

a?

?

?

ue丫卩?

±?

[

NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);//?

o?

uRAM

#else//e?

?

?

D?

•-3VECT_TAB_RAM

NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);//?

b?

uFlash-e?

#endif//?

de?

?

翊?

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

/*EnableandsetEXTI0Interrupttothelowestpriority*/

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);

NVIC_InitStructure.NVIC_IRQChannel=EXTI2」RQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);

voidDelay(uint32_tnTime)

{TimingDelay=nTime;

while(TimingDelay!

=0);

}

voidTimingDelay_Decrement(void)

{

if(TimingDelay!

=0x00)

{TimingDelay--;}

}

intfputc(intch,FILE*f)

{USART_SendData(USART1,(unsignedchar)ch);

while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);returnch;

}

#include"stm32l1xx_it.h"

#include"main.h"

voidNMI_Handler(void){}

voidHardFault_Handler(void)

{/*GotoinfiniteloopwhenHardFaultexceptionoccurs*/

while

(1){}

{/*GotoinfiniteloopwhenMemoryManageexceptionoccurs*/

while

(1){}

}

voidBusFault_Handler(void)

{/*GotoinfiniteloopwhenBusFaultexceptionoccurs*/

while

(1){}

}

voidUsageFault_Handler(void)

{/*GotoinfiniteloopwhenUsageFaultexceptionoccurs*/

while

(1){}

}

voidSVC_Handler(void){}

voidDebugMon_Handler(void){}

voidPendSV_Handler(void){}

voidSysTick_Handler(void)

{

TimingDelay_Decrement();

}

voidDMA1_Channel1_IRQHandler(void){}

voidRTC_WKUP_IRQHandler(void){}

inti;

GPIO_TOGGLE(LD_GPIO_PORT丄D_GREEN_GPIO_PIN);

for(i=0;i<500000;i++){}

GPIO_TOGGLE(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);

for(i=0;i<500000;i++){}

EXTI_GenerateSWInterrupt(EXTI_Line1);

EXTI_ClearFlag(EXTI_LineO);

}

voidEXTI1」RQHandler(void){

inti;

GPIO_TOGGLE(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);

for(i=0;i<500000;i++){}

GPIO_TOGGLE(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);

for(i=0;i<500000;i++){}

GPIO_TOGGLE(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);for(i=0;i<500000;i++){}

GPIO_TOGGLE(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);for(i=0;i<500000;i++){}

EXTI_GenerateSWInterrupt(EXTI_Line2);

EXTI_ClearFlag(EXTI_Line1);

inti;

GPIO_TOGGLE(LD_GPIO_PORT丄D_GREEN_GPIO_PIN);for(i=0;i<500000;i++){}

GPIO_TOGGLE(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);

for(i=0;i<500000;i++){}

GPIO_TOGGLE(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);

for(i=0;i<500000;i++){}

GPIO_TOGGLE(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);for(i=0;i<500000;i++){}

GPIO_TOGGLE(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);for

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1