一、震动传感器介绍
- 单片机供电VCC GND接单片机
产品不震动,输出高电平,模块上的AO口
产品震动,输出低电平,绿色指示灯亮
AO口不用
与stm32接线
二、编程实现
需求:当振动传感器接收到振动信号时,使用中断方式点亮LED1
//重写中断服务函数,如果检测到EXTI中断请求,则进入此函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
//一根中断线上接有多个中断源,判断中断请求是否来自PA4
if(GPIO_Pin == GPIO_PIN_4)
{
//如果检测到PA4被拉低
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) == GPIO_PIN_RESET)
{
//则点亮LED1
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
//延时1秒
HAL_Delay(1000);
//关闭LED1
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
}else
{
//未检测到PA4被拉低,则关闭LED1
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
}
}
}
如果直接在中断服务函数里调用 HAL_Delay 函数,则会造成系统卡死
原因:程序初始化时默认把滴答定时器的中断优先级设为最低,其它中断源很容易打断它导致卡
死。
解决:在 main 函数里使用以下函数提高滴答定时器的中断优先级(提升至0):
HAL_NVIC_SetPriority(SysTick_IRQn,0,0);
并且将 EXTI4 的中断优先级设置比滴答定时器的中断优先级高,比如 2
三、 继电器介绍
- 继电器工作原理:
单片机供电VCC GND接单片机,VCC需要接3.3V,5V不行!
最大负载电路交流250V/10A,直流30V/10A
引脚 IN 接收到低电平时,开关闭合
接线方式:
VCC:接3.3V(不可以接5V,接5V会工作异常)
GND:接GND
IN:接任何一个通用GPIO口即可