【STM32学习】(28)STM32实现光照度采集(标准库和HAL库实现)

我们在日常生活中一般会需要采集光照度来判断灯是否打开,应用范围非常广泛。本次来研究一下该模块的实现。

首先看一下模块的样子,如下图:

     

                                                                                                              

 

该模块有四个引脚,分别为VCC、GND、AO、DO,其中AO是模块的模拟输出,DO是模块的数字量输出。

我们分别验证该模块的数字量输出模拟量输出,并通过标准库HAL库实现。

单片机型号:STM32F103系列

光敏模块工作电压:3.3V-5V

标准库实现:

       1.数字量实现光照度采集。

         接线表设计:

 

模块(光敏模块)STM32的IO口设置的工作模式
VCCVCC(3.3V)-
GNDGND-
DOPA0

GPIO_Mode_IPU

(上拉输入模式)

-PA9TX(串口1通信)
-PA10RX(串口1通信)

 

      代码片段:
 

/****************************************
函数名称:void illuminanceDetectionRead_DO(void)
函数参数:无参
函数返回值:无
函数功能:光照度状态读取
创建作者:王艇
创建时间:2021.5.21
联系方式:
修改作者:
修改时间:
修改说明:
****************************************/
void illuminanceDetectionRead_DO(void)
{
	if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0)
	{
		USART1_printf(USART1, "\n光照度强\r\n");
	}
	if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 1)
	{
		USART1_printf(USART1, "\n光照度弱\r\n");
	}
	DelayMS(1000);		//	延时1秒
}

      实现效果:                       提示:我们可以调节模块中的电位器调整对光照变化的灵敏度。

                                                                                          

        显然数字量的检测可以实现光照度,但光照度的变不能细化,因此我们需要AD转换,实现光照度精确采集,这样可以应用到很多场景。

        2.模拟量实现光照度采集。

           接线表设计:

模块(光敏模块)STM32的IO口设置的工作模式
VCCVCC(3.3V)-
GNDGND-
AOPA0

GPIO_Mode_AIN

(模拟输入模式)

-PA9TX(串口1通信)
-PA10RX(串口1通信)


     

/****************************************
函数名称:void illuminanceInitConfig(void)
函数参数:无参
函数返回值:无
函数功能:光敏模块ADC初始化配置
创建作者:王艇
创建时间:2021.5.21
联系方式:
修改作者:
修改时间:
修改说明:
****************************************/
void illuminanceInitConfig_AO(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	ADC_InitTypeDef ADC_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	// ADC1 工作模式配置
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;  
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;  //单次转换
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
	ADC_InitStructure.ADC_NbrOfChannel = 1;
	ADC_Init(ADC1, &ADC_InitStructure);

	ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_13Cycles5);    

	ADC_Cmd(ADC1, ENABLE);   
	ADC_ResetCalibration(ADC1);
	/* Check the end of ADC1 reset calibration register */
	while(ADC_GetResetCalibrationStatus(ADC1));
	ADC_StartCalibration(ADC1);
	/* Check the end of ADC1 calibration */
	while(ADC_GetCalibrationStatus(ADC1));
}
/****************************************
函数名称:void illuminanceDetectionRead_AO(void)
函数参数:无参
函数返回值:无
函数功能:光照度状态读取
创建作者:王艇
创建时间:2021.5.21
联系方式:
修改作者:
修改时间:
修改说明:
****************************************/
u16 illuminanceDetectionRead_AO(void)
{
	u16 ADC_VALUE = 0;
	
	
	ADC_SoftwareStartConvCmd(ADC1,ENABLE);
	ADC_VALUE = ADC_GetConversionValue(ADC1);
	while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
	return ADC_VALUE;
}

 实现效果:

                                                                                 

HAL库实现:

           1.数字量采集光照度:

               接线表设计:

模块(光敏模块)STM32的IO口设置的工作模式
VCCVCC(3.3V)-
GNDGND-
DOPA0

输入模式(上拉)

-PA9TX(串口1通信)
-PA10RX(串口1通信)

 

                                                                                  

                                                                                                  

                                           

 

          实现效果:

                                                                                      

 

            2.模拟量采集光照度:

               接线表设计:

模块(光敏模块)STM32的IO口设置的工作模式
VCCVCC(3.3V)-
GNDGND-
AOPA0

ADC1_IN0

-PA9TX(串口1通信)
-PA10RX(串口1通信)

 

 

           实现效果:

                                                                                              

 

大家需要可以留言,我发给大家,互相学习互相交流。

 

源码下载链接:(1条消息) 光敏电阻模块光照度采集(标准库和HAL实现)-电信文档类资源-CSDN下载

 

  • 20
    点赞
  • 150
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小材大用

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值