【stm32简单外设篇】- HC-SR501 / 人体红外被动红外传感器

一、适用场景

适用场景:人体/运动检测(入侵报警、走廊/楼道自动照明、智能家居存在检测、节能灯控、触发录像/抓拍、嵌入式低功耗唤醒实验)。

二、器材清单

HC-SR501 PIR 模块 ×1

stm32f103(或其它 STM32)开发板 ×1

若干杜邦线(公对母)×1组

5V 稳压电源(若模块标注 5V)×1(注意部分模块可 3.3V 工作)

三、工作原理(要点)

PIR(被动红外)探测:传感器通过焦平面上的热释电探测元件感知环境红外辐射的瞬时变化(如人体移动引起的红外对比变化),模块内部放大并经过比较器/整形输出高电平脉冲表示检测到"运动/人体通过"。

输出逻辑:模块在检测到活动时 DATA 输出高电平(且保持 TIME 设定的大约 5s--300s 之间);若选择非重复触发或短触发模式,输出可能只在第一次检测到活动时产生脉冲。输出为 TTL 级别(高电平约接近 VCC),不同模块在 5V/3.3V 下表现不同,接入 MCU 前请确认电压兼容性或使用分压/电平转换。

四、接线示意
VCC → +5V

GND → GND

标准库

PA1 →out

HAL库

PA1 →out

五、示例代码

标准库

cpp 复制代码
#include "stm32f10x.h"
#include "stdio.h"
#include "bsp_SysTick.h"
#include "bsp_usart.h"


void gpio_init()
{
	GPIO_InitTypeDef PA;
	
	//使能时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

	
	PA.GPIO_Pin = GPIO_Pin_1;
//	PA.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	PA.GPIO_Mode = GPIO_Mode_IPD;
	GPIO_Init(GPIOA,&PA);
}


int main()
{
	USART_Config();
	SysTick_Init();
	gpio_init();
	while(1)
	{
		if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1) == SET)
		{
			Usart_SendString(USART1,"come on\n");
		}else
		{
			Usart_SendString(USART1,"leave\n");
		}
		Delay_us(1000000);
	}
//	return 0;
}

HAL库

cpp 复制代码
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == 1)
			HAL_UART_Transmit(&huart1,"有人路过\r\n", strlen("有人路过\r\n"), HAL_MAX_DELAY);
		else
			HAL_UART_Transmit(&huart1,"无人路过\r\n", strlen("无人路过\r\n"), HAL_MAX_DELAY);
		HAL_Delay(1000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

六、讲解视频

https://www.bilibili.com/video/BV1Km1LBiEHi/?spm_id_from=333.1387.upload.video_card.click&vd_source=f7dfe1b14f260b9cc3a146d2dbfd0719

摘要:本文介绍了如何在 STM32 上使用 EC11 增量式旋转编码器(带按键):适用场景、器材清单、正交编码工作原理、接线方式,以及推荐的 TIM 硬件编码器模式与通用的 EXTI+状态机软件解码实现。提供了按键去抖与短/长按判定示例,并列出实战注意点(去抖、计数器回绕、分辨率选择与安装细节),适合用于嵌入式 UI 与参数控制场景。

相关推荐
智者知已应修善业12 分钟前
【编写函数求表达式的值】2024-4-3
c语言·c++·经验分享·笔记·算法
π同学21 分钟前
基于RT-Thread的STM32开发第十一讲——编码器模式
stm32·rt_thread·双相编码器
HABuo32 分钟前
【Linux进程(四)】进程切换&环境变量深入剖析
linux·运维·服务器·c语言·c++·ubuntu·centos
码农小韩2 小时前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习
济6173 小时前
嵌入式C语言(第一期)
c语言·开发语言
逑之3 小时前
C语言笔记11:字符函数和字符串函数
c语言·笔记·算法
匠在江湖3 小时前
裸机单片机任务调度器实现:基于规范分层(COM/APP/SRV/DRV)架构,(附 任务调度器 / 微秒延时函数 / 串口重定向 源码)
单片机·嵌入式硬件·架构
逑之3 小时前
C语言笔记1:C语言常见概念
c语言·笔记·c#
Felven3 小时前
A. Blackslex and Password
c语言
点灯小铭3 小时前
基于单片机的智能洗碗机控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计