stm32的简易小项目之震动感应灯

article/2025/8/14 19:12:43

文章目录

  • 一、原理
  • 二、硬件
  • 三、接口说明
  • 四、源代码
  • 五、中断配置
  • 六、完整代码

一、原理

需要一个震动感应器来感应是否产生震动,然后把这个震动感应器作为GPIO输入,单片机来读取这个输入是否产生震动。如果产生震动,我们就可以把一个GPIO作为输出口,将它连接到一个灯上,然后输出高低电平。
后续根据情况再优化这个设计。

二、硬件

1、一个震动感应器
2、一个单片机
3、继电器
4、led灯

三、接口说明

在这里插入图片描述

我用的霸道的板子,这里我把PB6作为输入,PB7作为输出。

查找PB6、PB7挂载的总线:

在这里插入图片描述

四、源代码

bsp_ganying.h

#ifndef _BSP_GANYING_H
#define	_BSP_GANYING_H#include "stm32f10x.h"void lightIn(void);
void lightOut(void);
#define GPIO_LIGHT_CLK 			    RCC_APB2Periph_GPIOB
#define GPIO_IN_RORT				GPIOB
#define GPIO_OUT_RORT				GPIOB
#define GPIO_LIGHT_PIN_IN	 	   GPIO_Pin_6
#define GPIO_LIGHT_PIN_OUT	    GPIO_Pin_7#endif /*_BSP_GANYING_H*/

bsp_ganying.c

#include "bsp_ganying.h"void lightIn(void)
{GPIO_InitTypeDef gpioConfig_IN;RCC_APB2PeriphClockCmd(GPIO_LIGHT_CLK, ENABLE);gpioConfig_IN.GPIO_Pin		=	GPIO_LIGHT_PIN_IN;gpioConfig_IN.GPIO_Mode 	= GPIO_Mode_IN_FLOATING;GPIO_Init(GPIO_IN_RORT, &gpioConfig_IN);
}
void lightOut(void)
{GPIO_InitTypeDef gpioConfig_OUT;RCC_APB2PeriphClockCmd(GPIO_LIGHT_CLK,ENABLE);gpioConfig_OUT.GPIO_Pin		=	GPIO_LIGHT_PIN_OUT;gpioConfig_OUT.GPIO_Mode	= GPIO_Mode_Out_PP;gpioConfig_OUT.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIO_OUT_RORT, &gpioConfig_OUT);
}

main.c

#include "bsp_ganying.h"
#include "stm32f10x.h"void delay(uint16_t nCount)
{uint16_t nTime = 0;while(nCount--){nTime= 12000;while(nTime--);}
}
int main(void)
{lightIn();lightOut();GPIO_SetBits(GPIO_OUT_RORT,GPIO_LIGHT_PIN_OUT);while(1){if(GPIO_ReadInputDataBit(GPIO_IN_RORT, GPIO_LIGHT_PIN_IN) == 0){GPIO_ResetBits(GPIO_OUT_RORT,GPIO_LIGHT_PIN_OUT);delay(1000);GPIO_SetBits(GPIO_OUT_RORT,GPIO_LIGHT_PIN_OUT);}else{GPIO_SetBits(GPIO_OUT_RORT,GPIO_LIGHT_PIN_OUT);}}
}

这样就能看到一个现象,我们下载到班子以后。当我们触碰这个震动感应器的时候,我们作为输出的GPIO口连接的灯,就会亮一秒,然后熄灭,我们继续触碰这个震动感应器,又会亮一秒。
但是这个程序是不是while有一大堆循环,比较消耗cpu,所以我们可以优化改为中断模式,在产生中断的时候进行输出。

五、中断配置

因为我们GPIOB使我们的输入也是我们的输出端口,所以我们配置外部中断的时候要选择复用端口。
因为之前说过,5-9共用一个EXTI,所以这里要注意一下。
bsp_exti.h

#ifndef _BSP_GANYING_H
#define	_BSP_GANYING_H
#include "stm32f10x.h"
#include "bsp_ganying.h"#define GPIO_IN_RORT					GPIOB
#define GPIO_LIGHT_CLK 				RCC_APB2Periph_GPIOB
#define GPIO_LIGHT_PIN_IN	 		GPIO_Pin_6void extiConfig(void);#endif /*_BSP_GANYING_H*/

bsp_exti.c

#include "bsp_exti.h"
#include "bsp_ganying.h"void extiConfig()
{EXTI_InitTypeDef extiConfig;GPIO_InitTypeDef gpioConfig_IN;NVIC_InitTypeDef nvicConfig;RCC_APB2PeriphClockCmd(GPIO_LIGHT_CLK, ENABLE);//选择复用端口,因GPIOB是输入也是输出RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource6);//配置GPIO	gpioConfig_IN.GPIO_Pin		=	GPIO_LIGHT_PIN_IN;gpioConfig_IN.GPIO_Mode 	= GPIO_Mode_IN_FLOATING;GPIO_Init(GPIO_IN_RORT, &gpioConfig_IN);//配置EXTIextiConfig.EXTI_Line 		= EXTI_Line6;extiConfig.EXTI_Mode 		= EXTI_Mode_Interrupt;extiConfig.EXTI_Trigger 	=	EXTI_Trigger_Falling;extiConfig.EXTI_LineCmd 	= ENABLE;EXTI_Init(&extiConfig);//配置嵌套NVIC函数NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //优先级组nvicConfig.NVIC_IRQChannel = EXTI9_5_IRQn;				 //配置中断源,共用5-9nvicConfig.NVIC_IRQChannelPreemptionPriority = 1;nvicConfig.NVIC_IRQChannelSubPriority = 1;nvicConfig.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&nvicConfig);	
}

配置中断函数

void EXTI9_5_IRQHandler(void)
{/*确保是否产生了 EXTI Line0 中断*/if( EXTI_GetITStatus(EXTI_Line6) != RESET){GPIO_ResetBits(GPIO_OUT_RORT,GPIO_LIGHT_PIN_OUT);delay(1000);GPIO_SetBits(GPIO_OUT_RORT,GPIO_LIGHT_PIN_OUT);}/*清除中断标志*/EXTI_ClearITPendingBit(EXTI_Line6);
}

六、完整代码

链接:https://pan.baidu.com/s/1PIHp4xLzLwlMv4zkvLP_kA 
提取码:e4lr

项目主要是让自己熟悉调库的步骤,中断的基本原理,和一些坑。


http://chatgpt.dhexx.cn/article/IlsbfpUa.shtml

相关文章

【传感器大赏】压电薄膜震动传感器

Grove-Piezo Vibration Sensor Grove - Piezo Vibration传感器适用于弹性,振动,冲击和触感的测量。该模块基于PZT薄膜传感器LDT0-028。当传感器来回移动时,其中的电压比较器将产生一定的电压。宽动态范围(0.1Hz~180Hz)…

振动传感器应用电路

传感器采用“801S振动传感器”,该传感器性能比较好。极宽的震动侦测范围.无方向限制。可以用用于汽车/摩托车防盜报警器/器, 電子鎖.安防系列产品等。 原理图如下:(Multisim 10.1仿真通过,实际焊接测试也通过) 经过测试…

震动传感器使用

震动传感器上有四个引脚,一个VCC,一个GND,一个DO,一个AO。我们使用到的是VCC,GND,DO。 VCC与GND不用多说,接电源和接地用的。使用杜邦线连接 VCC-5v,GND-GND,DO-P3.3。这时已经将c51单片机和传感器连接好了。下面可以输入代码了: 使用单片机上…

Arduino压电震动传感器

Arduino压电震动传感器 读取震动传感器的模拟值,串口输出;按压震动传感器控制LED灯亮灭。 外观 接线 Arduino震动传感器5V5VGNDGNDA0A02D0 读取模拟值时,D0不用接。A0模拟信号输出,D0TTL电平输出。 串口读取模拟值 void set…

振动传感器介绍

1. 工作电压 &#xff1a;3.3V或5V2. 工作电流 &#xff1a;<1mA3. 工作温度范围&#xff1a;&#xff0d;10℃&#xff5e;&#xff0b;70℃4. 接口类型&#xff1a;模拟信号输出5. 尺寸大小&#xff1a;30mm x 23mm6. 重量大小&#xff1a;5g7.引脚定义&#xff1a;S信号输…

震动传感器应用

1.震动传感器模块外部照片 2.新建shake工程 ①在USER中新建shake文件夹&#xff0c;并且在其中新建shake.c、shake.h文件 ②在Keil5中添加shake.c&#xff08;直接添加&#xff09;&#xff0c;shake.h&#xff08;现在shake.c中#include “shake.h”然后编译后自动添加了sha…

无线震动传感器

无线振动传感器是一种能够检测物体振动情况的设备&#xff0c;它可以通过无线网络与其他设备进行通信&#xff0c;实现物联网系统的数据采集和远程监控。无线振动传感器的工作原理是基于振动传感器的原理。当物体发生振动时&#xff0c;振动传感器会产生电信号&#xff0c;传感…

震动传感器(模拟和数字)

index 数字震动传感器简介产品参数连线图示例代码结果 震动传感器2用途&#xff1a;模块特色&#xff1a;模块使用说明&#xff1a;实验器材&#xff1a;Arduino 168P 基础套件 互动媒体实验目的&#xff1a;实验电路&#xff1a;实验原理&#xff1a;实验步骤&#xff1a;实验…

计算机网络的类别

计算机网络的类别 1. 按覆盖的地理范围分 1.1 互联网(internet) 互联网又称网际网络&#xff0c;或音译因特网(Internet)、英特网&#xff0c;互联网始于1969年美国的阿帕网。是网络与网络之间所串连成的庞大网络&#xff0c;这些网络以一组通用的协议相连&#xff0c;形成逻…

网络类型与网络拓扑

网络类型与网络拓扑 局域网、城域网、广域网 按照地理覆盖范围来划分、网络可以分为局域网&#xff08;Local Area Network&#xff09;、城域网&#xff08;Metropolitan Area Network&#xff09;和广域网&#xff08;Wide Area Network&#xff09;。 局域网&#xff08;…

计算机网络分类

概述&#xff1a; 什麽是网络&#xff1f; 网络就是在一定区域内将两台或两台以上的计算机以一定的方式连接起来&#xff0c;起到共享文件、程序、数据的作用。 网络的分类&#xff1a; 1.按照覆盖范围分&#xff1a; 局域网&#xff08;LAN-Local Area Network&#xff09…

网络连接类型区分

说明&#xff1a;不定期更新 日期&#xff1a;2019-12-24 参考&#xff1a;已在文章中标注 网络连接类型区分&#xff08;e.g. LAN, WAN) 网络分类 有线连接网络&#xff1a;WAN(宽带) LAN(~以太网) ADSL(电话线) 拨号上网 无线连接网络: WLAN, Bluetooth, 4G 虚拟专用网络&a…

计算机网络-网络类别[#1]

文章目录 前言基础概念网络类别作用范围使用者分类拓扑结构交换技术 前言 作为一名CRUD的业务工程师&#xff0c;在实际开发中&#xff0c;我们接触的最多最近却最容易不受重视的技术可能就是计算机网络了&#xff0c;通常我们深陷于业务需求->开发的重复劳动中&#xff0c…

各种分类网络

20问--各种网络类 LeNet各层参数1、Input层2、C1卷积层3、S2池化层&#xff08;下采样层&#xff09;4、C3卷积层5、S4池化层&#xff08;下采样层&#xff09;6、C5卷积层7、F6全连接层8、Output层-全连接层 AlexNet网络亮点&#xff1a;Alexnet数据增强操作&#xff1a;局部相…

什么是计算机网络网络?网络分类,网络参考模型,网络拓扑分类,网络性能指标。

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「专栏简介」&#xff1a;此文章已录入专栏《计算机网络零基础快速入门》 学习目标 了解什么是网络&#xff0c;有哪几种网络&#xff1f;了…

计算机网络基础 — 网络的类型

目录 文章目录 目录局域网(LAN)城域网(MAN)广域网(WAN)互联网(Internet)万维网(WWW)局域网(LAN) LAN(Local Area Network,本地局域网),使用集线器(Hub)或交换机(Switch)等设备连接起来的计算机处于一个 LAN。一个 LAN 表示一个广播域,LAN 中所有成员都会…

网络的分类(计算机网络)

目录 ​编辑 1&#xff0e;按网络的拓扑结构分类 2&#xff0e;按服务方式分类 1&#xff0e;按网络的拓扑结构分类 网络的拓扑结构是指网络中通信线路和站点&#xff08;计算机或设备&#xff09;的几何排列形式。 ⑴ 星型网络&#xff1a; 各站点通过点到点的链路与中心…

【网络类型】

网络类型 网络类型—根据数据链路层所使用的协议及规则来进行划分 P2P网络 — 点到点网络 MA网络 — 多点接入网络 — BMA 广播型多点接入网络 — NBMA 非广播型多点接入 数据链路层协议 以太网协议 ---- 封装数据帧&#xff0c;需要借助源MAC地址和目标MAC地址 &#xff…

网络类型详解

网络类型详解 网络类型分类二层封装技术1、以太网2、HDLC -高级链路控制协议3、PPP -- 点到点协议4、GRE——通用路由封装5、MGRE 网络类型分类 网络类型包括: 1、 点到点 –在一个网段中&#xff0c;仅允许存在两个节点 2、 MA – 多路访问 在一个网段中节点的数量不做限制 1…

什么是网络,网络类型,网络结构

什么是网络&#xff0c;网络类型&#xff0c;网络结构 1&#xff0c;什么是网络 网络有很多种形式&#xff1a;局域网&#xff08;LAN&#xff09;&#xff0c;广域网(WAN)&#xff0c;城域网(MAN),园区网(CAN)&#xff0c;以太网&#xff0c;令牌环网&#xff0c;光纤分布式数…