




已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
簡述嵌套向量中斷控制器(NVIC)的主要特性。答:STM32的嵌套向量中斷控制器(NVIC) 管理著包括Cortex-M3核異常等中斷,其和ARM處理器核的接口緊密相連,可以實現(xiàn)低延遲的中斷處理,并有效地處理晚到的中斷。STM32嵌套向量中斷控制器(NVIC)的主要特性如下:q 具有43 個可屏蔽中斷通道(不包含16 個Cortex-M3 的中斷線)。 q 具有16 個可編程的優(yōu)先等級。 q 可實現(xiàn)低延遲的異常和中斷處理。 q 具有電源管理控制。 q 系統(tǒng)控制寄存器的實現(xiàn)。1簡述STM32的ADC系統(tǒng)的功能特性。答:STM32的ADC系統(tǒng)的主要功能特性包括如下幾個方面:ADC開關控制、ADC時鐘、ADC通道選擇、ADC的轉換模式、中斷、模擬看門狗、ADC的掃描模式、ADC的注入通道管理、間斷模式、ADC的校準模式、ADC的數(shù)據對齊、可編程的通道采樣時間、外部觸發(fā)轉換、DMA請求、雙ADC模式和溫度傳感器。2簡述STM32的雙ADC工作模式。答:在有兩個ADC的STM32器件中,可以使用雙ADC模式。在雙ADC模式里,根據ADC_CR1寄存器中DUALMOD2:0位所選的模式,轉換的啟動可以是ADC1主和ADC2從的交替觸發(fā)或同時觸發(fā)。雙ADC工作模式主要包括如下幾種:同時注入模式、同時規(guī)則模式、快速交替模式、慢速交替模式、交替觸發(fā)模式和獨立模式。1簡述STM32的USART的功能特點。、答:STM32的USART為通用同步異步收發(fā)器,其可以與使用工業(yè)標準NRZ異步串行數(shù)據格式的外部設備之間進行全雙工數(shù)據交換。USART還可以利用分數(shù)波特率發(fā)生器提供寬范圍的波特率選擇。STM32的USART支持同步單向通信和半雙工單線通信。同時,其也支持LIN(局部互連網),智能卡協(xié)議和IrDA(紅外數(shù)據)SIR ENDEC規(guī)范,以及調制解調器(CTS/RTS)操作。STM32還具備多處理器通信能力。另外,通過多緩沖器配置的DMA方式,還可以實現(xiàn)高速數(shù)據通信。1簡述STM32的高級控制定時器TIM1的結構。答:STM32提供了一個高級控制定時器(TIM1)。TIM1由一個16位的自動裝載計數(shù)器組成,它由一個可編程預分頻器驅動。TIM1適合多種用途,包含測量輸入信號的脈沖寬度,或者產生輸出波形。使用定時器預分頻器和RCC時鐘控制預分頻器,可以實現(xiàn)脈沖寬度和波形周期從幾個微秒到幾個毫秒的調節(jié)。高級控制定時器TIM1和通用控制定時器TIMx是完全獨立的,它們不共享任何資源,因此可以同步操作。2簡述STM32時鐘的類型。答:STM32提供了三種不同的時鐘源,其都可被用來驅動系統(tǒng)時鐘SYSCLK,這三種時鐘源分別為:q HSI振蕩器時 q HSE振蕩器時鐘 q PLL時鐘這三種時鐘源還可以有以下2種二級時鐘源:q 32kHz低速內部RC,可以用于驅動獨立看門狗和RTC。其中,RTC用于從停機/待機模式下自動喚醒系統(tǒng)。q 32.768kHz低速外部晶振也可用來驅動RTC(RTCCLK)。任一個時鐘源都可被獨立地啟動或關閉,這樣可以通過關閉不使用的時鐘源來優(yōu)化整個系統(tǒng)的功耗。1簡述DMA控制器的基本功能。答:STM32的DMA 控制器有7個通道,每個通道專門用來管理來自于一個或多個外設對存儲器訪問的請求。還有一個仲裁器來協(xié)調各個DMA 請求的優(yōu)先權。DMA 控制器和Cortex-M3 核共享系統(tǒng)數(shù)據線執(zhí)行直接存儲器數(shù)據傳輸。因此,1 個DMA請求占用至少2 個周期的CPU 訪問系統(tǒng)總線時間。為了保證Cortex-M3 核的代碼執(zhí)行的最小帶寬,DMA 控制器總是在2 個連續(xù)的DMA 請求間釋放系統(tǒng)時鐘至少1 個周期。NVIC和外部中斷:配置中斷0(LED綠燈閃1次),中斷1(LED藍燈閃2次),中斷2三個中斷(LED綠燈閃3次),執(zhí)行順序為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 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);static volatile uint32_t TimingDelay;int main(void) /* Configure Clocks for Application need */ RCC_Configuration();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_HSICmd(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_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); /* Enable comparator clock LCD and PWR mngt */ /RCC_APB1PeriphClockCmd(RCC_APB1Periph_LCD | RCC_APB1Periph_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, ENABLE);/* 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_GPIO_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_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);/*Configure the USART1_GPIO_PORT */ /* Connect PA9 to USART1_Tx */ GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1); /* Connect PA10 to USART1_Rx*/ GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1); /* Configure USART1_Tx and USART1_Rx as alternate function */ 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);/* Enable all GPIOs clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOD | RCC_AHBPeriph_GPIOE | RCC_AHBPeriph_GPIOH, ENABLE); 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_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)void EXTI_Configuration()EXTI_InitTypeDef EXTI_InitStructure;/定義PA0,PA1,PA2為外部中斷輸入通道/ 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|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 VECT_TAB_RAM /C/C+ CompilerPreprocessorDefined symbolsVECT_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);/* 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); 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); 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;#include stm32l1xx_it.h#include main.hvoid 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_Handler(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();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;i500000;i+)GPIO_TOGGLE(LD_GPIO_PORT ,LD_GREEN_GPIO_PIN );for(i=0;i500000;i+)EXTI_GenerateSWInterrupt(EXTI_Line1);EXTI_ClearFlag(EXTI_Line0);void EXTI1_IRQHandler(void)int i;GPIO_TOGGLE(LD_GPIO_PORT ,LD_BLUE_GPIO_PIN );for(i=0;i500000;i+)GPIO_TOGGLE(LD_GPIO_PORT ,LD_BLUE_GPIO_PIN );for(i=0;i500000;i+)GPIO_TOGGLE(LD_GPIO_PORT ,LD_BLUE_GPIO_PIN );for(i=0;i500000;i+)GPIO_TOGGLE(LD_GPIO_PORT ,LD_BLUE_GPIO_PIN );for(i=0;i500000;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;i500000;i+)GPIO_TOGGLE(LD_GPIO_PORT ,LD_GREEN_GPIO_PIN );for(i=0;i500000;i+)GPIO_TOGGLE(LD_GPIO_PORT ,LD_GREEN_GPIO_PIN );for(i=0;i500000;i+)GPIO_TOGGLE(LD_GPIO_PORT ,LD_GREEN_GPIO_PIN );for(i=0;i500000;i+)GPIO_TOGGLE(LD_GPIO_PORT ,LD_GREEN_GPIO_PIN );for(i=0;i500000;i+)GPIO_TOGGLE(LD_GPIO_PORT ,LD_GREEN_GPIO_PIN );for(i=0;i500000;i+)EXTI_ClearFlag(EXTI_Line2);/*void PPP_IRQHandler(void) */ * (配置的兩個定時器通道的中斷請求的時間間隔分別為1秒和2秒)紅紅每隔1秒閃爍1次,綠燈每隔2秒閃爍1次。#include stm32l1xx.h#include stdio.h/* 自定義同義關鍵字 -*/* 自定義參數(shù)宏 -*/* 自定義函數(shù)宏 -*/* 自定義變量 -*/uint16_t CCR1_Val =2500; /*初始化輸出比較通道1計數(shù)周期變量*/uint16_t CCR1_Val =5000;uint16_t CCR2_Val =1250; /*/uint16_t CCR2_Val =2500; /*/uint16_t CCR3_Val =10000; /*/uint16_t CCR4_Val =5000; /*/* 自定義函數(shù)聲明 -*/void RCC_Configuration(void);void GPIO_Configuration(void);void NVIC_Configuration(void);void TIM_Configuration(void);* 函數(shù)名 : main* 函數(shù)描述 : 主函數(shù)* 輸入參數(shù) : 無int main(void) /* 設置系統(tǒng)時鐘 */ RCC_Configuration();/* 設置NVIC */ NVIC_Configuration();/* 設置GPIO端口 */ GPIO_Configuration();/* 設置 TIM */ TIM_Configuration(); while (1);* 函數(shù)名: RCC_Configuration* 函數(shù)描述 : 設置系統(tǒng)各部分時鐘* 輸入參數(shù) : 無void RCC_Configuration(void)/* 定義枚舉類型變量 HSEStartUpStatus */ErrorStatus HSEStartUpStatus; /* 復位系統(tǒng)時鐘設置*/ RCC_DeInit(); /* 開啟HSE*/ RCC_HSEConfig(RCC_HSE_ON); /* 等待HSE起振并穩(wěn)定*/ 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延時周期數(shù)為2 */ FLASH_SetLatency(FLASH_Latency_1); /* 使能FLASH預取緩存 */ FLASH_PrefetchBufferCmd(ENABLE); /* 選擇鎖相環(huán)(PLL)時鐘源為HSE 2分頻,倍頻數(shù)為8,則PLL輸出頻率為 8MHz * 4 = 32MHz */ RCC_PLLConfig(RCC_PLLSource_HSE, RCC_PLLMul_8,RCC_PLLDiv_2); /* 使能PLL */ RCC_PLLCmd(ENABLE); /* 等待PLL輸出穩(wěn)定 */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET); /* 選擇SYSCLK時鐘源為PLL */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* 等待PLL成為SYSCLK時鐘源 */ while(RCC_GetSYSCLKSource() != 0x08); /* 打開APB2總線上的GPIOA時鐘*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB , ENABLE); * 函數(shù)名 : GPIO_Configuration* 函數(shù)描述 : 設置各GPIO端口功能void GPIO_Configuration(void)/* 定義GPIO初始化結構體 GPIO_InitStructure */ GPIO_InitTypeDef GPIO_InitStructure; /* 設置PA.0,PA.1,PA.2為浮空輸入(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_Speed_40MHz; GPIO_Init(GPIOB , &GPIO_InitStructure);* 函數(shù)名 : NVIC_Configuration* 函數(shù)描述 : 設置NVIC參數(shù)void TIM_Configuration(void)/*定襎IM_TimeBase初始化結構體?/TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;/*定義TIM_OCInit初始化結構體*/TIM_OCInitTypeDef TIM_OCInitStructure;/*技術重載值為65535,預分頻值為16000,時鐘分割0,向上計數(shù)模式*/TIM_TimeBaseStructure.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,OC2通道,工作模式為計數(shù)器模式,使能比較匹配輸出極性,時鐘分割0,向上計數(shù)模式*/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_OCInitStructure.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_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計數(shù)*/TIM_Cmd(TIM2,ENABLE);* 函數(shù)名 : NVIC_Configuration* 函數(shù)描述 : 設置NVIC參數(shù)void NVIC_Configuration(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_SetVectorTable(NVIC_VectTab_FLASH , 0x0); #endif /* 選擇NVIC優(yōu)先級分組2 */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); /* 使能EXIT 0通道 ,2級先占優(yōu)先級 ,0級次占優(yōu)先級 */ NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);#include stm32l1xx_it.h#include stdio.hextern uint16_t CCR1_Val; /*聲明輸出比較通道1計數(shù)周期變量*/extern uint16_t CCR2_Val;extern uint16_t CCR3_Val;extern uint16_t CCR4_Val;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_Handler(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();void DMA1_Channel1_IRQHandler (void)void RTC_WKUP_IRQHandler(void)void TIM2_IRQHandler(void)uint16_t capture=0;/*當前捕獲計數(shù)值局部變量*/*TIM時鐘=32M,分頻數(shù)=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);/*讀出當前計數(shù)值*/capture=TIM_GetCapture1(TIM2);/*根據當前計數(shù)值更新輸出捕獲寄存器*/TIM_SetCompare1(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(TIM2,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_CC4)!=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定時器實現(xiàn)按鍵掃描*/ #include stm32l1xx.h#include stdio.h#include discover_board.h#include stm32l_discovery_lcd.h/* Private function prototypes */void RCC_Configuration(void);/*系統(tǒng)時鐘設置*/void Init_GPIOs (void);/*GPIO端口設置*/void Delay(uint32_t nTime);static volatile uint
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 8855-2025新鮮果蔬取樣方法
- 2025年藥學專業(yè)合格考試試題及答案
- 2025年小學音樂教師資格考試試題及答案
- 2025年市場調研分析師職業(yè)資格考試試題及答案
- 2025年社會工作理論與實踐測試題及答案
- 2025年建筑工程師考試真題及答案
- 2025年金融科技知識與應用考試試卷及答案
- 2025年的市場調研師職業(yè)考試題及答案
- 2025年工程造價領域考試試卷及答案
- 2025年公務員面試試卷及答案的指導
- 口腔助理醫(yī)師考試大綱
- DLT-969-2023年變電站運行導則
- 【中考真題】2023年浙江嘉興中考歷史與社會.道德與法治試題及答案
- GB/T 42599-2023風能發(fā)電系統(tǒng)電氣仿真模型驗證
- 《電子技術基礎》期末考試復習題庫(含答案)
- TD-T 1070.1-2022 礦山生態(tài)修復技術規(guī)范 第1部分:通則
- 平壓平模切機安全操作規(guī)程、風險告知卡、應急處置
- 紅樓夢思辨讀寫導學全案
- GB/T 17626.4-2018電磁兼容試驗和測量技術電快速瞬變脈沖群抗擾度試驗
- 活性炭改性及吸附條件研究性實驗
- PPT用中國地圖(可編輯)
評論
0/150
提交評論