[开发板] CW32F030CxTx--外部中断

[复制链接]
561|2
 楼主| 51xlf 发表于 2022-8-26 13:18 | 显示全部楼层 |阅读模式
这里使用的外部中断函数宏定义板子上的LED和按键的引脚

  1. #define LED_GPIO_PORT CW_GPIOB
  2. #define LED_GPIO_PINS GPIO_PIN_8 | GPIO_PIN_9
  3. #define KEY_GPIO_PORT CW_GPIOA
  4. #define KEY_GPIO_PINS GPIO_PIN_1 | GPIO_PIN_2
使能时钟,并配置端口和中断

  1. __RCC_GPIOA_CLK_ENABLE();    // 使能GPIO的配置时钟
  2.     __RCC_GPIOB_CLK_ENABLE();

  3.     GPIO_InitStruct.IT = GPIO_IT_RISING | GPIO_IT_FALLING;
  4.     GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  5.     GPIO_InitStruct.Pins = KEY_GPIO_PINS;
  6.     GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  7.     GPIO_Init(KEY_GPIO_PORT, &GPIO_InitStruct);

  8.     GPIO_InitStruct.IT = GPIO_IT_NONE;
  9.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  10.     GPIO_InitStruct.Pins = LED_GPIO_PINS;
  11.     GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);

  12.     //清除PA00中断标志并使能NVIC
  13.     GPIOA_INTFLAG_CLR(bv1| bv2);
  14.     NVIC_EnableIRQ(GPIOA_IRQn);
添加中断函数
  1. void GPIOA_IRQHandler(void)
  2. {
  3.   /* USER CODE BEGIN */
  4.   GPIOA_IRQHandlerCallback();
  5.   /* USER CODE END */
  6. }
响应代码
  1. void GPIOA_IRQHandlerCallback(void)
  2. {
  3.     if (CW_GPIOA->ISR_f.PIN1)
  4.     {
  5.         GPIOA_INTFLAG_CLR(bv1);
  6.         PB09_TOG();
  7.     }

  8.     if (CW_GPIOA->ISR_f.PIN2)
  9.     {
  10.         GPIOA_INTFLAG_CLR(bv2);
  11.         PB08_TOG();
  12.     }
  13. }


您需要登录后才可以回帖 登录 | 注册

本版积分规则

551

主题

9967

帖子

24

粉丝
快速回复 在线客服 返回列表 返回顶部