STM32 时钟 、中断、定时器使用

STM32 时钟 、中断、定时器使用  STM32 时钟 、中断、定时器使用

函数RCC_APB1PeriphClockCmd() 和RCC_APB2PeriphClockCmd(),RCC_AHBPeriphClockCmd()

第一个参数形式如下RCC_APB2Periph_GPIOA 或者RCC_APB1Periph_TIM3

 

/** @defgroup APB2_peripheral
AFIO GPIOA GPIOB GPIOC ....GPIOG ADC1 ADC2 ADC3 SPI1 UART1 TIM1 TIM8 TIM9~11 TIM15~17

注意:AFIO当事件控制、重映射、外部中断需要使能AFIO时钟。

/** @defgroup APB1_peripheral
TIM2~7 TIM12~14 WWDG USB CAN1 CAN2 PWR DAC SPI2 SPI3 UART2~5 I2C1 I2C2

 

中断优先级分组

STM32 时钟 、中断、定时器使用STM32 时钟 、中断、定时器使用

一般使用NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);设置一次。

 以PE2为例,使用外部中断

//初始化代码
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_2;//KEY2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO_Init(GPIOE, &GPIO_InitStructure);//

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);    //使能复用时钟
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);

EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

EXTI_InitStructure.EXTI_Line=EXTI_Line2;    //KEY2
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;    
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);


NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//使能外部中断2通道            
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;                    
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                
NVIC_Init(&NVIC_InitStructure);

//中断相应函数
void EXTI2_IRQHandler(void)
{
    delay_ms(10);//消抖
    if(KEY2==0)      //按键PE2
    {
        LED0=!LED0;
    }         
    EXTI_ClearITPendingBit(EXTI_Line2);  //清除line2上的中断标志位
}
View Code

相关文章:

  • 2021-07-24
  • 2022-12-23
  • 2021-05-31
  • 2021-08-20
  • 2021-08-29
  • 2021-09-19
  • 2021-07-07
  • 2022-02-08
猜你喜欢
  • 2021-10-25
  • 2022-01-07
  • 2022-12-23
  • 2021-12-19
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案