普冉---PY32F030---EXIT外部中断的使用

官方例程描述的并不详细。
且我感觉写的有问题,所以我就修改了一下。


EXIT外部中断的使用:

1.初始化用于中断的引脚。(和初始化普通IO差不多)
2.使能中断。
3.配置中断优先级。
4.中断函数中,清除中断标志位。


该代码,在GPIO_A_PIN12上有下降沿发生的时候,GPIO_B_PIN1上会有电平翻转。


#include "main.h"	
static void APP_ConfigureExti(void);
int main(void)
{
  /* 复位所有外设,初始化flash接口和systick */
  HAL_Init();

  /* 配置外部中断 */
  APP_ConfigureExti();
	
	//-----gpio-b的第一个引脚,输出高电平
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,1);

  while (1)
  {
	
  }
}

/**
  * @brief  配置EXTI
  * @param  无
  * @retval 无
  */
static void APP_ConfigureExti(void)
{
  /* 配置中断引脚 */
  GPIO_InitTypeDef  GPIO_InitStruct;
  __HAL_RCC_GPIOA_CLK_ENABLE();                  /* 使能GPIOA时钟 */
  GPIO_InitStruct.Mode  = GPIO_MODE_IT_FALLING;  /* GPIO模式为下降沿中断 */
  GPIO_InitStruct.Pull  = GPIO_PULLUP;           /* 上拉 */
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;  /* 速度为高速 */
  GPIO_InitStruct.Pin = GPIO_PIN_12;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

	  /* 初始化IO引脚---作为中断的观测 */
  GPIO_InitTypeDef  LEDD;
  __HAL_RCC_GPIOB_CLK_ENABLE();                  /* 使能GPIOB时钟 */
  LEDD.Mode  = GPIO_MODE_OUTPUT_PP;  /* GPIO模式为下降沿中断 */
  LEDD.Pull  = GPIO_PULLUP;           /* 上拉 */
  LEDD.Speed = GPIO_SPEED_FREQ_HIGH;  /* 速度为高速 */
  LEDD.Pin = GPIO_PIN_1;
  HAL_GPIO_Init(GPIOB, &LEDD);
	
	
	
  /* 使能EXTI中断 */
  HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);
  /* 配置中断优先级 */
  HAL_NVIC_SetPriority(EXTI4_15_IRQn, 0, 0);
}


//--------------中断事件发生的时候,就执行这个函数
void EXTI4_15_IRQHandler(void)
{
	//  BSP_LED_Toggle(LED_GREEN);
	HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
}






你可能感兴趣的:(普冉32位单片机,单片机,stm32,嵌入式硬件,普冉PY32F030)