STM32 外部中断底层代码分析

中断在GPIO初始化中,我们先跳转到触发模式的函数里

可以看那些数不同来判断寄存器哪些位控制此模式

我们再跳转到void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)中

计算config并写入

MODIFY_REG((*configregister), ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset), (config << registeroffset));

void EXTI3_IRQHandler(void)

{

HAL_GPIO_EXTI_IRQHandler(KEY1_Pin);

}

/**

* @brief This function handles EXTI line4 interrupt.

*/

void EXTI4_IRQHandler(void)

{

HAL_GPIO_EXTI_IRQHandler(KEY0_Pin);

}

你可能会疑惑为什么两个不同的线路中断函数却一样我们跳转

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)

{

/* EXTI line interrupt detected */

if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u)

{

__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);

HAL_GPIO_EXTI_Callback(GPIO_Pin);

}

}

跳转__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);函数得到下面这个函数

#define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__))

我们看这个寄存器,不难理解也就是说哪个位写1哪个位就清楚挂起位,传参为PIN脚,不同的PIN脚清除不同的位

__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{

/* Prevent unused argument(s) compilation warning */

UNUSED(GPIO_Pin);

/* NOTE: This function Should not be modified, when the callback is needed,

the HAL_GPIO_EXTI_Callback could be implemented in the user file

*/

}

weak代表弱声明的意思,可以在别的c文件再次引用

HAL_NVIC_SetPriority(EXTI3_IRQn, 2, 0);   前面的是抢占优先级 后面是响应优先级

HAL_NVIC_EnableIRQ(EXTI3_IRQn);          使能

HAL_NVIC_SetPriority(EXTI4_IRQn, 3, 0);

HAL_NVIC_EnableIRQ(EXTI4_IRQn);

跳转到定义

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

{

uint32_t prioritygroup = 0x00U;

/* Check the parameters */

assert_param(IS_NVIC_SUB_PRIORITY(SubPriority));

assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority));

prioritygroup = NVIC_GetPriorityGrouping();

NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority));

}

这些是内核的寄存器这些在coetex中文手册中(不要求掌握)(我也不会)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值