原理

光敏电阻将光强转换成电压信号;
有强时 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; 
	}
}

参考
野火-YH-LDR光敏传感器模块.pdf