STM32 EXTI的HAL库设置步骤(外部中断)

一, 使能GPIO时钟

__HAL_RCC_GPIOx_CLK_ENABLE()

二 、GPIO/AFIO(SYSCFG)/EXTI

 GPIO_InitTypeDef gpio_init_struct;   
 gpio_init_struct.Pin  = GPIO_PIN_3;                           //PH3
 gpio_init_struct.Mode = GPIO_MODE_IT_FALLING;     //下降沿触发
 gpio_init_struct.Pull = GPIO_PULLUP;                          //上拉
 HAL_GPIO_Init(GPIOH, &gpio_init_struct);

三、设置中断分组

使用HAL_NVIC_SetPriorityGrouping(); 此函数只需要设置一次

HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);

四、设置中断优先级

void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)

五、 使能中断

void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)

六、 设计中断服务函数

void EXTI3_IRQHandler(void)
{
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);    
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    delay_ms(20);
    if (GPIO_Pin == GPIO_PIN_3)
    {
        if (HAL_GPIO_ReadPin(GPIOH, GPIO_PIN_3) == 0)
        {
            HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
        }        
    }
}

注意:STM32只有EXTI0~4, EXTI9_5, EXTI15_10 7个外部中断

STM32F103系列是ST公司生产的一款基于ARM Cortex-M3内核的微控制器,广泛应用于嵌入式领域。HAL库全称为Hardware Abstraction Layer,即硬件抽象层,是ST公司为简化硬件操作而提供的中间层API库。 使用STM32F103的HAL库进行外部中断编程通常涉及以下步骤: 1. 配置GPIO引脚为外部中断模式:首先需要选择合适的GPIO引脚,并将其配置为外部中断模式。这涉及到GPIO的模式设置,中断触发条件(上升沿、下降沿、上升下降沿触发或高电平、低电平触发)以及是否启用中断。 2. 配置中断优先级:在中断优先级寄存器中设置外部中断的优先级。 3. 配置NVIC(Nested Vectored Interrupt Controller):NVIC是负责中断管理的硬件模块,需要将其与中断线相关联,并配置中断触发方式和优先级。 4. 实现中断处理函数:编写中断服务函数(ISR),在该函数中编写中断发生时需要执行的代码。 5. 启用中断:配置完成后,需要在中断使能寄存器中启用相应的中断线,使能中断。 下面是一个简化的代码示例,假设我们要使用STM32F103的HAL库配置PC13引脚为外部中断,并在中断发生时翻转一个LED灯的状态: ```c /* 初始化GPIO */ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == GPIO_PIN_13) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // 翻转LED状态 } } int main(void) { HAL_Init(); // 初始化HAL库 __HAL_RCC_GPIOC_CLK_ENABLE(); // 使能GPIOC时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; // 配置PC13为输入浮空模式,用于外部中断 GPIO_InitStruct.Pin = GPIO_PIN_13; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; // 下降沿触发 GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); // 配置中断优先级并启用 HAL_NVIC_SetPriority(EXTI15_10_IRQn, 2, 0); HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); // 主循环 while (1) { // 应用程序的其他部分 } } ``` 在上述代码中,`HAL_GPIO_EXTI_Callback` 函数是外部中断回调函数,当任何引脚产生中断时,HAL库会调用该函数,并传入引发中断的引脚编号。这里我们检查了是否是PC13引脚触发了中断,并执行了翻转LED的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驰骋的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值