SD测速(红外射线中断)过程记录文档

 

1、写在前面的注意事项和要点。

​        当在使用外部中断的时候stm32基本每一个io口都可以当外部中断使用,在设置中断优先级的时候有个很模糊的地方容易出错,这里标注一下。简单一句话“当使用5到9的EXIT端口的时候,共用EXTI9_5_IRQn的;使用10到15端口的EXTI时候,共用EXTI15_10_IRQn的;其它就是0到4端口单独对应EXTI0_IRQn、EXTI1_IRQn、EXTI2_IRQn、EXTI3_IRQn、EXTI4_IRQn。”

函数名用:
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
EXTI9_5_IRQHandler
EXTI15_10_IRQHandler

       ​ 设置中断线初始化时要相应IO和中断线一一对应设置,中断通道也是要分别对应初始化设置,不能像初始化GPIO口时那样同一端口的用"|"一起初始化!

2、SD红外射线测速传感器中断编程流程分析

  1. 使能AFIO时钟(如果要用到其它iO口,需要使能其对应的时钟),设置NVIC优先级组为NVIC_PRIORITYGROUP_2;

  2. 使能SD红外传感器引脚端口GPIOA时钟(用到其它引脚就使能对应的引脚端口时钟),初始化配置PA2和PA3引脚为下降沿触发中断模式并使能上拉;

  3. 配置SD红外引脚中断优先级并使能中断;

  4. 编写外部中断回调函数,为减少误差,对引脚进行消抖处理,确保SD红外传感器的红外光遮挡后执行应用功能。

3、SD红外射线测速传感器中断代码实现

HAL_MspInit函数是控制器系统级初始化,在HAL_Init函数中被调用。

SD红外传感器引脚宏定义,中断为EXTI2_IRQn,中断复位函数为SD1_EXTI_IRQHandler。

SD_GPIO_Init函数用于初始化传感器引脚,HAL_NVIC_SetPriority函数设置中断的优先级:抢占式优先级为1,响应优先级为1。

中断服务函数的存放

传感器中断,传感器的应用程序在中断回调函数中实现,这里无限循环无需执行其它确认。

HAL_GPIO_EXTI_Callback是外部中断回调函数,在成功触发外部中断后就会运行该函数,该函数有一个形参,用于说明中断引脚编号,也是通过这个参数知道哪个引脚发生了中断。

4、调试现象

通过遮挡2个传感器,令电机正反转。

猜你喜欢

转载自blog.csdn.net/zhengyshan/article/details/81987972