1、STM32期末考试答案解析详解简述嵌套向量中断控制器(NVI C)的主要特性。答:STM32的嵌套向量中断控制器(NVIC)管理着包括Cortex-M3 核异常等中断,其和ARM处理器核的接口紧密 相连,可以实现低延迟的中断处理,并有效地处理晚到的中断。STM32嵌套向量中断控制器(NVIC)的主要特性如下: q具有43个可屏蔽中断通道(不包含 16个Cortex-M3 的中断线)。q具有16个可编程的优先等级。q可实现 低延迟的异常和中断处理。 q具有电源管理控制。q系统控制寄存器的实现。1.简述STM32的ADC系统的功能特性。答:STM32的ADC系统的主要功能特性包括如下几个方面: A
2、DC开关控制、ADC时钟、ADC通道选择、ADC的转换模式、中断、模拟看门狗、 ADC的扫描模式、ADC的注入通道管理、间断模式、 ADC的校准模式、ADC的数据对齐、可编程的通道采样时间、外部触发转换、 DMA请求、双ADC模式和温度传感器。2.简述STM32 的双ADC工作模式。答:在有两个 ADC的STM32器件中,可以使用双 ADC模式。在双 ADC模式里,根据 ADC_CR1寄存器中DUALMOD2:0 位所选的模式,转换的启动可以是 ADC1主和ADC2从的交替触发或同时触发。双ADC工作模式主要包括如下几种:同时注入模式、同时规则模式、快速交替模式、慢速交替模式、交替触发模式和独
3、立模式。1 .简述STM32 的USART的功能特点。、答:STM32的USART为通用同步异步收发器,其可以与使用工业标准 NRZ异步串行数据格式的外部设备之间进行全双工数据交换。 USART还可以利用分数波特率发生器提供宽范围的波特率选择。STM32的USART支持同步单向通信和半双工单线通信。 同时,其也支持LIN(局部互连网),智能卡协议和IrDA(红外数据)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。STM32还具备多处理器通信能力。另外,通过多缓冲器配置的 DMA方式,还可以实现高速数据通信。1 .简述STM32的高级控制定时器 TIM1的结构。答:STM32提供
4、了一个高级控制定时器 仃IM1)。TIM1由一个16位的自动装载计数器组成,它由一个可编程预分频器驱动。 TIM1适合多种用途,包含测量输入信号的脉冲宽度,或者产生输岀波形。使用定时器预分频器和 RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。高级控制定时器TIM1和通用控制定时器 TIMx是完全独立的,它们不共享任何资源,因此可以同步操作。2 .简述STM32时钟的类型。答: STM32提供了三种不同的时钟源, 其都可被用来驱动系统时钟 SYSCLK,这三种时钟源分别为:q HSI振荡器时q HSE振荡器时钟q PLL时钟 这三种时钟源还可以有以下 2种二级时钟
5、源:q 32kHz 低速内部RC,可以用于驱动独立看门狗和 RTC。其中,RTC用于从停机/待机模式下自动唤醒系统。q 32.768kHz 低速外部晶振也可用来驱动 RTC(RTCCLK)。任一个时钟源都可被独立地启动或关闭,这样可以通过关闭不使用的时钟源来优化整个系统的功耗。1 .简述DMA控制器的基本功能。答:STM32的DMA 控制器有7个通道,每个通道专门用来管理来自于一个或多个外设对存储器访问的 请求。还有一个仲裁器来协调各个 DMA请求的优先权。DMA控制器和Cortex-M3 核共享系统数据线执行直接存储器数据传输。因此, 1个DMA请求占用至少2个周期的CPU访问系统总线时间。
6、为了保证Cortex-M3 核的代码执行的最小带宽, DMA控制器总是在2个连续的DMA请求间释放系统 时钟至少1个周期。NVIC和外部中断:配置中断0 ( LED绿灯闪1次),中断1 ( LED蓝灯闪2次),中断2三个中断(LED 绿灯闪3次),执行顺序为0-1-2。(默认中断0闪烁的是绿灯)按下按键,绿灯闪 (一亮一灭)1次,蓝灯闪2次,然后绿灯闪3次,中断结束。#in elude stm32l1xx.h#i nclude stdio.h#i nclude discover_board.h#i nclude stm32l_discovery_lcd.h#i nclude stdarg.h/
7、* Private function prototypes */void RCC_Co nfigurati on (void);void In it_GPIOs (void);void Delay(uint32_t nTime);void USART_Co nfiguratio n( void);void EXTI_C on figuratio n( void);void NVIC_Co nfigurati on (void);static volatile uin t32_t Timin gDelay;int mai n(void) /* Con figure Clocks for Appl
8、icatio n n eed */RCC_Co nfiguratio n();SysTick_Co nfig(16000000/ 2000);NVIC_Co nfiguratio n();/* In it I/O ports */In it_GPIOs();USART_Co nfigurati on();EXTI_C on figurati on();/ prin tf(r nWelcome !rn);while(1) / Delay(20);/ prin tf(r nWelcome !rn);void RCC_Co nfigurati on (void) RCC_De In it();/*
9、En able HSI Clock */RCC_HSICmd(ENABLE);/*! Wait till HSI is ready */while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) = RESET)/* RCC_PLLCmd(DISABLE);RCC_PLLCo nfig(RCC_PLLSource_HSI,RCC_PLLMul_3,RCC_PLLDiv_2);RCC_PLLCmd(ENABLE); */*! Wait till PLL is ready */ while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESE
10、T)/ / RCC_SYSCLKCo nfig(RCC_SYSCLKSource_PLLCLK);RCC_SYSCLKCo nfig(RCC_SYSCLKSource_HSI);RCC_MSIRa ngeCo nfig(RCC_MSIRa nge_6);RCC_HSEC on fig(RCC_HSE_OFF);if(RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET ) while(1); /* En able comparator clock LCD and PWR mngt */RCC_APB1PeriphClockCmd(RCC_APB1Periph_
11、LCD | RCC_APB1Periph_PWR, ENABLE);/* En able ADC clock & SYSCFG */RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_SYSCFG |RCC_APB2Periph_USART1 , ENABLE);void In it_GPIOs (void) GPIO_I ni tTypeDef GPIO_I nitStructure;/* En able GPIOs clock */RCC_AHBPeriphClockCmd(LD_GPIO_PORT_CLK|USERBUT
12、TON_GPIO_CLK, ENABLE);/* Con figure User Butt on pin as in put */GPIO_I ni tStructure.GPIO_P in =GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;/USERBUTTON_GPIO_PINGPIO_I ni tStructure.GPIO_Mode = GPIO_Mode_IN;GPIO_I nitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_I nitStructure.GPIO_Speed = GPIO_Speed_4OMH z;GPIO
13、_ In it(USERBUTTON_GPIO_PORT, & GPIO_I nitStructure);LD3 & LD4*/* Con figure the GPIO_LED pinsGPIO_I nitStructure.GPIO_Pin = LD_GREEN_GPIO_PIN | LD_BLUE_GPIO_PIN;GPIO_I ni tStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_I nitStructure.GPIO_OType = GPIO_OType_PP;GPIO_I nitStructure.GPIO_PuPd = GPIO_PuPd_NO
14、PULL;GPIO_I nitStructure.GPIO_Speed = GPIO_Speed_2MH z;GPIO_I nit(LD_GPIO_PORT, & GPIO_I ni tStructure);GPIO_LOW(LD_GPIO_PORT, LD_GREEN_GPIO_PIN);GPIO_LOW(LD_GPIO_PORT, LD_BLUE_GPIO_PIN);/*Co nfigure the USART1_GPIO_PORT */* Conn ect PA9 to USART1_Tx */GPIO_Pi nAFCo nfig(GPIOA, GPIO_Pi nSource9, GPI
15、O_AF_USART1);/* Conn ect PA10 to USART1_Rx*/GPIO_Pi nAFCo nfig(GPIOA, GPIO_Pi nSourcelO, GPIO_AF_USART1);/* Con figure USART1_Tx and USART1_Rx as alternate fun ctio n */GPIO_I nitStructure.GPIO_P in = GPIO_Pin_9 | GPIO_Pin_10;GPIO_I ni tStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_I nitStructure.GPIO_Spe
16、ed = GPIO_Speed_4OMH z;GPIO_I nitStructure.GPIO_OType = GPIO_OType_PP;GPIO_I nitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_I nit(GPIOA, & GPIO_I nitStructure);/* En able all GPIOs clock */RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB |RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOD |RCC_AHB
17、Periph_GPIOE | RCC_AHBPeriph_GPIOH, ENABLE);void USART_Co nfiguratio n( void)USART_I ni tTypeDef USART_I nitStructure;USART_ClockI ni tTypeDef USART_ClockI ni;USART_I ni tStructure.USART_BaudRate = 9600;USART_I ni tStructure.USART_WordLe ngth = USART_WordLe ngth_8b;USART_I nitStructure.USART_StopBit
18、s = USART_StopBits_1;USART_I ni tStructure.USART_Parity = USART_Parity_No ;USART_I ni tStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_I ni tStructure.USART_HardwareFlowCo ntrolUSART_HardwareFlowCo ntrol_No ne;USART_I nit(USART1,&USARTnitStructure);USART_ClockI ni.USART_Clock = USART_Cloc
19、k_Disable;USART_ClockI ni.USART_CPOL = USART_CPOL_Low;USART_ClockI ni.USART_CPHA = USART_CPHA_2Edge;USART_ClockI ni.USART_LastBit = USART_LastBit_Disable;USART_ClockI nit(USART1,&USART_Clockl ni);USART_ITCo nfig(USART1, USART_IT_RXNE, ENABLE);USART_Cmd(USART1,ENABLE)void EXTI_C on figuratio n() EXTI
20、_I nitTypeDef EXTI_I nitStructure;/定义PA0,PA1,PA2为外部中断输入通道/SYSCFG_EXTILi neCo nfig(EXTI_PortSourceGPIOA,EXTI_Pi nSourceO);SYSCFG_EXTILi neCon fig(EXTI_PortSourceGPIOA,EXTI_Pi nSource1);SYSCFG_EXTILi neCon fig(EXTI_PortSourceGPIOA,EXTI_Pi nSource2);/* Con figure EXT1 Line 0 1 2 in in terrupt mode trig
21、ged on Falli ng edge */EXTI_I ni tStructure.EXTI_Li ne = EXTI_Li neO|EXTI_L in e1|EXTI_Li ne2 ; / PA0 for User buttonEXTI_I ni tStructure.EXTI_Mode = EXTI_Mode_I nterrupt;EXTI_I nitStructure.EXTI_Trigger = EXTI_Trigger_Falli ng;EXTI_I nitStructure.EXTI_Li neCmd = ENABLE;EXTI_I nit(&EXTI_I nitStructu
22、re);void NVIC_Co nfigurati on() NVIC_I ni tTypeDef NVIC_I nitStructure;#ifdef VECT_TAB_RAM/ e ?C/C+ CompilerPreprocessorDefinedsymbols ?D ? ? a?ECT_TAB_RAM ?3Do ?a? ue 丫卩??NVIC_SetVectorT able(NVIC_VectTab_RAM, 0x0); / ? o?uRAM#else / e ? D? - 3VECT_TAB_RAMNVIC_SetVectorT able(NVIC_VectTab_FLASH, 0x
23、0);/ ? b?uFlash -e?#en dif / ? de ?翊?NVIC_PriorityGroupCo nfig(NVIC_PriorityGroup_2);/* En able and set EXTI0 In terrupt to the lowest priority */NVIC_I ni tStructure.NVIC_IRQCha nnel = EXTI0_IRQ n ;NVIC_I ni tStructure.NVIC_IRQCha nn elPreemptio nPriority = 2;NVIC_I ni tStructure.NVIC_IRQCha nn elS
24、ubPriority = 0;NVIC_I ni tStructure.NVIC_IRQCha nn elCmd = ENABLE;NVIC_I nit(&N VIC_I nitStructure);NVIC_I ni tStructure.NVIC_IRQCha nnel = EXTI1_IRQ n ;NVIC_I ni tStructure.NVIC_IRQCha nn elPreemptio nPriority = 1;NVIC_I ni tStructure.NVIC_IRQCha nn elSubPriority = 0;NVIC_I ni tStructure.NVIC_IRQCh
25、a nn elCmd = ENABLE;NVIC_I nit(&N VIC_I nitStructure);NVIC_I nitStructure.NVIC_IRQCha nnel = EXTI2RQn ;NVIC_I ni tStructure.NVIC_IRQCha nn elPreemptio nPriority = 0;NVIC_I ni tStructure.NVIC_IRQCha nn elSubPriority = 0;NVIC_I ni tStructure.NVIC_IRQCha nn elCmd = ENABLE;NVIC_I nit(&N VIC_I nitStructu
26、re);void Delay(uint32_t nTime)Timi ngDelay = n Time;while(Timi ngDelay != 0);void Timi ngDelay_Decreme nt(void)if (Timi ngDelay != 0x00) Timi ngDelay-; int fputc(i nt ch,FILE *f) USART_Se ndData(USART1,(u nsig ned char)ch);while(USART_GetFlagStatus(USART1,USART_FLAG_TC)=RESET); return ch;#include st
27、m32l1xx_it.h#include main.hvoid NMI_Ha ndler(void)void HardFault_Ha ndler(void) /* Go to infinite loop when Hard Fault exception occurs */while (1) /* Go to infin ite loop whe n Memory Man age excepti on occurs */while (1) void BusFault_Ha ndler(void)/* Go to infin ite loop whe n Bus Fault excepti o
28、n occurs */while (1) void UsageFault_Ha ndler(void) /* Go to infinite loop when Usage Fault exception occurs */while (1) void SVC_Ha ndler(void)void DebugMon_Ha ndler(void)void Pen dSV_Ha ndler(void)void SysTick_Ha ndler(void)Timi ngDelay_Decreme nt();void DMA1_Cha nn el1_IRQHa ndler (void)void RTC_
29、WKUP_IRQHa ndler(void)int i;GPIO_TOGGLE(LD_GPIO_PORT 丄 D_GREEN_GPIO_PIN );for(i=0;i500000;i+)GPIO_TOGGLE(LD_GPIO_PORT ,L D_GREEN_GPIO_PIN );for(i=0;i500000;i+)EXTI_Ge nerateSWI nterrupt(EXTI_Li ne1);EXTI_ClearFlag(EXTI_Li neO);void EXTI1RQHa ndler(void) int i;GPIO_TOGGLE(LD_GPIO_PORT ,L D_BLUE_GPIO_
30、PIN );for(i=0;i500000;i+)GPIO_TOGGLE(LD_GPIO_PORT ,L D_BLUE_GPIO_PIN );for(i=0;i500000;i+)GPIO_TOGGLE(LD_GPIO_PORT ,L D_BLUE_GPIO_PIN ); for(i=0;i500000;i+)GPIO_TOGGLE(LD_GPIO_PORT ,L D_BLUE_GPIO_PIN ); for(i=0;i500000;i+)EXTI_Ge nerateSWI nterrupt(EXTI_Li ne2);EXTI_ClearFlag(EXTI_Li ne1);int i;GPIO
31、_TOGGLE(LD_GPIO_PORT 丄 D_GREEN_GPIO_PIN ); for(i=0;i500000;i+)GPIO_TOGGLE(LD_GPIO_PORT ,L D_GREEN_GPIO_PIN );for(i=0;i500000;i+)GPIO_TOGGLE(LD_GPIO_PORT ,L D_GREEN_GPIO_PIN );for(i=0;i500000;i+)GPIO_TOGGLE(LD_GPIO_PORT ,L D_GREEN_GPIO_PIN ); for(i=0;i500000;i+)GPIO_TOGGLE(LD_GPIO_PORT ,L D_GREEN_GPIO_PIN ); for
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1