天天看点

STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:

前言:

1、软件:keil5,STM32CubeMX

2、STM32板子:STM32F103VET6

4、按键管脚:PA0 PC13

5、LED管脚: PB0 PB1 PB5

文章目录

  • 怎么用外部中断点灯?
    • 1.知道原理:
    • 2.配置STM32CubeMX:
    • 3.你要写的代码:
    • 4.实现的效果:
  • 具体过程:
  • 1.配置CubeMX
      • 1.打开软件
      • 2.选择板子类型
      • 3.选择serial wire:
      • 4.选择外部时钟:
      • 5.选择GPIO的IO口:
      • 6.打开外部中断:
      • 7.文件名和选择文件地址:
  • 2.在keil中编写代码实现功能:
      • 1.配置keil
      • 2.写代码:

怎么用外部中断点灯?

1.知道原理:

绿灯的io口是PB0,蓝灯的io口是PB1,红灯的io口是PB5,外部中断按键KEY1:PA0,外部中断按键KEY2:PC13,

当按键按下PA0或者PC13IO口输入高电平,检测到上升沿,或者松开检测到下降沿,使PB0,PB1,PB5,IO口为低电平就能点亮

STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:
STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:

2.配置STM32CubeMX:

找到LED的IO口配置为高电平(输出模式),找到按键的IO口配置(外部中断模式)。

STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:

3.你要写的代码:

我这里用KEY1和KEY2来控制绿灯蓝灯切换。

void Delay(unsigned int i)//延时
{
	while(i--);
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if(GPIO_Pin==GPIO_PIN_0)
  {
   Delay(100);/* 延时一小段时间,消除抖动 */
    if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==SET)
    {
      HAL_GPIO_WritePin (GPIOB,GPIO_PIN_1 ,GPIO_PIN_RESET);
			HAL_GPIO_WritePin (GPIOB,GPIO_PIN_0 ,GPIO_PIN_SET);
    }
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);
  }
  if(GPIO_Pin==GPIO_PIN_13)
  {
     Delay(100);/* 延时一小段时间,消除抖动 */
    if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)==SET)
    {
      HAL_GPIO_WritePin (GPIOB,GPIO_PIN_1 ,GPIO_PIN_SET);
			HAL_GPIO_WritePin (GPIOB,GPIO_PIN_0 ,GPIO_PIN_RESET);
    }
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_13);
  }

}
           

4.实现的效果:

STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:
STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:

具体过程:

1.配置CubeMX

1.打开软件

STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:

2.选择板子类型

STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:

3.选择serial wire:

用于DAP和J-Link做下载

STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:

4.选择外部时钟:

高速时钟(HSE)选择外部晶振

STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:
STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:

5.选择GPIO的IO口:

按键管脚:PA0 PC13 (EXTI模式)

LED管脚: PB0 PB1 PB5(输出模式)

模式:

上升沿触发的外部中断

下降沿触发的外部中断

上升/下降沿触发的外部中断

上升沿触发的事件中断

下降沿触发的事件中断

上升/下降沿触发的事件中断

STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:

6.打开外部中断:

STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:

7.文件名和选择文件地址:

建议用英文名

STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:
STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:

2.在keil中编写代码实现功能:

1.配置keil

STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:
STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:
STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:

2.写代码:

只能在begin和end之间写代码,不然再次启动CubeMX会把写在begin和end外的代码覆盖掉(删掉)

/* USER CODE BEGIN 1 */
void Delay(unsigned int i)//延时
{
	while(i--);
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if(GPIO_Pin==GPIO_PIN_0)
  {
   Delay(100);/* 延时一小段时间,消除抖动 */
    if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==SET)
    {
      HAL_GPIO_WritePin (GPIOB,GPIO_PIN_1 ,GPIO_PIN_RESET);
			HAL_GPIO_WritePin (GPIOB,GPIO_PIN_0 ,GPIO_PIN_SET);
    }
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);
  }
  if(GPIO_Pin==GPIO_PIN_13)
  {
     Delay(100);/* 延时一小段时间,消除抖动 */
    if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)==SET)
    {
      HAL_GPIO_WritePin (GPIOB,GPIO_PIN_1 ,GPIO_PIN_SET);
			HAL_GPIO_WritePin (GPIOB,GPIO_PIN_0 ,GPIO_PIN_RESET);
    }
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_13);
  }

}
/* USER CODE END 1 */
           
STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:
STM32CubeMX(三):外部中断EXTI怎么用外部中断点灯?具体过程:1.配置CubeMX2.在keil中编写代码实现功能:

点击下载就能通过按键点亮灯了!!!

最后:

要自己写一个短暂的延时

void Delay(unsigned int i)
{
	while(i--);
}

           

不能用库的延时

HAL_Delay (1000);

不然会卡死。

继续阅读