STM32期末考試答案解析詳解-2023修改整理_第1頁(yè)
STM32期末考試答案解析詳解-2023修改整理_第2頁(yè)
STM32期末考試答案解析詳解-2023修改整理_第3頁(yè)
STM32期末考試答案解析詳解-2023修改整理_第4頁(yè)
STM32期末考試答案解析詳解-2023修改整理_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論