STM32期末考试答案详解.docx
- 文档编号:23328184
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:24
- 大小:22.55KB
STM32期末考试答案详解.docx
《STM32期末考试答案详解.docx》由会员分享,可在线阅读,更多相关《STM32期末考试答案详解.docx(24页珍藏版)》请在冰豆网上搜索。
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提供了一个高级控制定时器(TIM1)。
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次,中断结束。
#include"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_40MHz; GPIO_Init(USERBUTTON_GPIO_PORT,&GPIO_InitStructure); /*ConfiguretheGPIO_LEDpinsLD3&LD4*/ 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_PinSource10,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_40MHz; 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_InitStructure); 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_ClockIni); USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); USART_Cmd(USART1,ENABLE) } voidEXTI_Configuration() {EXTI_InitTypeDefEXTI_InitStructure; /定义PA0,PA1,PA2为外部中断输入通道/ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource1); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource2); /*ConfigureEXT1Line012ininterruptmodetriggedonFallingedge*/ EXTI_InitStructure.EXTI_Line=EXTI_Line0|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 //Èç¹ûC/C++Compiler\Preprocessor\DefinedsymbolsÖеĶ¨ÒåÁËVECT_TAB_RAM£¨¼û³ÌÐò¿â¸ü¸ÄÄÚÈݵıí¸ñ£© NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);//ÔòÔÚRAMµ÷ÊÔ #else//Èç¹ûûÓж¨ÒåVECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);//ÔòÔÚFlashÀïµ÷ÊÔ #endif//½áÊøÅжÏÓï¾ä 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_IRQn; 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){} } voidMemManage_Handler(void) {/*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){} voidEXTI0_IRQHandler(void) {inti; 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++){} EXTI_GenerateSWInterrupt(EXTI_Line1); EXTI_ClearFlag(EXTI_Line0); } voidEXTI1_IRQHandler(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); } voidEXTI2_IRQHandler(void) { inti; 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(i=0;i<500000;i++){} GPIO_TOGGLE(LD_GPIO_PORT,LD_GREEN_GPIO_PIN); for(i=0;i<500000;i++){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32 期末考试 答案 详解