版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、简述嵌套向量中断控制器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通道选
2、择、ADC的转换模式、中断、模拟看门狗、ADC的扫描模式、ADC的注入通道管理、连续模式、ADC的校准模式、ADC的数据对齐、可编程的通道采样时间、外部触发转换、DMA请求、双ADC模式和温度传感器。2简述STM32的双ADC工作模式。答:在有两个ADC的STM32器件中,可以使用双ADC模式。在双ADC模式里,根据ADC_CR1存放器中DUALMOD2:0位所选的模式,转换的启动可以是ADC1主和ADC2从的交替触发或同时触发。双ADC工作模式主要包括如下几种:同时注入模式、同时规那么模式、快速交替模式、慢速交替模式、交替触发模式和独立模式。1简述STM32的USART的功能特点。、答:ST
3、M32的USART为通用同步异步收发器,其可以及使用工业标准NRZ异步串行数据格式的外部设备之间进展全双工数据交换。USART还可以利用分数波特率发生器提供宽范围的波特率选择。STM32的USART支持同步单向通信和半双工单线通信。同时,其也支持LIN(局部互连网),智能卡协议和IrDA(红外数据)SIR ENDEC标准,以及调制解调器(CTS/RTS)操作。STM32还具备多处理器通信能力。另外,通过多缓冲器配置的DMA方式,还可以实现高速数据通信。1简述STM32的高级控制定时器TIM1的构造。答:STM32提供了一个高级控制定时器(TIM1)。TIM1由一个16位的自动装载计数器组成,它
4、由一个可编程预分频器驱动。TIM1适合多种用途,包含测量输入信号的脉冲宽度,或者产生输出波形。使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。高级控制定时器TIM1和通用控制定时器TIMx是完全独立的,它们不共享任何资源,因此可以同步操作。2简述STM32时钟的类型。答:STM32提供了三种不同的时钟源,其都可被用来驱动系统时钟SYSCLK,这三种时钟源分别为:q HSI振荡器时q HSE振荡器时钟q PLL时钟这三种时钟源还可以有以下2种二级时钟源:q 32kHz低速内部RC,可以用于驱动独立看门狗和RTC。其中,RTC用于从停机/待机模式下
5、自动唤醒系统。低速外部晶振也可用来驱动RTC(RTCCLK)。任一个时钟源都可被独立地启动或关闭,这样可以通过关闭不使用的时钟源来优化整个系统的功耗。1简述DMA控制器的根本功能。答:STM32的DMA 控制器有7个通道,每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个DMA 请求的优先权。DMA 控制器和Cortex-M3 核共享系统数据线执行直接存储器数据传输。因此,1 个DMA请求占用至少2 个周期的CPU 访问系统总线时间。为了保证Cortex-M3 核的代码执行的最小带宽,DMA 控制器总是在2 个连续的DMA 请求间释放系统时钟至少1 个周期。N
6、VIC和外部中断:配置中断0LED绿灯闪1次,中断1LED蓝灯闪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"/* Private fun
7、ction 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);static volatile uint32_t TimingDelay;int main(void) /* Configure Clocks for Application need */ RCC_Configurat
8、ion();SysTick_Config(16000000/ 2000);NVIC_Configuration(); /* Init I/O ports */ Init_GPIOs(); USART_Configuration();EXTI_Configuration();/printf("rnWelcome !rn"); while(1) /Delay(20); /printf("rnWelcome !rn");void RCC_Configuration(void) RCC_DeInit(); /* Enable HSI Clock */ RCC_H
9、SICmd(ENABLE); /*!< Wait till HSI is ready */ while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) = RESET)/*RCC_PLLCmd(DISABLE);RCC_PLLConfig(RCC_PLLSource_HSI,RCC_PLLMul_3,RCC_PLLDiv_2);RCC_PLLCmd(ENABLE); */ /*!< Wait till PLL is ready */ / while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET)/RCC_SYSCLK
10、Config(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); /* Enable comparator clock LCD and PWR mngt */ /RCC_APB1PeriphClockCmd(RCC_APB1Periph_LCD | RCC_APB1Peri
11、ph_PWR, ENABLE); /* Enable ADC clock & SYSCFG */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_SYSCFG | RCC_APB2Periph_USART1 , ENABLE);void Init_GPIOs (void) GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOs clock */ RCC_AHBPeriphClockCmd(LD_GPIO_PORT_CLK|USERBUTTON_GPIO_CLK, E
12、NABLE);/* Configure User Button pin as input */ 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_GPI
13、O_PORT, &GPIO_InitStructure); /* Configure the GPIO_LED pins LD3 & 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_Init
14、Structure.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);/*Configure the USART1_GPIO_PORT */ /* Connect PA9 to USART1_Tx */ GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
15、 /* Connect PA10 to USART1_Rx*/ GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1); /* Configure USART1_Tx and USART1_Rx as alternate function */IO_Pin = GPIO_Pin_9 | GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz; GPIO_InitStructure
16、.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_InitStructure);/* Enable all GPIOs clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOD | RCC_AHBPeriph_GPIOE | RCC_AHBPeriph_GPIOH, EN
17、ABLE);void USART_Configuration(void)USART_InitTypeDef USART_InitStructure;USART_ClockInitTypeDef USART_ClockIni;USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Pari
18、ty = 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_
19、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)void EXTI_Configuration()EXTI_InitTypeDef EXTI_InitStructure;/定义PA0,PA1,PA2为外部中断输入
20、通道/ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource1);SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource2);/* Configure EXT1 Line 0 1 2 in interrupt mode trigged on Falling edge */ EXTI_InitStructure.EXTI_Line = EXTI_Line0|
21、EXTI_Line1|EXTI_Line2 ; / PA0 for User button 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; #ifdef V
22、ECT_TAB_RAM /Èç¹ûC/C+ CompilerPreprocessorDefined symbolsÖе͍ÒåÁËVECT_TAB_RAM£¨¼û³ÌÐò¿â¸ü¸ÄÄÚÈݵıí¸ñ£&
23、#169; NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); /ÔòÔÚRAMµ÷ÊÔ #else /Èç¹ûûÓж¨ÒåVECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);/ÔòÔÚFlashÀïµ÷Ê
24、Ô #endif /½áÊøÅжÏÓï¾ä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
25、; 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
26、_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(&am
27、p;NVIC_InitStructure); void Delay(uint32_t nTime)TimingDelay = nTime; while(TimingDelay != 0);void TimingDelay_Decrement(void) if (TimingDelay != 0x00) TimingDelay-; int fputc(int ch,FILE *f)USART_SendData(USART1,(unsigned char)ch);while(USART_GetFlagStatus(USART1,USART_FLAG_TC)=RESET);return ch;#in
28、clude "stm32l1xx_it.h"#include "main.h"void NMI_Handler(void)void HardFault_Handler(void) /* Go to infinite loop when Hard Fault exception occurs */ while (1) void MemManage_Handler(void) /* Go to infinite loop when Memory Manage exception occurs */ while (1) void BusFault_Handle
29、r(void)/* Go to infinite loop when Bus Fault exception occurs */ while (1) void UsageFault_Handler(void) /* Go to infinite loop when Usage Fault exception occurs */ while (1) void SVC_Handler(void)void DebugMon_Handler(void)void PendSV_Handler(void)void SysTick_Handler(void) TimingDelay_Decrement();
30、void DMA1_Channel1_IRQHandler (void)void RTC_WKUP_IRQHandler(void)void EXTI0_IRQHandler(void)int 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+)EXTI_GenerateSWInterrupt(EXTI_Line1);EXTI_ClearFlag(EXTI_Line0)
31、;void EXTI1_IRQHandler(void)int 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+)GPIO_TOGGLE(LD_GPIO_PORT ,LD_BLUE_GPIO_PIN );for(i=0;i<5000
32、00;i+)EXTI_GenerateSWInterrupt(EXTI_Line2);EXTI_ClearFlag(EXTI_Line1);void EXTI2_IRQHandler(void)int 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<
33、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+)EXTI_ClearFlag(EXTI_Line2);/*void PPP_IRQHandler(void)配置的两个定时器通道的中断请求的时间间隔分别为1秒和2秒红
34、红每隔1秒闪烁1次,绿灯每隔2秒闪烁1次。#include "stm32l1xx.h"#include "stdio.h"/* 自定义同义关键字 -*/* 自定义参数宏 -*/* 自定义函数宏 -*/* 自定义变量 -*/uint16_t CCR1_Val =2500; /*初始化输出比拟通道1计数周期变量*/uint16_t CCR1_Val =5000;uint16_t CCR2_Val =1250; /*/uint16_t CCR2_Val =2500; /*/uint16_t CCR3_Val =10000; /*/uint16_t CCR4_V
35、al =5000; /*/* 自定义函数声明 -*/void RCC_Configuration(void);void GPIO_Configuration(void);void NVIC_Configuration(void);void TIM_Configuration(void);* 函数名: main* 函数描述: 主函数* 输入参数 : 无int main(void) /* 设置系统时钟 */RCC_Configuration();/* 设置NVIC */NVIC_Configuration();/* 设置GPIO端口 */GPIO_Configuration();/* 设置 TIM
36、 */ TIM_Configuration();while (1);* 函数名: RCC_Configuration* 函数描述 : 设置系统各局部时钟* 输入参数 : 无void RCC_Configuration(void)/* 定义枚举类型变量 HSEStartUpStatus */ErrorStatus HSEStartUpStatus;/* 复位系统时钟设置*/RCC_DeInit();/* 开启HSE*/RCC_HSEConfig(RCC_HSE_ON);/* 等待HSE起振并稳定*/HSEStartUpStatus = RCC_WaitForHSEStartUp();/* 判断H
37、SE起是否振成功,是那么进入if()内部 */if(HSEStartUpStatus = SUCCESS)/* 选择HCLKAHB时钟源为SYSCLK 1分频 */RCC_HCLKConfig(RCC_SYSCLK_Div1); /* 选择PCLK2时钟源为 HCLKAHB 1分频 */RCC_PCLK2Config(RCC_HCLK_Div1); /* 选择PCLK1时钟源为 HCLKAHB 2分频 */RCC_PCLK1Config(RCC_HCLK_Div2);/* 设置FLASH延时周期数为2 */FLASH_SetLatency(FLASH_Latency_1);/* 使能FLASH
38、预取缓存 */FLASH_PrefetchBufferCmd(ENABLE);/* 选择锁相环PLL时钟源为HSE 2分频,倍频数为8,那么PLL输出频率为 8MHz * 4 = 32MHz */RCC_PLLConfig(RCC_PLLSource_HSE, RCC_PLLMul_8,RCC_PLLDiv_2);/* 使能PLL */ RCC_PLLCmd(ENABLE);/* 等待PLL输出稳定 */while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET);/* 选择SYSCLK时钟源为PLL */RCC_SYSCLKConfig(RCC_SYSC
39、LKSource_PLLCLK);/* 等待PLL成为SYSCLK时钟源 */while(RCC_GetSYSCLKSource() != 0x08);/* 翻开APB2总线上的GPIOA时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB , ENABLE);* 函数名: GPIO_Configuration* 函数描述: 设置各GPIO端口功能void GPIO_Configuration(void)/* 定义GPIO初始化构造体 GPIO_Init
40、Structure */GPIO_InitTypeDef GPIO_InitStructure;/* 设置为浮空输入EXTI Line0*/GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_S
41、peed_40MHz;GPIO_Init(GPIOB , &GPIO_InitStructure);* 函数名: NVIC_Configuration* 函数描述: 设置NVIC参数void TIM_Configuration(void)/*定襎IM_TimeBase初始化构造体?/TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;/*定义TIM_OCInit初始化构造体*/TIM_OCInitTypeDef TIM_OCInitStructure;/*技术重载值为65535,预分频值为16000,时钟分割0,向上计数模式*/TIM_TimeB
42、aseStructure.TIM_Period=65535;TIM_TimeBaseStructure.TIM_Prescaler= 0;TIM_TimeBaseStructure.TIM_ClockDivision=0;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);/*设置预分频值,立即装入*/TIM_PrescalerConfig(TIM2,3199,TIM_PSCReloadMode_Immediate);/*设置OC1,
43、OC2通道,工作模式为计数器模式,使能比拟匹配输出极性,时钟分割0,向上计数模式*/TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Timing;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;TIM_OCInitStructure.TIM_Pulse=CCR1_Val;TIM_OC1Init(TIM2,&TIM_OCInitStructure);TIM_OCInitStr
44、ucture.TIM_Pulse=CCR2_Val;TIM_OC2Init(TIM2,&TIM_OCInitStructure);/*TIM_OCInitStructure.TIM_Pulse=CCR3_Val;TIM_OC3Init(TIM2,&TIM_OCInitStructure);TIM_OCInitStructure.TIM_Pulse=CCR4_Val;TIM_OC4Init(TIM2,&TIM_OCInitStructure);*/*制止预装载存放器*/TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Disable);TIM
45、_OC2PreloadConfig(TIM2,TIM_OCPreload_Disable);/TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Disable);/TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Disable);/*使能TIM中断*/TIM_ITConfig(TIM2,TIM_IT_CC1 | TIM_IT_CC2,ENABLE );/*启动TIM计数*/TIM_Cmd(TIM2,ENABLE);* 函数名: NVIC_Configuration* 函数描述: 设置NVIC参数void NVIC_Configura
46、tion(void)/* 定义NVIC初始化构造体 NVIC_InitStructure */NVIC_InitTypeDef NVIC_InitStructure;/* #ifdef.#else.#endif构造的作用是根据预编译条件决定中断向量表起始地址*/ #ifdef VECT_TAB_RAM /* 中断向量表起始地址从 0x20000000 开场 */ NVIC_SetVectorTable(NVIC_VectTab_RAM , 0x0); #else /* VECT_TAB_FLASH */* 中断向量表起始地址从 0x80000000 开场 */ NVIC_SetVectorTa
47、ble(NVIC_VectTab_FLASH , 0x0); #endif/* 选择NVIC优先级分组2 */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);/* 使能EXIT 0通道,2级先占优先级,0级次占优先级 */NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStr
48、ucture.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);#include "stm32l1xx_it.h"#include "stdio.h"extern uint16_t CCR1_Val; /*声明输出比拟通道1计数周期变量*/extern uint16_t CCR2_Val;extern uint16_t CCR3_Val;extern uint16_t CCR4_Val;void NMI_Handler(void)void HardFault_Handler(vo
49、id) /* Go to infinite loop when Hard Fault exception occurs */ while (1) void MemManage_Handler(void) /* Go to infinite loop when Memory Manage exception occurs */ while (1) void BusFault_Handler(void) /* Go to infinite loop when Bus Fault exception occurs */ while (1) void UsageFault_Handler(void)
50、/* Go to infinite loop when Usage Fault exception occurs */ while (1) void SVC_Handler(void)void DebugMon_Handler(void)void PendSV_Handler(void)void SysTick_Handler(void)/ TimingDelay_Decrement();void DMA1_Channel1_IRQHandler (void)void RTC_WKUP_IRQHandler(void)void TIM2_IRQHandler(void)uint16_t cap
51、ture=0;/*当前捕获计数值局部变量*/*TIM时钟=32M,分频数=1599+1,TIM2 counter clock=10khz CC1更新率=TIM2counter clock/CCRX_Val*/if(TIM_GetITStatus(TIM2,TIM_IT_CC1)!=RESET)GPIO_WriteBit(GPIOB,GPIO_Pin_6,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_6);/*读出当前计数值*/capture=TIM_GetCapture1(TIM2);/*根据当前计数值更新输出捕获存放器*/TIM_Se
52、tCompare1(TIM2,capture+CCR1_Val);TIM_ClearITPendingBit(TIM2,TIM_IT_CC1);else if(TIM_GetITStatus(TIM2,TIM_IT_CC2)!=RESET)GPIO_WriteBit(GPIOB,GPIO_Pin_7,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_7);capture=TIM_GetCapture2(TIM2);TIM_SetCompare2(TIM2,capture+CCR2_Val);TIM_ClearITPendingBit(TIM
53、2,TIM_IT_CC2);/else if(TIM_GetITStatus(TIM2,TIM_IT_CC3)!=RESET)/GPIO_WriteBit(GPIOA,GPIO_Pin_6,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_6);/capture=TIM_GetCapture3(TIM2);/TIM_SetCompare3(TIM2,capture+CCR3_Val);/TIM_ClearITPendingBit(TIM2,TIM_IT_CC3);/else if(TIM_GetITStatus(TIM2,TIM_IT_CC
54、4)!=RESET)/GPIO_WriteBit(GPIOA,GPIO_Pin_7,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_7);/capture=TIM_GetCapture4(TIM2);/TIM_SetCompare4(TIM2,capture+CCR4_Val);/TIM_ClearITPendingBit(TIM2,TIM_IT_CC4);按键按一下,LED3和LED4灯亮,松开按键,再次按下按键,LED3和LED4灯灭。* 使用GPIO和SysTick定时器实现按键扫描*/ #include "stm32l1
55、xx.h"#include "stdio.h"#include "discover_board.h"#include "stm32l_discovery_lcd.h"/* Private function prototypes */void RCC_Configuration(void);/*系统时钟设置*/void Init_GPIOs (void);/*GPIO端口设置*/void Delay(uint32_t nTime);static volatile uint32_t TimingDelay; /*定义静态变量*/
56、int main(void) /* Configure Clocks for Application need */ RCC_Configuration();SysTick_Config(16000000/ 2000);/*设置SysTick时钟*/ /* Init I/O ports */ Init_GPIOs(); while(1)/GPIO_TOGGLE(LD_GPIO_PORT ,LD_GREEN_GPIO_PIN );/Delay(1000);if(GPIO_ReadInputDataBit(USERBUTTON_GPIO_PORT, USERBUTTON_GPIO_PIN)=0x01)Delay(2000);/*延时1秒,即按1秒以上才翻转*/if(GPIO_ReadInputDataBit(USER
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国社会科学院文化发展促进中心年鉴与院史工作部非事业编制人员招聘备考题库及一套答案详解
- 2025年绵阳市公安局安州区分局公开招聘警务辅助人员的备考题库及完整答案详解一套
- 电商合同补充协议
- 签订独家协议合同
- 帐篷租赁协议合同
- 怎样取消协议合同
- 价值认定协议书
- 储罐转让协议书
- 绿网覆盖合同范本
- 合同共建协议书
- 科研诚信和伦理管理制度(3篇)
- 肝硬化的康复护理
- 2025年淮北市交通投资控股集团有限公司及下属子公司面向社会招聘工作人员4名笔试考试参考试题及答案解析
- 露营旅游营地运营与配套服务升级方案2026年
- 2025黑龙江大兴安岭地区韩家园林业局工勤岗位人员招聘40人参考笔试试题及答案解析
- 2025年妇产科考试试题(含答案)
- 整车感知质量PQ内外饰评价标准
- 四川省凉山彝族自治州2024-2025学年七年级上学期语文期末试卷(含答案)
- 基础染料知识培训课件
- 文物建筑勘查设计取费标准(2020年版)
- 《群落生态学》PPT课件(完整版)
评论
0/150
提交评论