前言
本系列文章统一围绕STM32F103C8T6最小系统开发板进行记录,如涉及其他开发板将会特别说明。
工作原理
HC-SR501模块三个引脚从左到右分别为GND、Output和VCC,其中VCC工作电压范围为5V-20V。

hcsr501.png?imageView2/2/w/1000
触发模式
可通过跳线选择模块感应触发方式:
不可重复触发方式:感应输出高电平后,延时时间一结束,输出将自动从高电平变为低电平。
重复触发方式: 感应输出高电平后,在延时时间段内,如果有人体在其感应范围内活动,其输出将一直保持高电平,直到人离开后才延时将高电平变为低电平(感应模块检测到人体的每一次活动后会自动顺延一个延时时间段,并且以最后一次活动的时间为延时时间的起始点)。
感应距离(Sensitivity adjustment)
左侧电位器可调节模块感应距离,顺时针旋转,感应距离增大(最大约 7 米),反之,感应距离减小(最小约 3 米)。
延时时间(Time-delay adjustment)
右侧电位器可调节模块感应距离,顺时针旋转,感应延时加长(最大约300S),反之,感应延时减短(最小约 0.5S)。
配置思路
开启时钟:GPIOB
配置初始化结构体参数:
引脚:PB10
输出模式:下拉输入(当检测到人体时返回高电平)
初始化GPIO端口。
控制操作:轮询判断,检测到人体后LED亮起。
代码
初始化函数
void drv_pir_init(void)
{
GPIO_InitTypeDef pir;
// 打开GPIOB的时钟
RCC_APB2PeriphClockCmd(PIR_GPIO_CLK, ENABLE);
// 配置IO口:PB10作为读入数据的引脚,持续保持低电平,不需要配置输出速度
// 当检测到人体时,输出变为高电平
pir.GPIO_Mode = GPIO_Mode_IPD;
pir.GPIO_Pin = GPIO_Pin_10;
// 调用GPIO初始化函数
GPIO_Init(GPIOB, &pir);
}
读取状态
u8 drv_pir_detect(void){
return GPIO_ReadInputDataBit(PIR_GPIO_PORT, PIR_GPIO_PIN);}轮询触发
通过在主函数中轮询触发以点亮LED。
int main(){
drv_led_init();
drv_pir_init();
while (1) {
if (drv_pir_detect() == PIR_DETECT) {
if (drv_pir_detect() == PIR_DETECT) {
drv_led_ctl(LED_ON);
} else {
drv_led_ctl(LED_OFF);
}
} else {
drv_led_ctl(LED_OFF);
}
}
return 0;}
关键字:STM32 GPIO
引用地址:
【STM32学习笔记4.3】GPIO输入模式控制
推荐阅读最新更新时间:2026-03-19 10:34
STM32中的GPIO笔记
1.GPIO是STM32可控制的引脚,STM32的GPIO被分成很多组,每组有16个引脚。每个GPIO端口包含:2个32位配置寄存器(CRL、CRH),2个32位数据寄存器(IDR、ODR),1个32位复位寄存器(BSRR),1个16位复位寄存器(BRR)和1个32位锁定寄存器。 2.GPIO端口的每个位可以配置成:模拟输入、浮空输入、上拉输入、下拉输入、开漏输出、推挽输出、复用开漏输出、复用推挽输出。 3.复位寄存器(BSRR、BRR)可以对任何GPIO寄存器的独立访问。配置寄存器(CRL和CRH)可以配置GPIO的工作模式和工作速度,每4位控制一个IO,CRL控制低8位,CRH控制高8位。其中MODE位配置速度,CNF
[单片机]
stm32单片机GPIO输入
在我们应用的库函数中也确实可以看到有一个结构体定义了这些模式的寄存器该如何配置(这里库函数的版本为v3.50) 下面是GPIO的不同模式对应的电路图: 代码演示: 主函数()(这里出现乱码在keil5中的修改中将editor更改为ANSI即可) 在GPIO的输入中主要掌握这4个库函数的运用(具体的方法要在库函数stm32xxx_gpio_c的文件中查看) GPIO_Init() GPIO_ResetBits() GPIO_SetBits() GPIO_WriteBit() #include stm32f10x.h // Device header #includ
[单片机]
明解STM32—GPIO理论基础知识篇之八种工作模式
一、引言 在之前围绕STM32的GPIO的基本结构进行了介绍,图1为STM32的5V容忍的GPIO口内部基本结构图,图2为GPIO的基本结构中各个模块部分的概述。 阅读GPIO基本结构的内容能够对GPIO的工作模式有更深的了解。正是由于GPIO的结构中包含了多样性的电路和模块,因此进行合理的配置组合,就可以使得GPIO应用在不同的工作模式下进行工作。 图1 STM32的5V容忍的GPIO内部基本结构 图2 GPIO基本结构包含的功能概述 二、工作模式概述 图3为STM32的GPIO工作模式概述图,从图中可以看出,GPIO端口的静态特征就是指芯片可供你选择的该GPIO的配置,只有通过对使用的GPIO
[单片机]
通过STM32 GPIO口加上延时函数实现跑马灯的教程
一、硬件电路 这里我们还是以stm32f103c8t6为例,并且我们以最小系统板的电路为例。以下是2种类型的最小系统板,区别在于一个是4pin的烧写,一个是20pin的烧写,但是电路基本一样。 为了方便,我们使用板子上的LED为实验对象。我们先来看板子上LED的电路,由于手头上刚好有20pin烧写的板,我就以这个为例吧。 (图四) 学过电路的都会知道,LED灯亮的条件是什么,即只要我们在LED的两端施加一个电压差,使得LED两端有了电压差他就能亮。(记得区分正负哈) 由电路图上,我们可以知道LED的正极已经接上了3.3V,负极接上了stm32的PC13的IO口上。由以上原理可得,只要我们将PC13输出一个低电平,LED两端就会有
[单片机]
STM32学习笔记(四)GPIO(General-Purpose I/Os)
输出方式 推挽输出(Push-Pull) 推挽输出电路 若 INT 输入为 0,则 PMOS 截止,NMOS 导通,产生灌电流,输出 OUT 为 0; 若 INT 输入为 1,则 NMOS 导通,PMOS 截止,产生拉电流,输出 OUT 为 1; 推挽输出特点 同时具有高低电压的驱动能力,即高低电平切换所需时间短,反应快; 无法实现线与功能(即禁止输出之间短接); 结型场效应管的特性(G与D、S近乎绝缘)使得电功率极小; 高低电平均由内部 IC 电平决定,通常为一定值; 开漏输出(Open-Drain) 即 漏极(Drain) 一端什么都不接,直接连接 输出端口 开漏输出电路 若 INT 输入为 0,则
[单片机]
结合电路图,看STM32的GPIO的工作原理
输入: 浮空输入 浮空输入 上图中1-2-3-4指示IO输入电路,内部上拉电阻、下拉电阻都是断开的。 由于没有内部上下拉,所以I/O的电平状态直接由外部输入决定:外部输入高则I/O高,外部输入低则I/O低,如果引脚悬空,则I/O的电平状态是不确定的。 上拉输入 上拉输入,就是在浮空输入的基础上启用了上拉电阻,在引起悬空时,可以明确I/O位高电平状态。 下拉输入 也上拉输入类似,下拉输入,就是在浮空输入的基础上启用了下拉电阻,在引起悬空时,可以明确I/O位低电平状态。 模拟输入 直接到片上外设模块,如ADC 输出: 推挽输出 推挽输出 输出驱动器,启用PMOS和NMOS。 当输
[单片机]
stm32单片机中使用GPIO口模拟PWM输出解析
STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核(ST‘s product portfolio contains a comprehensive range of microcontrollers, from robust, low-cost 8-bit MCUs up to 32-bit ARM-based Cortex®-M0 and M0+, Cortex®-M3, Cortex®-M4 Flash microcontrollers with a great choice of peripherals. ST has also extended this range t
[单片机]
STM32 GPIO的工作模式
一、前言 在之前围绕STM32的GPIO的基本结构进行了介绍,图1为STM32的5V容忍的GPIO口内部基本结构图,图2为GPIO的基本结构中各个模块部分的概述。 阅读GPIO基本结构的内容能够对GPIO的工作模式有更深的了解。 正是由于GPIO的结构中包含了多样性的电路和模块,因此进行合理的配置组合,就可以使得GPIO应用在不同的工作模式下进行工作。 图1 STM32的5V容忍的GPIO内部基本结构 图2 GPIO基本结构包含的功能概述 二、工作模式概述 图3为STM32的GPIO工作模式概述图,从图中可以看出,GPIO端口的静态特征就是指芯片可供你选择的该GPIO的配置,只有通过对使用的GPIO端口进行合理的配置,
[单片机]