一、硬件
STM32(上官二号)、震动传感器、M433无线模块、继电器、高功率喇叭、电池组
二、接线(传输原理)
震动传感器,D0接PA4(震动时输出低电平)
继电器vcc接3.3,IN接PB8(输入低电平,继电器闭合)
M433 D0接PA5,D1接PA6(按键A\B按下,D0\D1电平拉高)
三、cubeMX实现
1、先用PA4中断实现按键点亮D3_PB8:SYS选择串口→RCC配置外部晶振、clock配置时钟→PA4设置为下降沿中断,NVIC打开中断→PA8电平设置为高→命名为alert_project→toolchain/IDE配置为MDK-ARM→对代码生成.c/.h文件→生成完成
进入keil5
如果直接在中断函数里调用HAL_Delay函数,会造成系统卡死:原因,程序初始化是默认把滴答定时器的中断优先级设为最低,导致中断元很容易被打断导致卡死。解决方法——在main函数里使用HAL_NVIC_SetPriority(SysTick_IRQn,0,0);函数提高其中断优先级,并将EXTI4 的中断优先级设置比滴答定时器的中断优先级高,比如 2 。
2、添加M433控制,按键按下,电平拉高(上升沿中断),并且换为PB7连接继电器,添加mark标志位,a按键按下标志on,b按键按下标志off,在on的状态下触发震动传感器喇叭才会一直响
如果直接在中断服务函数里调用HAL_Delay函数,则会造成系统卡死。原因:程序初始化时默认把嘀嗒定时器的中断优先级设置为最低,其他中断源很容易打断它导致卡死。