震动传感器是作为一个输入的外设,当发生震动时,DO引脚会向单片机引脚发送低电平,当其不震动时,持续向单片机输出高电平。在STM32中可以将其发送的低电平作为一个中断信号。触发c程序中的callback函数。例如
/*重写中断服务函数,如果监测到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)
{
//则点亮LED
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使用的是滴答定时器,容易被其他中断源打断,所有有时要在主函数中加上
HAL_NVIC_SetPriority(SysTick_IRQn,0,0);将优先级设置为最高,并将其他中断源优先级改为低级。