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状态
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用