1. 项目概述:EXTI中断在传感计数中的应用
在工业自动化和消费电子领域,精确计数是一个基础但关键的功能需求。使用STM32的EXTI(External Interrupt)外部中断功能实现挡光传感计数和旋转编码计数,是嵌入式开发中的经典应用场景。这种方案相比轮询方式具有响应速度快、CPU占用率低的优势,特别适合需要实时响应的计数场景。
挡光传感通常采用红外对射式传感器,当物体通过时会遮挡光线,导致传感器输出电平跳变。旋转编码器则通过光栅或磁栅产生脉冲信号,用于测量转速或位置。这两种场景都需要快速捕获信号边沿,这正是EXTI中断的专长所在。
2. 硬件设计与选型要点
2.1 传感器选型与接口设计
挡光传感推荐使用槽型光电开关(如EE-SX670),它具有响应速度快(μs级)、寿命长的特点。旋转编码器建议选择增量式编码器,分辨率根据需求选择200-600PPR(脉冲每转)的型号。硬件连接时需注意:
- 传感器输出信号需接入STM32的EXTI支持引脚(参考芯片数据手册)
- 长距离传输时建议增加RC滤波电路(典型值:R=1kΩ,C=0.1μF)
- 编码器信号建议使用双通道(A/B相)接入,可实现方向判断
2.2 STM32外设配置
EXTI中断在STM32中有两种触发方式:
- 上升沿触发(适合默认低电平的传感器)
- 下降沿触发(适合默认高电平的传感器)
- 双边沿触发(适合需要捕获每个边沿的场景)
对于旋转编码计数,推荐使用定时器的编码器模式(如TIMx_ETR),这种方式比EXTI中断更高效。但当定时器资源紧张时,EXTI仍然是可靠的选择。
3. 软件实现详解
3.1 开发环境搭建
推荐使用STM32CubeIDE或Keil MDK开发环境,配合STM32CubeMX进行外设初始化。以下是使用HAL库的基本配置流程:
- 在CubeMX中启用EXTI对应的GPIO引脚
- 配置中断优先级(NVIC)
- 生成代码框架
- 实现中断回调函数
c复制// EXTI回调函数示例
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == SENSOR_PIN) {
count++; // 全
