文章目录
前言
一位学习STM32的小白~ 有错误请评论区或私信指出~
一、继电器原理
1.简单使用说明
继电器就相当一个开关只不过这个开关使用电信号控制,控制信号又IN口控制
2.接口说明
1、VCC:接电源正极(电压按继电器要求,有5V、9V、12v和24v选择)
2、GND:接电源负极
3、IN:可以高或低电平控制继电器吸合
输出部分
1、NO:继电器常开接口,继电器吸合前悬空,在控制信号作用下,继电器可以吸合与COM行程短接。通俗来说,就是未通电状态下,是断开的,通电后在电磁线圈的作用下(吸合)处于闭合状态。
2、COM:继电器公用接口
3、NC:继电器常闭接口,没有控制信号作用下,继电器吸合前与COM短接,吸合后悬空,即通常下NC与COM短接。通俗来说,就是即未通电状态下,NC是闭合的,通电后在电磁线圈的作用下(吸合)处于断开状态。
3.代码实现
c
//继电器IO初始化
#include "relay.h"
#include "stm32f10x.h" // Device header
void Relay_Init(void)
{
GPIO_InitTypeDef Relay_InItStruvture;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
Relay_InItStruvture.GPIO_Mode = GPIO_Mode_Out_OD;
Relay_InItStruvture.GPIO_Pin = GPIO_Pin_3;
Relay_InItStruvture.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&Relay_InItStruvture);
}
c
#include "stm32f10x.h"
#include "main.h"
#include "LED.h"
#include "Relay.h"
void delay_ms(uint32_t xms);
int main()
{
Relay_Init();
while(1)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_3);
//在低电平期间驱动公共端口亮灯
delay_ms(1000);
GPIO_SetBits(GPIOA,GPIO_Pin_3);
}
}
void delay_ms(uint32_t xms)
{
uint32_t i;
while(xms--)
{
while(i--);
{
i = 12000;
}
}
}
二、震动传感器原理
1.工作原理
传感器内部有两个导针,在传感器没有震动时,震动轴静止,导针A和导针B处于导通状态,平时任何角度开关都是接通状态,受到振动或移动时,震动轴会产生移动或振动,从而导致导针A和B会出现断开。(DO口产生电平变化,单片机接收这个电平信号,控制继电器开灯)
2.代码展示
c
//震动传感器IO初始化
#include "shake.h"
#include "stm32f10x.h" // Device header
void shake_Init(void)
{
GPIO_InitTypeDef shake_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
shake_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
shake_InitStructure.GPIO_Pin = GPIO_Pin_5;
shake_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&shake_InitStructure);
}
三、项目搭建
1.流程构建
代码展示
c
#include "stm32f10x.h"
#include "main.h"
#include "Relay.h"
#include "shake.h"
void delay_ms(uint32_t xms);
int main()
{
Relay_Init();
shake_Init();
while(1)
{
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5) == 0)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_3);
delay_ms(1000);
}
GPIO_SetBits(GPIOA,GPIO_Pin_3);
}
}
void delay_ms(uint32_t xms)
{
uint32_t i;
while(xms--)
{
while(i--);
{
i = 12000;
}
}
}
外部中断实现:
c
void EXTI1_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line1) != RESET)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_3);
delay_ms(1000);
GPIO_SetBits(GPIOA,GPIO_Pin_3);
}
EXTI_ClearITPendingBit(EXTI_Line1);
}
总结
1.继电器想当一个开关有单片机操控IO口电平操控继电器所控制电器的开关
2.震动传感器静置是导通的输出DO口高电平,震动时导针有一瞬间断开输出低电平产生震动效果.