Stm32按键中断使LED灯闪烁

来源:互联网 发布:用excel做小型数据库 编辑:程序博客网 时间:2024/04/30 20:37

main.c源代码:

/**说明:*PA0:KEY1;PA1:KEY2;*PA2:LED1;PA3:LED2;*PA9:USART1_TX;PA10:USART1_RX*/#include "stm32f10x.h"  #include "stm32f10x_rcc.h"  #include "stm32f10x_gpio.h"  #include "stm32f10x_crc.h"#include "stm32f10x_exti.h"#include "system_stm32f10x.h" #include "misc.h"void RCC_Configuration(void);  void GPIO_Configuration(void); void EXTI_Configuration(void); void NVIC_Configuration(void);int main(){      RCC_Configuration();      GPIO_Configuration();    EXTI_Configuration();       NVIC_Configuration();        while(1);}void RCC_Configuration(void)    {       SystemInit();  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);     }     void GPIO_Configuration(void)    {      GPIO_InitTypeDef GPIO_InitStructure;   //LED  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3;   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  GPIO_Init(GPIOA, &GPIO_InitStructure);      //KEY  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  GPIO_Init(GPIOA, &GPIO_InitStructure); }void EXTI_Configuration(void)//外部中断初始化配置{    EXTI_InitTypeDef EXTI_InitStructure;        EXTI_ClearITPendingBit(EXTI_Line0);    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);         EXTI_InitStructure.EXTI_Line = EXTI_Line0;    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(void)//配置中断优先级{  NVIC_InitTypeDef NVIC_InitStructure;    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  NVIC_Init(&NVIC_InitStructure);}

stm32f10x_it.c源代码(因为用的是外部中断线0中断EXTI0_IRQn,所以直接修改stm32f10x_it.c里面的EXTI0_IRQHandler函数):

/*引入头文件*/#include "..\include\stm32f10x.h" #include "..\include\stm32f10x_it.h"#include "..\include\stm32f10x_exti.h"#include "..\include\stm32f10x_rcc.h"#include "..\include\stm32f10x_gpio.h" #include "..\include\misc.h"......void delay_ms(u16 time)       {        u16 i=0;        while(time--)         {          i=12000;          while(i--);        }      }void EXTI0_IRQHandler(void){      if(EXTI_GetITStatus(EXTI_Line0)==SET)  {        GPIO_WriteBit(GPIOA,GPIO_Pin_2,(BitAction)(Bit_SET-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2)));     GPIO_WriteBit(GPIOA,GPIO_Pin_3,(BitAction)(Bit_SET-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_3)));            }   delay_ms(100);//下降沿销抖    while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)!=Bit_SET);    delay_ms(100);//上升沿销抖    while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)!=Bit_SET);    EXTI_ClearITPendingBit(EXTI_Line0);}

不要忘记了stm32f10x_it.c里面所有方法的声明头文件stm32f10x_it.h:

#ifndef __STM32F10x_IT_H#define __STM32F10x_IT_H/* Includes ------------------------------------------------------------------*//* Exported types ------------------------------------------------------------*//* Exported constants --------------------------------------------------------*//* Exported macro ------------------------------------------------------------*//* Exported functions ------------------------------------------------------- */  void NMIException(void);void HardFaultException(void);void MemManageException(void);void BusFaultException(void);void UsageFaultException(void);void DebugMonitor(void);void SVCHandler(void);void PendSVC(void);void SysTickHandler(void);void WWDG_IRQHandler(void);void PVD_IRQHandler(void);void TAMPER_IRQHandler(void);void RTC_IRQHandler(void);void FLASH_IRQHandler(void);void RCC_IRQHandler(void);void EXTI0_IRQHandler(void);void EXTI1_IRQHandler(void);void EXTI2_IRQHandler(void);void EXTI3_IRQHandler(void);void EXTI4_IRQHandler(void);void DMA1_Channel1_IRQHandler(void);void DMA1_Channel2_IRQHandler(void);void DMA1_Channel3_IRQHandler(void);void DMA1_Channel4_IRQHandler(void);void DMA1_Channel5_IRQHandler(void);void DMA1_Channel6_IRQHandler(void);void DMA1_Channel7_IRQHandler(void);void ADC1_2_IRQHandler(void);void USB_HP_CAN_TX_IRQHandler(void);void USB_LP_CAN_RX0_IRQHandler(void);void CAN_RX1_IRQHandler(void);void CAN_SCE_IRQHandler(void);void EXTI9_5_IRQHandler(void);void TIM1_BRK_IRQHandler(void);void TIM1_UP_IRQHandler(void);void TIM1_TRG_COM_IRQHandler(void);void TIM1_CC_IRQHandler(void);void TIM2_IRQHandler(void);void TIM3_IRQHandler(void);void TIM4_IRQHandler(void);void I2C1_EV_IRQHandler(void);void I2C1_ER_IRQHandler(void);void I2C2_EV_IRQHandler(void);void I2C2_ER_IRQHandler(void);void SPI1_IRQHandler(void);void SPI2_IRQHandler(void);void USART1_IRQHandler(void);void USART2_IRQHandler(void);void USART3_IRQHandler(void);void EXTI15_10_IRQHandler(void);void RTCAlarm_IRQHandler(void);void USBWakeUp_IRQHandler(void);void TIM8_BRK_IRQHandler(void);void TIM8_UP_IRQHandler(void);void TIM8_TRG_COM_IRQHandler(void);void TIM8_CC_IRQHandler(void);void ADC3_IRQHandler(void);void FSMC_IRQHandler(void);void SDIO_IRQHandler(void);void TIM5_IRQHandler(void);void SPI3_IRQHandler(void);void UART4_IRQHandler(void);void UART5_IRQHandler(void);void TIM6_IRQHandler(void);void TIM7_IRQHandler(void);void DMA2_Channel1_IRQHandler(void);void DMA2_Channel2_IRQHandler(void);void DMA2_Channel3_IRQHandler(void);void DMA2_Channel4_5_IRQHandler(void); #endif /* __STM32F10x_IT_H *//******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/




0 0
原创粉丝点击