一:国民技术的EXTI介绍
EXTl 控制器 lP 捕获中断/事件触发并将其转换为中断请求和事件脉冲。中断请求被发送到 NVIC 中断控制
器。 IP 有一个 APB 接口,通过它可以访问以下寄存器。
n 上升/下降沿触发选择寄存器
n 每个中断/事件线的专用屏蔽位寄存器
n 软件中断/事件配置寄存器
n 每个中断的中断挂起请求状态寄存器
n 时间戳选择寄存器
二、主要特点
n 支持 24 个软件中断/事件请求
n 每条输入线对应的中断/事件可独立配置触发或屏蔽
n 每条中断线都有一个独立的状态位
n 支持脉冲或挂起输入类型
n 支持三种触发事件:上升沿、下降沿或双边沿
n 唤醒退出低功耗模式
三、硬件部分
这里我选用按键触发中断处理部分,触发时候,翻转LED电平。
四、软件部分:
/* Condiv key EXTI Line to key input Pin */
GPIO_EXTI_Line_Set(KEY_INPUT_PORT_SOURCE, KEY_INPUT_PIN_SOURCE);
/* Condiv key EXTI line */
EXTI_InitStructure.EXTI_Line = KEY_INPUT_EXTI_LINE;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Peripheral_Initializes(&EXTI_InitStructure);
/* Set key input interrupt priority */
NVIC_InitStructure.NVIC_IRQChannel = KEY_INPUT_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = NVIC_SUB_PRIORITY_1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Initializes(&NVIC_InitStructure);
查看手册:按键key2在EXTI9_5_IRQHandler中被调用
int count = 0 ; //进入中断的次数,
int cycle = 0 ;
void EXTI9_5_IRQHandler(void)
{
if(RESET!= EXTI_Interrupt_Status_Get(KEY_INPUT_EXTI_LINE))
{ LedBlink(LED2_PORT, LED2_PIN);
LedBlink(LED2_PORT, LED3_PIN);
EXTI_Interrupt_Status_Clear(KEY_INPUT_EXTI_LINE);
}
}
实际效果如视频所示:
拓展使用:利用中断口可以检测编码器的输入信号
编码器介绍:
编码器(encoder)是将信号(如比特流)或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。编码器把角位移或直线位移转换成电信号,前者称为码盘,后者称为码尺。按照读出方式编码器可以分为接触式和非接触式两种;按照工作原理编码器可分为增量式和绝对式两类。增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。绝对式编码器的每一个位置对应一个确定的数字码,因此它的示值只与测量的起始和终止位置有关,而与测量的中间过程无关。
编码器实物图片:
测试视频如下:试验效果,慢慢旋转编码器,可以看到LED灯闪烁,与按键输入效果保持一致,实际测试发现,编码器每转一圈会发出200个脉冲,软件配置在下降沿检测,软件检测的数量与编码器发出保持一致,可能是手抖动的原因导致出现细微差别。
软件仿真图片:
测试视频:
全部评论