stm32基础项目——智能小车(红外避障)

本章学习目标:
1、必须理解掌握外部中断的机制
2、了解博客中提到的基本概念,如上升沿、下降沿、输入输出模式
前言:
小车的避障功能可以通过红外或者超声波模块来实现,这里先讲讲使用红外对管来实现,超声波的实现涉及到定时器的应用,我们放在后面讲解。
红外对管图片:
在这里插入图片描述
器件有三个引脚,VCC和GND就不说了,那个OUT就是输出信号用的,说是信号,其实就是高低电平两种状态(高电平为3.3V,低电平为0V;高电平读出来就是“1”,低电平读出来就是“0”)。
这个器件上电以后,OUT引脚默认输出高电平,当检测到障碍物时OUT引脚会输出低电平,因此会有一个高电平到低电平的变化,我们称之为“下降沿”。我们可以把stm32设置为“下降沿”触发外部中断这样一种机制,因此,当红外对管检测到障碍物时,stm32会被触发中断,从而去执行我们事先编写好的一段程序。
(中断的相关概念和知识,我会尽快整理出来,学弟学妹们现在只要能理解这套机制就行。)
一、原理小讲
红外模块和stm32的连线如下
在这里插入图片描述
只要三根线,VCC接开发板的3.3V,GND就接GND,红外对管的OUT找个普通IO引脚就可以,我接在了PB0引脚。

避障流程图
在这里插入图片描述
流程图中标蓝的两块地方是红外避障程序设计的重点。
“外部中断触发”我们在前面已经说明过了:红外对管检测到障碍物时OUT引脚会出现一个“下降沿”信号,当我们把与OUT相连的引脚设置为“下降沿”触发中断时,stm32就会检测到这个中断,从而去执行事先编写好的“中断处理程序”。
二、实践
那我们现在要做两件事:配置与OUT相连的stm32引脚为“下降沿”触发中断、编写中断处理函数。

1、配置“下降沿”触发中断
代码贴出如下:

RCC->APB2ENR |= 1<<3;    //使能PORTB时钟	   	   	 
GPIOB->CRL   &= 0xFFFFFFF0; 
GPIOB->CRL   |= 0x00000008;//PB0 输入模式

Ex_NVIC_Config(GPIO_B,0,FTIR); 		//配置为下降沿触发
MY_NVIC_Init(2,2,EXTI0_IRQn,2);    	//配置中断优先级为:抢占2,响应2,组2   	 

前三行是将于OUT相连的引脚配置为输入模式,有关GPIO的内容大家如果有需要可以在公众号后台留言,需要的人多的话我会在公众号出一篇详细的图文。
后面两行就是配置“下降沿”的代码了,Ex_NVIC_Config(GPIO_B,0,FTIR); 就是把PB0引脚配置为“下降沿”触发中断的模式,FTIR是个宏定义,其实就是1。这个函数接口是原子哥封装好的,其实底层还是去操作GPIO相关的寄存器,就和我们上面三行的代码类似。
MY_NVIC_Init(2,2,EXTI0_IRQn,2); 这行代码是为中断设置优先级,因为中断之间是可以被抢占、打断的,这部分内容会专门开辟章节进行讲解,因为涉及到中断控制器、中断向量表等相关知识,对入门的同学来说可能有点吃力。

2、编写中断处理函数
你现在可以这样理解:当发生中断时,stm32硬件自己就会执行一个函数,而且这个函数的名称、返回值、入参都已经定死了,唯一没有定死的就是函数内需要执行的操作。
因此,我们要做的就是找到这个函数,然后在函数里填上我们要实现的功能,比如“让小车停下来”或者“让小车左转”等等。
这个函数的名称就是EXTI0_IRQHandler,至于为什么是这样,等后面学习了中断向量表的概念再展开。
目前,我们在EXTI0_IRQHandler中执行的操作就是打印语句,等电机驱动讲完后就会加上相关业务代码。

void EXTI0_IRQHandler(void)
{
	printf("warning!warning!warning!\r\n");
	EXTI->PR=1<<0;  //清除LINE0上的中断标志位  
}

就是说,当红外对管检测到障碍物时,我们就打印“warning!warning!warning!”。
EXTI->PR=1<<0;这句是清中断标志位,如果不清掉就会一直进中断处理函数。
这个打印出来的值要从串口助手上查看,有关串口的知识后续展开,先学会用就行。

学完这部分,你可以在中断处理函数中做一个“点亮led灯”的操作,一定要自己动手实践起来!绝知此事要躬行!
实验现象和相关讲解我录了个视频,放在了公众号“游侠嵌入式”,完整的工程代码也放在了公众号,回复关键字“外部中断”即可获取。代码级的讲解也会陆续放在公众号上。
下一篇:智能小车——PWM电机驱动
在这里插入图片描述

这里贴两张实验图片:
未检测到障碍物,不触发中断、左灯不亮
在这里插入图片描述
检测到障碍物,触发中断、左灯亮,并且串口助手打印信息:
在这里插入图片描述
三、小结
其实有关中断这部分的内容可学习的太多了,面试也是会常问的,比如一个最经典的问题“中断函数有没有返回值和入参?”,但也不要太心急了,所谓不积跬步无以至千里,慢慢来,你行的。

  • 29
    点赞
  • 256
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值