按键抖动:
在机械按键的触点闭合和断开时,都会产生抖动,为了保证系统能正确识别按键的开关,就必须对按键的抖动进行处理。
按键的抖动对于人类来说是感觉不到的,但对单片机来说,则是完全可以感应到的,而且还是一个很“漫长”的过程,因为单片机处理的速度在“微秒”级,而按键抖动的时间至少在“毫秒”级。
单片机如果在触点抖动期间检测按键的通断状态,则可能导致判断出错,即按键一次按下或释放被错误地认为是多次操作,从而引起误处理。因此,为了确保单片机对一次按键动作只作—次响应,就必须考虑如何消除按键抖动的影响。
按键读取识别异常:根本是按键触发后电平不稳定,会有波动,端口能识别。使用代码延时,让CPU忽略电平波动
方法:使用延时消抖
中断模块:
解决作业一按键的冲突(CPU循环扫描检测按键事件)
中断模块能够帮我们去检测一些内定的一些异常事件源(中断检测内定异常,则给CPU报告异常)
1.内定事件异常
2.事件监听
3.报告异常
4.优先级:仲裁
5.收到中断响应决策
6.继续任务
STM32内部有很多固定的(编号列表)让中断模块检测的中断源(产生中断异常的源头动作)
GPIO模块,…
NVIC模块,嵌套中断向量控制器,中断管理模块,NVIC管理的是全局中断,对中断优先级仲裁
EXTI模块,32中专门管理中断的模块
eg:usb插拔,以太网线插拔能对应扫描检测驱动
检测引脚电平变化:外部中断,22个外部中断,0-15是连接对应每组GPIO的0-15;
配置中断:
0.开启EXTI相关时钟RCC_ APB2PeriphClockCmd(RCC_ APB2Periph_ SYSCFG, ENABLE);
1.对应引脚使用GPIO_init();配置为输入模式
2.使用SYSCFG_ EXTILineConfig() ;选择一个引脚连接对应的一个外部中断线(EXTI0-15)
3.使用EXTI_init() ;选择模式(中断模式,事件模式(不会以中断机制处理))(上升沿,下降沿,都)
4.配置刚开启的外部中断优先级(中断管理,优先级管理)涉及:仲裁器 配置中断优先级函数NVIC_init();
优先级:
抢占优先级(0-15):第一优先
响应优先级(0-15):第二优先
两个或者两个抢占优先级一样才考虑响应优先级
按键延迟消抖代码实现:
#include <stm32f4xx.h>
void lightinit (void)//配置灯
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd</