STM32 BUTTON方式(polling & interrupt)
扫描二维码
随时随地手机看文章
基于stm32 F401 discovery版实现button polling & interrupt点亮LED
/**
******************************************************************************
*@fileTemplate/main.c
*@authorMCDApplicationTeam
*@versionV1.0.0
*@date11-September-2013
*@briefMainprogrambody
******************************************************************************
*@attention
*
*
*
*LicensedunderMCD-STLibertySWLicenseAgreementV2,(the"License");
*YoumaynotusethisfileexceptincompliancewiththeLicense.
*YoumayobtainacopyoftheLicenseat:
*
*http://www.st.com/software_license_agreement_liberty_v2
*
*Unlessrequiredbyapplicablelaworagreedtoinwriting,software
*distributedundertheLicenseisdistributedonan"ASIS"BASIS,
*WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
*SeetheLicenseforthespecificlanguagegoverningpermissionsand
*limitationsundertheLicense.
*
******************************************************************************
*/
/*Includes------------------------------------------------------------------*/
#include"main.h"
/**@addtogroupTemplate
*@{
*/
/*Privatetypedef-----------------------------------------------------------*/
/*Privatedefine------------------------------------------------------------*/
#defineUSER_BUTTON_INTERRUPT
#defineKEY_ON0
#defineKEY_OFF1
/*Privatemacro-------------------------------------------------------------*/
/*Privatevariables---------------------------------------------------------*/
/*Privatefunctionprototypes-----------------------------------------------*/
staticvoidDelay(__IOuint32_tnCount);
uint8_tKey_Scan(GPIO_TypeDef*GPIOx,u16GPIO_Pin);
/*Privatefunctions---------------------------------------------------------*/
/**
*@briefMainprogram
*@paramNone
*@retvalNone
*/
intmain(void)
{
/*! thisisdonethroughSystemInit()functionwhichiscalledfromstartup file(startup_stm32f401xx.s)beforetobranchtoapplicationmain. ToreconfigurethedefaultsettingofSystemInit()function,referto system_stm32f4xx.cfile */ /*Addyourapplicationcodehere*/ /*InitializeLEDS*/ STM_EVAL_LEDInit(LED3); STM_EVAL_LEDInit(LED4); STM_EVAL_LEDInit(LED5); STM_EVAL_LEDInit(LED6); #ifdefUSER_BUTTON_INTERRUPT /*Initializethebuttoninterrupt*/ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); STM_EVAL_PBInit(BUTTON_USER,BUTTON_MODE_EXTI); #endif #ifdefUAER_BUTTON_POLLING /*Initializethebuttonnormal*/ STM_EVAL_PBInit(BUTTON_USER,BUTTON_MODE_GPIO); while(1) { if(Key_Scan(GPIOA,GPIO_Pin_0)==KEY_ON) { /*LED1·′×a*/ STM_EVAL_LEDToggle(LED3); } } #endif #ifdefLED_ON_OFF while(1) { STM_EVAL_LEDOn(LED3); /*Insertdelay*/ Delay(0x3FFFFF); /*PD13tobetoggled*/ STM_EVAL_LEDOn(LED4); /*Insertdelay*/ Delay(0x3FFFFF); /*PD14tobetoggled*/ STM_EVAL_LEDOn(LED5); /*Insertdelay*/ Delay(0x3FFFFF); /*PD15tobetoggled*/ STM_EVAL_LEDOn(LED6); /*Insertdelay*/ Delay(0x7FFFFF); STM_EVAL_LEDOff(LED3); STM_EVAL_LEDOff(LED4); STM_EVAL_LEDOff(LED5); STM_EVAL_LEDOff(LED6); //GPIO_ResetBits(GPIOD,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); /*Insertdelay*/ Delay(0xFFFFFF); } #endif /*Infiniteloop*/ while(1) { } } #ifdefUSE_FULL_ASSERT /** *@briefReportsthenameofthesourcefileandthesourcelinenumber *wheretheassert_paramerrorhasoccurred. *@paramfile:pointertothesourcefilename *@paramline:assert_paramerrorlinesourcenumber *@retvalNone */ voidassert_failed(uint8_t*file,uint32_tline) { /*Usercanaddhisownimplementationtoreportthefilenameandlinenumber, ex:printf("Wrongparametersvalue:file%sonline%drn",file,line)*/ /*Infiniteloop*/ while(1) { } } #endif /** *@} */ /** *@briefDelayFunction. *@paramnCount:specifiestheDelaytimelength. *@retvalNone */ voidDelay(__IOuint32_tnCount) { while(nCount--) { } } /**