Appearance
中断
实际的介绍看固件库笔记
使用
配置分组的模式AIRCR寄存器[10:8], 使用HAL_NVIC_SetPriorityGrouping()
这个函数在HAL_Init函数里面会有设置
设置中断的优先级IPRxbit[7:4], HAL_NVIC_SetPriority()
使能中断ISERx, HAL_NVIC_EnableIRQ()
GPIO中断
- 使能GPIO时钟
- 设置GPIO的输入模式
- 使能AFIO/SYSCFG时钟
- 设置EXTI和IO的对应关系
- 设置EXTI屏蔽, 上下沿
- 设置NVIC
- 设置中断服务函数, 编写对应的函数, 清除标志位
使用HAL_GPIO_Init函数一步到位
- 使能GPIO时钟
- 使用HAL_GPIO_Init函数一步到位
- 设置中断分组HAL_NVIC_SetPriorityGrouping
- 使能中断HAL_NVIC_EnableIRQ
- 设计中断函数EXTIx_IRQHandler中断服务函数
stm32只有EXTI0-4, EXTI9_5, EXTI15_10七个中断函数
HAL库回调函数
EXTI0-15的中断处理函数放在gpio.c文件里面
c
//中断函数
void EXTI4_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(GPIO_Pin_4);
}
/**
* @brief This function handles EXTI interrupt request.
* @param GPIO_Pin: Specifies the pins connected EXTI line
* @retval None
*/
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);
}
}
/**
* @brief EXTI line detection callbacks.
* @param GPIO_Pin: Specifies the pins connected EXTI line
* @retval None
*/
__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
*/
}