STM32外部中断设置

GPIO外部中断配置一般步骤

1 使能GPIO时钟  
2 设置GPIO输入模式 上拉/下拉/浮空
3 使能AFIO/SYSCFG时钟 开启时钟修改寄存器
4 设置EXTI和IO对应关系 中断线 对应引脚 
5 设置EXTI屏蔽和触发 设置触发模式,上升沿,下降沿
6 NVIC 设置优先级分组,设置优先级,使能中断
7 设计中断服务函数  

 

 

 

 

 

 

 

HAL库设置GPIO外部中断步骤

1 使能GPIO时钟 __HAL_RCC_GPIOA_CLK_ENABLE(); //GPIOA
2 设置GPIO/AFIO/EXIT HAL_GPIO_Init();
3 设置中断分组 HAL_NVIC_SetPriorityGrouping
4 设置中断优先级 HAL_NVIC_SetPriority
5 使能中断 HAL_NVIC_EnableIRQ
6 设计中断服务函数 HAL_GPIO_EXTI_Callback

 

 

 

 

 

 

 

 

设置NVIC分组模式

void HAL_MspInit(void)
{
  __HAL_RCC_SYSCFG_CLK_ENABLE();
  __HAL_RCC_PWR_CLK_ENABLE();

  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);//设置NVIC分组模式2

}

配置GPIO和中断优先级

void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};//创建GPIO_InitTypeDef结构体GPIO_InitStruct,用于配置GPIO

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();//GPIO口时钟使能
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);//LED2默认输出低电平

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = Button1_Pin;//选择引脚Button1_Pin
  GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;//设置引脚模式为下降沿触发中断
  GPIO_InitStruct.Pull = GPIO_PULLUP;//设置上下拉模式
  HAL_GPIO_Init(Button1_GPIO_Port, &GPIO_InitStruct);//用GPIO_InitStruct配置Button1引脚

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = LED2_Pin;//选择引脚LED2_Pin
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;//推挽输出模式
  GPIO_InitStruct.Pull = GPIO_NOPULL;//不上下拉
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;//设置GPIO速度
  HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);//用GPIO_InitStruct配置LED2引脚
  

  /* EXTI interrupt init*/
  HAL_NVIC_SetPriority(EXTI15_10_IRQn, 3, 3);//设置中断EXTI15_10_IRQn优先级,抢占优先级3,响应优先级3
  HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);//使能中断EXTI15_10_IRQn

}

 设计中断服务函数

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)//通用中断回调函数
{
    delay_ms(20);//按键消抖
    if(GPIO_Pin == Button1_Pin)//判断EXTI中断来源
    {
        HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);//翻转LED2状态
    }
}

 

posted @   Yannnnnnn  阅读(191)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
点击右上角即可分享
微信分享提示