stm32实现电动车报警系统

stm32实现电动车报警

用到的模块图

在这里插入图片描述

模块接线图

在这里插入图片描述

STM32CubeMX配置图

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主要功能全部采用重写中断服务函数进行,main.c代码如下:

#define J_ON 1
#define J_OFF 0

//重写中断服务函数,如果检测到EXTI中断,则进入此函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
static uint8_t mark = J_OFF;//静态变量,只初始化一次

switch(GPIO_Pin){
	case GPIO_PIN_4:
		//如果检测到PA4被拉低(震动传感器发送低电平信号),同时标志位为ON(即警报模式被打开)
		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4) == GPIO_PIN_RESET && mark == J_ON){
			//则将PB7拉低(喇叭一直响),表示有人偷车
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);
		
		}
		 break;
	
	case GPIO_PIN_5:	
		//如果检测到PA5被拉高(按键A被按下),开启警报模式
		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5) == GPIO_PIN_SET){
			//则将PB7拉低(喇叭1秒),表示进入到警报模式
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);
			HAL_Delay(1000);//延时1s
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET);
			//同时将标志位设置为ON
			mark = J_ON;
		}
		break;
		
	case GPIO_PIN_6:
		//如果检测到PA6被拉高(按键B被按下),解除警报模式
		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6) == GPIO_PIN_SET){
			//则将PB7拉低(喇叭响0.5秒),解除警报模式
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);
			HAL_Delay(500);//延时0.5s
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET);
			//同时将标志位设置为OFF
			mark = J_OFF;
		}
		break;
	
	}

}

int main(void)
{

HAL_Init();
SystemClock_Config();
HAL_NVIC_SetPriority(SysTick_IRQn,0,0);//提高滴答定时器的中断优先级(提升至0)
MX_GPIO_Init();
while (1);
}

注意:

记得提高滴答计时器的中断优先级,不然在中断中用到HAL_Delay函数时,程序会卡死在那里,还有就是记得将mark设为静态变量,不然每次进入中断服务函数都会先将mark设为J_OFF,这会导致你开启警报模式且震动传感器感受到震动时喇叭也不会响

成果图:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值