STM32学习(28)STM32实现光照度采集(标准库和HAL库实现)
Posted 书盲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32学习(28)STM32实现光照度采集(标准库和HAL库实现)相关的知识,希望对你有一定的参考价值。
我们在日常生活中一般会需要采集光照度来判断灯是否打开,应用范围非常广泛。本次来研究一下该模块的实现。
首先看一下模块的样子,如下图:
该模块有四个引脚,分别为VCC、GND、AO、DO,其中AO是模块的模拟输出,DO是模块的数字量输出。
我们分别验证该模块的数字量输出和模拟量输出,并通过标准库和HAL库实现。
单片机型号:STM32F103系列
光敏模块工作电压:3.3V-5V
标准库实现:
1.数字量实现光照度采集。
接线表设计:
模块(光敏模块) | STM32的IO口 | 设置的工作模式 |
VCC | VCC(3.3V) | - |
GND | GND | - |
DO | PA0 | GPIO_Mode_IPU (上拉输入模式) |
- | PA9 | TX(串口1通信) |
- | PA10 | RX(串口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口 | 设置的工作模式 |
VCC | VCC(3.3V) | - |
GND | GND | - |
AO | PA0 | GPIO_Mode_AIN (模拟输入模式) |
- | PA9 | TX(串口1通信) |
- | PA10 | RX(串口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口 | 设置的工作模式 |
VCC | VCC(3.3V) | - |
GND | GND | - |
DO | PA0 | 输入模式(上拉) |
- | PA9 | TX(串口1通信) |
- | PA10 | RX(串口1通信) |
实现效果:
2.模拟量采集光照度:
接线表设计:
模块(光敏模块) | STM32的IO口 | 设置的工作模式 |
VCC | VCC(3.3V) | - |
GND | GND | - |
AO | PA0 | ADC1_IN0 |
- | PA9 | TX(串口1通信) |
- | PA10 | RX(串口1通信) |
实现效果:
大家需要可以留言,我发给大家,互相学习互相交流。
源码下载链接:(1条消息) 光敏电阻模块光照度采集(标准库和HAL实现)-电信文档类资源-CSDN下载
以上是关于STM32学习(28)STM32实现光照度采集(标准库和HAL库实现)的主要内容,如果未能解决你的问题,请参考以下文章
STM32实现光照强度传感器(BH1750)(标准库与HAL库实现)
毕业设计 基于STM32单片机无线ZIGBEE智能大棚土壤湿度光照检测