STM32学习笔记(四)震动传感器、继电器

文章目录

  • 一、震动传感器介绍
  • 二、编程实现
  • 三、 继电器介绍

一、震动传感器介绍

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

STM32学习笔记(四)震动传感器、继电器_第1张图片
与stm32接线
STM32学习笔记(四)震动传感器、继电器_第2张图片

二、编程实现

需求:当振动传感器接收到振动信号时,使用中断方式点亮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口即可

STM32学习笔记(四)震动传感器、继电器_第3张图片
STM32学习笔记(四)震动传感器、继电器_第4张图片

你可能感兴趣的:(STM32,stm32,单片机,学习)