红外传感器模块基于stm32f103c8t6使得小灯亮
时间: 2024-12-27 16:27:53 浏览: 22
### 使用STM32F103C8T6和红外传感器模块控制LED灯的开关
#### 硬件连接
为了实现这一功能,需要将红外传感器模块与STM32F103C8T6单片机以及LED灯进行正确的硬件连接。具体来说:
- 将红外传感器模块的VCC引脚接到STM32开发板上的3.3V电源端子上;
- GND接地处理,同样连接至STM32的地线接口处;
- OUT输出信号则应接入PA0 GPIO输入通道以便读取状态变化[^1]。
对于LED部分,则可选用任意未被占用的GPIO口作为驱动端,这里假设采用PB5管脚来点亮指示灯泡,并确保其阳极串联适当阻值电阻后再连回正供电源,阴极端直接挂接MCU对应I/O针脚即可完成整个电气线路布局设计工作[^2]。
#### 软件编程
接下来,在软件层面编写程序逻辑以响应外部事件并作出相应动作。以下是具体的代码示例说明:
```c
#include "stm32f1xx_hal.h"
// 定义使用的IO端口号
#define LED_PIN GPIO_PIN_5
#define LED_GPIO_PORT GPIOB
#define SENSOR_PIN GPIO_PIN_0
#define SENSOR_GPIO_PORT GPIOA
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void){
HAL_Init();
SystemClock_Config(); // 配置系统时钟
MX_GPIO_Init(); // 初始化外设
while (1){
if(HAL_GPIO_ReadPin(SENSOR_GPIO_PORT,SENSOR_PIN)==GPIO_PIN_SET){
/* 当检测到有人经过时 */
HAL_GPIO_WritePin(LED_GPIO_PORT,LED_PIN,GPIO_PIN_SET); // 打开LED
}else{
HAL_GPIO_WritePin(LED_GPIO_PORT,LED_PIN,GPIO_PIN_RESET); // 关闭LED
}
}
}
/**
* @brief 系统时钟配置函数.
*/
void SystemClock_Config(void){
/* 用户可以在此添加自己的代码*/
}
/**
* @brief GPIO初始化设置.
*/
static void MX_GPIO_Init(void){
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE(); // 开启PA端口时钟
__HAL_RCC_GPIOB_CLK_ENABLE(); // 开启PB端口时钟
// 设置红外传感器对应的IO为输入模式
GPIO_InitStruct.Pin = SENSOR_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(SENSOR_GPIO_PORT,&GPIO_InitStruct);
// 设置LED所用IO为推挽输出方式
GPIO_InitStruct.Pin = LED_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED_GPIO_PORT,&GPIO_InitStruct);
}
```
上述代码实现了基本的人体存在与否判断机制并通过改变指定引脚高低电平状态从而达到控制发光二极管亮灭的目的。
阅读全文