STM32开发——电动车报警装置

1.项目简介

1.1项目需求

点击遥控器 A 按键,系统进入警戒模式,一旦检测到震动(小偷偷车),则喇叭发出声响报警,
吓退小偷。
点击遥控器 B 按键,系统退出警戒模式,再怎么摇晃系统都不会报警,否则系统一直发出尖叫,
让车主尴尬。

硬件清单

  1. 振动传感器
  2. 继电器
  3. 高功率喇叭
  4. 433M无线接收发射模块
  5. 杜邦线

2 振动传感器介绍及实战

单片机供电VCC GND接单片机
产品不震动,输出高电平,模块上的DO口
产品震动,输出低电平,绿色指示灯亮
AO口不用

编程实现
需求:当振动传感器接收到振动信号时,使用中断方式点亮LED1。

重新中断服务函数

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	//如果中断来源是PA4  PA4为低进入了中断
	//led1亮500ms后熄灭
	if(GPIO_Pin==GPIO_PIN_4){
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8, GPIO_PIN_RESET);
		HAL_Delay(1000);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8, GPIO_PIN_SET);
	}
}

如果直接在中断服务函数里调用 HAL_Delay 函数,则会造成系统卡死。
原因:程序初始化时默认把滴答定时器的中断优先级设为最低,其它中断源很容易打断它导致卡
死。
解决:在 main 函数里使用以下函数提高滴答定时器的中断优先级(提升至0),将外部中断优先级设置为1。

HAL_NVIC_SetPriority(SysTick_IRQn,0,0);

CubeMX厉害的是改变配置后,生成代码,而自己写的代码不会被覆盖。

3.项目设计及实现

项目设计
//如果检测到PA4被拉低(小偷偷车),并且警报模式打开
    //则将PB7拉低,继电器通电,喇叭一直响
// 如果检测到PA5被拉高(按键A按下),设定为开启警报模式
    // 则将PB7拉低(喇叭响),2秒后恢复电平(喇叭不响),表示进入警报模式
    // 同时将标志位设置为ON
// 如果检测到PA6被拉高(按键B按下),设定为关闭警报模式
    // 则将PB7拉低(喇叭响),1秒后恢复电平(喇叭不响),表示关闭警报模式
    // 同时将标志位设置为OFF

  • 振动时产生低电平
  • 433M接受时产生高电平
  • 继电器需要低电平

 PA4、PA5、PA6介进入外部中断

中断函数代码。

	void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
	{
		static char viberator_flag=turn_off;
		switch(GPIO_Pin){
			case GPIO_PIN_4:
				if(viberator_flag==turn_on){
					HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7,GPIO_PIN_RESET);
					HAL_Delay(2000);
					HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7,GPIO_PIN_SET);
				}
				break;
			case GPIO_PIN_5:
				viberator_flag=turn_on;
				HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8,GPIO_PIN_RESET);
				break;
			case GPIO_PIN_6:
				viberator_flag=turn_off;
				HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8,GPIO_PIN_SET);
				HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7,GPIO_PIN_SET);
				break;
		
		}
	}

这里需要注意:
1.设置定时中断级别为(0,2)高于外部中断4
2.设置外部中断5、6级别为(0,0)可以随时打断定时器中断——防止一直叫

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值