目录 上一个网文实现了流水灯,《利用STM32F103C8T6最小系统板点亮流水灯 》,这个主要用到了单片机的IO可以输出高低电平的特性,程序里置1即输出高电平;程序里置0即输出低电平。
当然,GPIO除了对外可以输出高低电平以外,单片机的IO还可以当做输入使用,当与单片机的某个IO引脚相连的电压为高电平的时候,程序中读取该IO的值为逻辑“1”;当输入的电压为低电平的时候,程序中读取该IO的值为逻辑“0”。 注意: 这种模块上面一般都有一个电位器,用于调节阈值。 这种模块的输出引脚一般标识为DO,可以输出TTL信号,进而单片机可以得到两种状态,感应(达到)到目标,或者未感应(未达到)。 个别传感器模块还有一个模拟量输出引脚,一般标识为AO,比如MQ2烟雾传感器,通过其模拟信号输出引脚AO与AD芯片或者单片机的ADC引脚相连,可以获得强度值,这种方法可以不调节硬件的情况下,通过程序来控制响应阈值,更灵活。 注意: 配合外围电路,它能自动快速开启各类白炽灯、荧光灯、蜂鸣器、自动门、电风扇、烘干机和自动洗衣机等装置。 特别适用于宾馆、商场、库房及家庭的过道、走廊等场所。 实现目标: 我们将SR501的OUT引脚与核心板的PA5相连,并将PA5设置为输入;详细代码见void SR501_Init(void)函数实现; 为了控制板载LED的亮灭,需要将PC13设置为输出;详细代码见void LED_Init(void)函数实现; main.c完整代码如下: 当手靠近人体热释红外传感器时,绿灯亮;延时一定时间以后,绿灯灭。 微信公众号后台回复“SR501”,可以下载工程源码及HC-SR501人体红外热释感应模块资料 STM32单片机最小系统详解 六月份的“每月一练”活动已经开始投票了,六月份做什么,由你们决定。 六月活动明天投票就截止了哈。 活动介绍及日程安排,详见公众号底部菜单栏“每月活动”。 若觉得本次的文章对您有帮助,随手、或转发,也是对我的支持。
因为单片机的IO为TTL电平,所以输入的电压要注意电压范围,避免输入电压过高烧毁单片机IO引脚;
单片机的IO作为输出使用时,注意输出电流的能力是有限的,即一般只使用IO作为触发信号,而不是作为功率IO使用;
补充:
TTL电平的电压范围:
输出高电平>2.4V,输出低电平<0.4V
输入高电平≥2.0V,输入低电平≤0.8VGPIO输入的应用场景
人体热释红外传感器HC-SR501
电气参数
功能特点
红外线热释电传感器根据实现原理,对人体的敏感程度还和人的运动方向关系很大。红外线热释电传感器对于径向移动反应最不敏感, 而对于横切方向 (即与半径垂直的方向)移动则最为敏感。
==>所以安装不对的话,可能会出现不工作的情况,另外,根据模块实现的原理,静止的人,无法感应。
传感器只对移动或运动的人体起作用。
==>所以如果用于检测球场或者教室内是否有人的话,理论上来说,不是很准确。应用范围
硬件电路
代码实例
人体红外热释感应模块OUT引脚输出高电平(检测出有人)时,板载LED(PC13)亮,反之,LED灭。#include "stm32f10x.h" #include "delay.h" #include "usart.h" #define SR501_OUT GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5) //读取SR501返回值 #define LED PCout(13) //SR501_OUT初始化--PA5,设置成输入 void SR501_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //SR501_OUT GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure); } // 板载LED初始化--PC13 void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //使能PORTA时钟 //SR501_OUT GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); LED = 1; } int main(void) { //初始化 delay_init(); SR501_Init(); LED_Init(); while(1) { if(SR501_OUT) { LED = 0; } else { LED = 1; } delay_ms(10); } }
成果展示
资料获取
推荐阅读
STM32中精确延时函数的实现
基于STM32固件库的MDK5工程建立
修改Keil工程名称并添加其他模块文件
利用STM32F103C8T6最小系统板点亮流水灯
感兴趣的进入下面链接投票。
2020.06 “每月一练”活动开始投票了
欢迎评论中讨论,大家一起提高。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算