上海青浦做网站公司,周口网络推广哪家好,网站链接加密,长沙seo网站优化公司目录 一、中断简介 二、NVIC 1.寄存器 2.工作原理 3.优先级 4.使用NVIC 三、EXTI 1.简介 2.AFIO#xff1a;复用功能IO#xff0c;主要用于重映射和外部中断映射配置编辑 3. 中断使用 4.HAL库配置使用 一、中断简介 中断的意义#xff1a;高效处理紧急程序#xff0c;不会… 目录 一、中断简介 二、NVIC 1.寄存器 2.工作原理 3.优先级 4.使用NVIC 三、EXTI 1.简介 2.AFIO复用功能IO主要用于重映射和外部中断映射配置编辑 3. 中断使用 4.HAL库配置使用 一、中断简介 中断的意义高效处理紧急程序不会一直占用CPU资源 NVIC嵌套向量中断控制器属于内核支持256个中断16内核240外部支持256个优先级允许裁剪为16个ST的 中断向量表定义一块固定的内存以四字节对齐存放在各个中断服务函数程序的首地址定义在启动文件中 二、NVIC 1.寄存器 2.工作原理 3.优先级 优先级一般一个工程中只进行一次优先级分组就行否则可能会导致优先级混乱如果真的设置了多次那就会以最后一次设置为准 注意NVIC的函数都存放在cortex.c里面 4.使用NVIC 三、EXTI简介 EXTI外部扩展中断事件控制器F1包含20个产生事件/中断请求的边沿检测器即F1有20条EXTI线 中断进NVIC有服务函数需要CPU处理 事件不进NVIC仅用于内部硬件自动控制的如TIMDMAADC等 2.AFIO复用功能IO主要用于重映射和外部中断映射配置 3. 中断使用流程 4.HAL库配置使用步骤 四、HAL库实现 利用按键进行中断的实现由图按键是外部下拉了所以配置下拉输入然后中断触发方式可以配置为上升沿触发 与标准库不同的是这个触发方式是直接可以用GPIO结构体直接配置 回调函数是已经被库弱定义了我们直接再次定义一下就行但是不用我们去声明 #ifndef __EXTI_H
#define __EXTI_H#include ./SYSTEM/sys/sys.h
void EXTI_Init(void);#endif#include exti.hvoid EXTI_Init(void)
{//开启时钟__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_AFIO_CLK_ENABLE();//初始化结构体GPIO_InitTypeDef GPIO_Init;GPIO_Init.Pin GPIO_PIN_0;GPIO_Init.ModeGPIO_MODE_IT_RISING;//设置为上升沿触发中断GPIO_Init.Pull GPIO_PULLDOWN;//外部下拉HAL_GPIO_Init(GPIOA,GPIO_Init);GPIO_Init.Pin GPIO_PIN_13;HAL_GPIO_Init(GPIOC,GPIO_Init);HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);//优先级分组HAL_NVIC_SetPriority(EXTI0_IRQn,0, 1);//配置优先级HAL_NVIC_SetPriority(EXTI15_10_IRQn,0, 2);HAL_NVIC_EnableIRQ(EXTI0_IRQn);//使能中断HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
}void EXTI15_10_IRQHandler(void)//中断服务函数
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);//HAL库中断处理共用函数
}void EXTI0_IRQHandler()//中断服务函数
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);//HAL库中断处理共用函数
}void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)//HAL库数据处理回调函数
{if(GPIO_PinGPIO_PIN_13){if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)1)//如果按键按下{HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);//翻转电平}}if(GPIO_PinGPIO_PIN_0){if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)1){HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);}}
} #include ./SYSTEM/sys/sys.h
#include ./SYSTEM/usart/usart.h
#include ./SYSTEM/delay/delay.h
#include led.h
#include key.h
#include exti.hint main(void)
{HAL_Init(); /* 初始化HAL库 */sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */delay_init(72); /* 延时初始化 */LED_Init(); /* LED初始化 */KEY_Init();EXTI_Init();while(1){ }
}