目录
实验目的:利用外部中断控制LED灯的亮灭,进行翻转
实验平台:正点原子精英板
一、NVIC与EXTI
NVIC 即嵌套向量中断控制器,全称 Nested vectored interrupt controller。具有所有中断的总裁权。
EXTI 即是外部中断和事件控制器,它是由 20 个产生事件/中断请求的边沿检测器组成。每
一条输入线都可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或
者双边沿都触发)。每个输入线都可以独立地被屏蔽。挂起寄存器保持着状态线的中断请求。
换而言之,中断的来源除了外部之外,大部分来自内部,比如定时器、串口中断等,总结如下图:
二、HAL库的配置
1.时钟的配置
和前边实验一样,不再重复。
2.GPIO的配置
按键是PE4,所以将按键0复用为外部中断源,来触发中断。
有下图可知,将PE4配置为外部下降沿触发,上拉。
3.NVIC配置
如下图即可,设置为分组2,这样抢占优先级和响应优先级个数均匀,大多数如此选择。
抢占优先级高的,可以打断抢占优先级低的先执行;
抢占优先级相同,响应优先级高的先执行,若已经有低响应优先级的正在执行,则无法打断;
若两个优先级都相等,自然优先级高的先执行。
这里的抢占优先级和响应优先级随便设置即可,只有一个中断。
三、代码编写
HAL库配置完成后,用户只需要自己重定义反馈函数,在里面实现功能即可,中断服务函数以及在it.c里面调用(包括中断标志位清零的操作也已经完成)。
在gpio.c的用户自定义代码区编写反馈函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == KEY0_Pin)
{
if(HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin)==0)
{
HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
}
}
}
欢迎大家交流与指针