![STM32期末考試答案解析詳解-2023修改整理_第1頁(yè)](http://file4.renrendoc.com/view/b73e9b2cecba3c9a53ec738b0b1a4abe/b73e9b2cecba3c9a53ec738b0b1a4abe1.gif)
![STM32期末考試答案解析詳解-2023修改整理_第2頁(yè)](http://file4.renrendoc.com/view/b73e9b2cecba3c9a53ec738b0b1a4abe/b73e9b2cecba3c9a53ec738b0b1a4abe2.gif)
![STM32期末考試答案解析詳解-2023修改整理_第3頁(yè)](http://file4.renrendoc.com/view/b73e9b2cecba3c9a53ec738b0b1a4abe/b73e9b2cecba3c9a53ec738b0b1a4abe3.gif)
![STM32期末考試答案解析詳解-2023修改整理_第4頁(yè)](http://file4.renrendoc.com/view/b73e9b2cecba3c9a53ec738b0b1a4abe/b73e9b2cecba3c9a53ec738b0b1a4abe4.gif)
![STM32期末考試答案解析詳解-2023修改整理_第5頁(yè)](http://file4.renrendoc.com/view/b73e9b2cecba3c9a53ec738b0b1a4abe/b73e9b2cecba3c9a53ec738b0b1a4abe5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
千里之行,始于足下讓知識(shí)帶有溫度。第第2頁(yè)/共2頁(yè)精品文檔推薦STM32期末考試答案解析詳解簡(jiǎn)述嵌套向量中斷控制器(NVIC)的主要特性。
答:STM32的嵌套向量中斷控制器(NVIC)管理著包括Cortex-M3核異樣等中斷,其和ARM處理器核的接口緊密相連,可以實(shí)現(xiàn)低延遲的中斷處理,并有效地處理晚到的中斷。STM32嵌套向量中斷控制器(NVIC)的主要特性如下:q具有43個(gè)可屏蔽中斷通道(不包含16個(gè)Cortex-M3的中斷線)。q具有16個(gè)可編程的優(yōu)先等級(jí)。q可實(shí)現(xiàn)低延遲的異樣和中斷處理。q具有電源管理控制。q系統(tǒng)控制寄存器的實(shí)現(xiàn)。
1.簡(jiǎn)述STM32的ADC系統(tǒng)的功能特性。
答:STM32的ADC系統(tǒng)的主要功能特性包括如下幾個(gè)方面:ADC開關(guān)控制、ADC時(shí)鐘、ADC通道挑選、ADC的轉(zhuǎn)換模式、中斷、模擬看門狗、ADC的掃描模式、ADC的注入通道管理、間斷模式、ADC的校準(zhǔn)模式、ADC的數(shù)據(jù)對(duì)齊、可編程的通道采樣時(shí)光、外部觸發(fā)轉(zhuǎn)換、DMA哀求、雙ADC模式和溫度傳感器。
2.簡(jiǎn)述STM32的雙ADC工作模式。
答:在有兩個(gè)ADC的STM32器件中,可以使用雙ADC模式。在雙ADC模式里,按照ADC_CR1寄存器中DUALMOD[2:0]位所選的模式,轉(zhuǎn)換的啟動(dòng)可以是ADC1主和ADC2從的交替觸發(fā)或同時(shí)觸發(fā)。雙ADC工作模式主要包括如下幾種:同時(shí)注入模式、同時(shí)規(guī)章模式、迅速交替模式、慢速交替模式、交替觸發(fā)模式和自立模式。
1.簡(jiǎn)述STM32的USART的功能特點(diǎn)。、
答:STM32的USART為通用同步異步收發(fā)器,其可以與使用工業(yè)標(biāo)準(zhǔn)NRZ異步串行數(shù)據(jù)格式的外部設(shè)備之間舉行全雙工數(shù)據(jù)交換。USART還可以利用分?jǐn)?shù)波特率發(fā)生器提供寬范圍的波特率挑選。STM32的USART支持同步單向通信和半雙工單線通信。同時(shí),其也支持LIN(局部互連網(wǎng)),智能卡協(xié)議和IrDA(紅外數(shù)據(jù))SIRENDEC規(guī)范,以及調(diào)制解調(diào)器(CTS/RTS)操作。STM32還具備多處理器通信能力。另外,通過多緩沖器配置的DMA方式,還可以實(shí)現(xiàn)高速數(shù)據(jù)通信。
1.簡(jiǎn)述STM32的高級(jí)控制定時(shí)器TIM1的結(jié)構(gòu)。
答:STM32提供了一個(gè)高級(jí)控制定時(shí)器(TIM1)。TIM1由一個(gè)16位的自動(dòng)裝載計(jì)數(shù)器組成,它由一個(gè)可編程預(yù)分頻器驅(qū)動(dòng)。TIM1適合多種用途,包含測(cè)量輸入信號(hào)的脈沖寬度,或者產(chǎn)生輸出波形。使用定時(shí)器預(yù)分頻器和RCC時(shí)鐘控制預(yù)分頻器,可以實(shí)現(xiàn)脈沖寬度和波形周期從幾個(gè)微秒到幾個(gè)毫秒的調(diào)整。高級(jí)控制定時(shí)器TIM1和通用控制定時(shí)器TIMx是徹低自立的,它們不分享任何資源,因此可以同步操作。2.簡(jiǎn)述STM32時(shí)鐘的類型。
答:STM32提供了三種不同的時(shí)鐘源,其都可被用來(lái)驅(qū)動(dòng)系統(tǒng)時(shí)鐘SYSCLK,這三種時(shí)鐘源分離為:qHSI振蕩器時(shí)qHSE振蕩器時(shí)鐘qPLL時(shí)鐘
這三種時(shí)鐘源還可以有以下2種二級(jí)時(shí)鐘源:
q32kHz低速內(nèi)部RC,可以用于驅(qū)動(dòng)自立看門狗和RTC。其中,RTC用于從停機(jī)/待機(jī)模式下自動(dòng)喚醒系統(tǒng)。
q32.768kHz低速外部晶振也可用來(lái)驅(qū)動(dòng)RTC(RTCCLK)。
任一個(gè)時(shí)鐘源都可被自立地啟動(dòng)或關(guān)閉,這樣可以通過關(guān)閉不使用的時(shí)鐘源來(lái)優(yōu)化囫圇系統(tǒng)的功耗。1.簡(jiǎn)述DMA控制器的基本功能。
答:STM32的DMA控制器有7個(gè)通道,每個(gè)通道特地用來(lái)管理來(lái)自于一個(gè)或多個(gè)外設(shè)對(duì)存儲(chǔ)器拜訪的哀求。還有一個(gè)仲裁器來(lái)協(xié)調(diào)各個(gè)DMA哀求的優(yōu)先權(quán)。DMA控制器和Cortex-M3核分享系統(tǒng)數(shù)據(jù)線執(zhí)行直接存儲(chǔ)器數(shù)據(jù)傳輸。因此,1個(gè)DMA哀求占用至少2個(gè)周期的CPU拜訪系統(tǒng)總線時(shí)光。為了保證Cortex-M3核的代碼執(zhí)行的最小帶寬,DMA控制器總是在2個(gè)延續(xù)的DMA哀求間釋放系統(tǒng)時(shí)鐘至少1個(gè)周期。
NVIC和外部中斷:配置中斷0(LED綠燈閃1次),中斷1(LED藍(lán)燈閃2次),中斷2三個(gè)中斷(LED綠燈閃3次),執(zhí)行挨次為0-->1-->2
。(默認(rèn)中斷0閃耀的是綠燈)按下按鍵,綠燈閃(一亮一滅)1次,藍(lán)燈閃2次,然后綠燈閃3次,
中斷結(jié)束。
#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);
/*!<WaittillHSIisready*/
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)==RESET)
{}
/*RCC_PLLCmd(DISABLE);
RCC_PLLConfig(RCC_PLLSource_HSI,RCC_PLLMul_3,RCC_PLLDiv_2);
RCC_PLLCmd(ENABLE);*/
/*!<WaittillPLLisready*/
//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
}
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,
/*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_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,
/*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_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_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;//PA0forUserbuttonEXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_Init(
}
voidNVIC_Configuration()
{NVIC_InitTypeDefNVIC_InitStructure;
#ifdefVECT_TAB_RAM
//è?1?C/C++Compiler\Preprocessor\Definedsymbols?Dμ??¨ò?á?VECT_TAB_RAM£¨??3ìDò?a?ü???úèYμ?±í??£?
NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);//?ò?úRAMμ÷ê?
#else//è?1???óD?¨ò?VECT_TAB_RAM
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);//?ò?úFlashà?μ÷ê?#endif//?áê??D??ó???
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_IRQChannel=EXTI1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(
NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(
}
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++){}
GPIO_TOGGLE(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);
for(i=0;i<500000;i++){}
EXTI_ClearFlag(EXTI_Line2);
}
/*voidPPP_IRQHandler(void)
{}*/*@}
(配置的兩個(gè)定時(shí)器通道的中斷哀求的時(shí)光間隔分離為1秒和2秒)紅紅每隔1秒閃耀1次,綠燈每隔2秒閃耀1次。
#include"stm32l1xx.h"
#include"stdio.h"
/*自定義同義關(guān)鍵字*//*自定義參數(shù)宏*//*自定義函數(shù)宏*//*自定義變量*/uint16_tCCR1_Val=2500;/*初始化輸出比較通道1計(jì)數(shù)周期變量*/
//uint16_tCCR1_Val=5000;
uint16_tCCR2_Val=1250;/**/
//uint16_tCCR2_Val=2500;/**/
//uint16_tCCR3_Val=10000;/**/
//uint16_tCCR4_Val=5000;/**/
/*自定義函數(shù)聲明*/
voidRCC_Configuration(void);
voidGPIO_Configuration(void);
voidNVIC_Configuration(void);
voidTIM_Configuration(void);
*函數(shù)名:main*函數(shù)描述:主函數(shù)*輸入?yún)?shù):無(wú)
intmain(void)
{/*設(shè)置系統(tǒng)時(shí)鐘*/
RCC_Configuration();
/*設(shè)置NVIC*/
NVIC_Configuration();
/*設(shè)置GPIO端口*/
GPIO_Configuration();
/*設(shè)置TIM*/
TIM_Configuration();
while(1);
}
*函數(shù)名:RCC_Configuration*函數(shù)描述:設(shè)置系統(tǒng)各部分時(shí)鐘*輸入?yún)?shù):無(wú)voidRCC_Configuration(void)
{/*定義枚舉類型變量HSEStartUpStatus*/
ErrorStatusHSEStartUpStatus;
/*復(fù)位系統(tǒng)時(shí)鐘設(shè)置*/
RCC_DeInit();
/*開啟HSE*/
RCC_HSEConfig(RCC_HSE_ON);
/*等待HSE起振并穩(wěn)定*/
HSEStartUpStatus=RCC_WaitForHSEStartUp();
/*推斷HSE起是否振勝利,是則進(jìn)入if()內(nèi)部*/
if(HSEStartUpStatus==SUCCESS)
{/*挑選HCLK(AHB)時(shí)鐘源為SYSCLK1分頻*/
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/*挑選PCLK2時(shí)鐘源為HCLK(AHB)1分頻*/
RCC_PCLK2Config(RCC_HCLK_Div1);
/*挑選PCLK1時(shí)鐘源為HCLK(AHB)2分頻*/
RCC_PCLK1Config(RCC_HCLK_Div2);
/*設(shè)置FLASH延時(shí)周期數(shù)為2*/
FLASH_SetLatency(FLASH_Latency_1);
/*使能FLASH預(yù)取緩存*/
FLASH_PrefetchBufferCmd(ENABLE);
/*挑選鎖相環(huán)(PLL)時(shí)鐘源為HSE2分頻,倍頻數(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時(shí)鐘源為PLL*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/*等待PLL成為SYSCLK時(shí)鐘源*/
while(RCC_GetSYSCLKSource()!=0x08);
}
/*打開APB2總線上的GPIOA時(shí)鐘*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);
}
*函數(shù)名:GPIO_Configuration*函數(shù)描述:設(shè)置各GPIO端口功能
voidGPIO_Configuration(void)
{/*定義GPIO初始化結(jié)構(gòu)體GPIO_InitStructure*/
GPIO_InitTypeDefGPIO_InitStructure;
/*設(shè)置PA.0,PA.1,PA.2為浮空輸入(EXTILine0)*/
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,
}
*函數(shù)名:NVIC_Configuration*函數(shù)描述:設(shè)置NVIC參數(shù)
voidTIM_Configuration(void)
{/*定襎IM_TimeBase初始化結(jié)構(gòu)體?/
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
/*定義TIM_OCInit初始化結(jié)構(gòu)體*/
TIM_OCInitTypeDefTIM_OCInitStructure;
/*技術(shù)重載值為65535,預(yù)分頻值為16000,時(shí)鐘分割0,向上計(jì)數(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,
/*設(shè)置預(yù)分頻值,立刻裝入*/
TIM_PrescalerConfig(TIM2,3199,TIM_PSCReloadMode_Immediate);
/*設(shè)置OC1,OC2通道,工作模式為計(jì)數(shù)器模式,使能比較匹配輸出極性,時(shí)鐘分割0,向上計(jì)數(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_Pulse=CCR2_Val;
TIM_OC2Init(TIM2,
/*TIM_OCInitStructure.TIM_Pulse=CCR3_Val;
TIM_OC3Init(TIM2,
TIM_OCInitStructure.TIM_Pulse=CCR4_Val;
TIM_OC4Init(TIM2,*/
/*禁止預(yù)裝載寄存器*/
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);
/*啟動(dòng)TIM計(jì)數(shù)*/
TIM_Cmd(TIM2,ENABLE);
}
*函數(shù)名:NVIC_Configuration*函數(shù)描述:設(shè)置NVIC參數(shù)
voidNVIC_Configuration(void)
{
/*定義NVIC初始化結(jié)構(gòu)體NVIC_InitStructure*/
NVIC_InitTypeDefNVIC_InitStructure;
/*#ifdef...#else...#endif結(jié)構(gòu)的作用是按照預(yù)編譯條件打算中斷向量表起始地址*/#ifdefVECT_TAB_RAM
/*中斷向量表起始地址從0x20000000開頭*/
NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);
#else/*VECT_TAB_FLASH*/
/*中斷向量表起始地址從0x80000000開頭*/
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
#endif
/*挑選NVIC優(yōu)先級(jí)分組2*/
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
/*使能EXIT0通道,2級(jí)先占優(yōu)先級(jí),0級(jí)次占優(yōu)先級(jí)*/
NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(
}
#include"stm32l1xx_it.h"
#include"stdio.h"
externuint16_tCCR1_Val;/*聲明輸出比較通道1計(jì)數(shù)周期變量*/externuint16_tCCR2_Val;
externuint16_tCCR3_Val;
externuint16_tCCR4_Val;
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){}
voidTIM2_IRQHandler(void)
{
uint16_tcapture=0;/*當(dāng)前捕捉計(jì)數(shù)值局部變量*/
/*TIM時(shí)鐘=32M,分頻數(shù)=1599+1,TIM2counterclock=10khzCC1更新率=TIM2counterclock/CCRX_Val*/
if(TIM_GetITStatus(TIM2,TIM_IT_CC1)!=RESET)
{
GPIO_WriteBit(GPIOB,GPIO_Pin_6,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO
_Pin_6)));
/*讀出當(dāng)前計(jì)數(shù)值*/
capture=TIM_GetCapture1(TIM2);
/*按照當(dāng)前計(jì)數(shù)值更新輸出捕捉寄存器*/
TIM_SetCompare1(TIM2,capture+CCR1_Val);
TIM_ClearITPendingBit(TIM2,TIM_IT_CC1);
}
elseif(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);
}
//elseif(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);
//}
//elseif(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定時(shí)器實(shí)現(xiàn)按鍵掃描**/
#include"stm32l1xx.h"
#include"stdio.h"
#include"discover_board.h"
#include"stm32l_discovery_lcd.h"
/*Privatefunctionprototypes*/
voidRCC_Configuration(void);/*系統(tǒng)時(shí)鐘設(shè)置*/
voidInit_GPIOs(void);/*GPIO端口設(shè)置*/
voidDelay(uint32_tnTime);
staticvolatileuint32_tTimingDelay;/*定義靜態(tài)變量*/
intmain(void)
{/*ConfigureClocksforApplicationneed*/
RCC_Configuration();
SysTick_Config(16000000/2000);/*設(shè)置SysTick時(shí)鐘*//*InitI/Oports*/
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);/*延時(shí)1秒,即按1秒以上才翻轉(zhuǎn)*/
if(GPIO_ReadInputDataBit(USERBUTTON_GPIO_PORT,
USERBUTTON_GPIO_PIN)==0x01)
{GPIO_TOGGLE(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);/*翻轉(zhuǎn)輸出電平*/
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)生館經(jīng)營(yíng)托管合同范本
- t型牌合同范本
- 2025年度教育類APP開發(fā)與運(yùn)營(yíng)合同范本
- 2025年采原煤項(xiàng)目投資可行性研究分析報(bào)告
- 農(nóng)牧合同范本
- 2025年度新能源車輛設(shè)計(jì)與制造服務(wù)合同
- 2025年魚皮明膠市場(chǎng)分析報(bào)告
- 2025年度股東協(xié)議書合同范本:航空航天領(lǐng)域股權(quán)合作協(xié)議
- 2025年度建筑工程材料供應(yīng)合同范本及質(zhì)量保證
- 2025年度空運(yùn)出口貨物運(yùn)輸合同違約責(zé)任約定合同
- 中國(guó)人口研究專題報(bào)告-中國(guó)2025-2100年人口預(yù)測(cè)與政策建議-西南財(cái)經(jīng)大學(xué)x清華大學(xué)-202501
- 幼兒園開學(xué)教師安全知識(shí)培訓(xùn)
- 2024年山東水利職業(yè)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(kù)(頻考版)含答案解析
- 遼寧省名校聯(lián)盟2025年高三1月份聯(lián)合考試 語(yǔ)文試卷(含答案詳解)
- 25版六年級(jí)寒假特色作業(yè)
- 浙江省杭州市9+1高中聯(lián)盟2025屆高三一診考試英語(yǔ)試卷含解析
- 旅游行業(yè)智慧旅游營(yíng)銷策略與方案
- 《應(yīng)收培訓(xùn)》課件
- GB/T 19228.1-2024不銹鋼卡壓式管件組件第1部分:卡壓式管件
- FZ∕T 54088-2016 錦綸6全牽伸單絲
- 任務(wù)工單1純電動(dòng)汽車動(dòng)力電池檢查與維護(hù)
評(píng)論
0/150
提交評(píng)論