STM32 实现光敏传感器
Posted 为了维护世界和平_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32 实现光敏传感器相关的知识,希望对你有一定的参考价值。
原理
光敏电阻将光强转换成电压信号;
有强时 DO 输出低电平,光弱时 DO 输出高电平;
电源接 5V 时,DO 输出的是 2.6V
不同强度的光强,可以通过调节滑块来改变
光敏电阻实物图
引脚说明
名称 | Value |
---|---|
VCC | 电源(5V) |
GND | 地线 |
OD | 输出信号 |
实现功能
有光时,开发版的LED灯亮,没有光时,灯灭;
原理图
LED灯原理图
将光敏电阻的OD引脚接到开发版的PC13上
配置方法
- 设置LED的时钟
- 配置LED的GPIO
选择GPIO类,GPIO时钟,GPIO具体引脚
//STM32上的LED1 GPIO为PB5
#define LED1_GPIO_PORT GPIOB
#define LED1_GPIO_CLK RCC_APB2Periph_GPIOB
#define LED1_GPIO_PIN GPIO_Pin_5
#define ON 0
#define OFF 1
/* 宏定义实现LED灯的设置*/
#define LED1(a) if (a) \\
GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);\\
else \\
GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN)
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( LED1_GPIO_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);
}
- 配置LDR的时钟
- 配置LDR的GPIO
#define LDR_GPIO_CLK RCC_APB2Periph_GPIOC
#define LDR_GPIO_PORT GPIOC
#define LDR_GPIO_PIN GPIO_Pin_13
void LDR_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(LDR_GPIO_CLK,ENABLE);
GPIO_InitStructure.GPIO_Pin = LDR_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(LDR_GPIO_PORT, &GPIO_InitStructure);
}
//检测功能
uint8_t LDR_Test(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{
if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 1 ) //读取DO数据,如果高,则LDR设置OFF,否则设置ON
return LDR_OFF;
else
return LDR_ON;
}
主函数
int main(void)
{
LED_GPIO_Config();//LED配置
LED2_OFF;//LED灯初始化熄灭
LDR_GPIO_Config();//光敏配置
while(1)
{
if (LDR_Test(LDR_GPIO_PORT,LDR_GPIO_PIN) == LDR_ON)
LED2_ON;
else
LED2_OFF;
}
}
以上是关于STM32 实现光敏传感器的主要内容,如果未能解决你的问题,请参考以下文章
STM32F103(十九)ADC相关的几个实验—内部温度传感器内部参照电压光敏传感器
《嵌入式-STM32开发指南》第三部分 外设篇 - 第5章 光敏传感器