新知榜官方账号
2023-09-22 23:03:10
本文介绍了STM32智能家居系统中光照检测控制系统的项目介绍、光敏传感器的连接原理图、ADC采集数据的方法、串口通信的配置方法等内容,并提供相应的代码。
整体项目采用光敏传感器采取环境的光照强度,当光照强度的值高于某一设定值时,电机逆时针转动,模仿打开遮阳帘,LED灯点亮;当光照强度的值低于某一设定值时,电机顺时针转动,模仿关闭遮阳帘。
光敏传感器通过PB0引脚接入STM32。光敏传感器的连接原理图如下:
光敏传感器与STM32连接原理图
LS1是光敏二极管,R1为其提供反向电压,当环境光线变化时,LS1两端的电压也会随之改变,从而通过ADC1_IN6通道,读取LIGHT_SENSOR(PB0)上面的电压,即可得到环境光线的强弱。光线越强,电压越低,光线越暗,电压越高。
采用ADC方式采集数据,ADC是将采集的模拟量转化成数字量,对于STM32而言,它需要一个输入的基准电压,用于和待测的模拟电压做对比。STM32f103系列最多有3个ADC,精度为12位,每个ADC最多有16个外部通道。其中ADC1和ADC2都有16个外部通道,ADC3一般有8个外部通道,各通道的A/D转换可以单次、连续、扫描或间断执行,ADC转换的结果可以左对齐或右对齐储存在16位数据寄存器中。ADC的输入时钟不得超过14MHz,其时钟频率由PCLK2分频产生。STM32将ADC的转换分为2个通道组:规则通道组和注入通道组。规则通道相当于正常运行的程序,而注入通道呢,就相当于中断。在你程序正常执行的时候,中断是可以打断你的执行的。同这个类似,注入通道的转换可以打断规则通道的转换,在注入通道被转换完成之后,规则通道才得以继续转换。
串口通信是用来显示光照强度的数值。串口通信的配置主要包括波特率、数据位、停止位和奇偶校验等参数。在STM32中,通过uart_init()函数进行串口的初始化设置,使用printf()函数进行数据的输出。
下面是ADC完成数据采集代码的头文件adc.h:
#ifndef__ADC_H
#define__ADC_H
#include"sys.h"
voidAdc_Init(void);
u16Get_Adc(u8ch);
u16Get_Adc_Average(u8ch,u8times);
#endif
下面是ADC完成数据采集代码adc.c:
#include"adc.h"
#include"delay.h"
#include"usart.h"
//初始化ADC
//这里我们仅以规则通道为例
//我们默认将开启通道0~3
voidAdc_Init(void)
{
ADC_InitTypeDefADC_InitStructure;
//声明ADC结构体
GPIO_InitTypeDefGPIO_InitStructure;
//声明GPIO结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_ADC1,ENABLE);//使能ADC1通道时钟
RCC_ADCCLKConfig(RCC_PCLK2_Div6);//设置ADC分频因子
//672M/6=12,ADC最大时间不能超过14M
//PA1作为模拟通道输入引脚
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模拟输入引脚
GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化GPIOB.0
ADC_DeInit(ADC1);//复位ADC1
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//ADC工作模式:ADC1和ADC2工作在独立模式
ADC_InitStructure.ADC_ScanConvMode=ENABLE;//模数转换工作在单通道模式
ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//模数转换工作在单次转换模式
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//转换由软件而不是外部触发启动
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//ADC数据右对齐
ADC_InitStructure.ADC_NbrOfChannel=1;//顺序进行规则转换的ADC通道的数目
ADC_Init(ADC1,&ADC_InitStructure);//根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
ADC_Cmd(ADC1,ENABLE);//使能指定的ADC1
ADC_ResetCalibration(ADC1);//使能复位校准
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
}
//获得ADC值
//ch:通道值0~3
u16Get_Adc(u8ch)
{
//设置指定ADC的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);//ADC1,ADC通道,采样时间为239.5周期
ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能指定的ADC1的软件转换启动功能
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));//等待转换结束
returnADC_GetConversionValue(ADC1);//返回最近一次ADC1规则组的转换结果
}
u16Get_Adc_Average(u8ch,u8times)
{
u32beam_value=0;
u8t;
for(t=0;t<times;t++)
{
beam_value+=Get_Adc(ch);
delay_ms(5);
}
returnbeam_value/times;
}
下面是串口通信配置代码:
//定义串口的TX和RX的GPIO
//定义USART1_TX,使用GPIOA.9,发送数据,采用推挽输出
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//PA.9
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA.9
//定义USART1_RX,使用GPIOA.10,接收数据,采取浮空输入
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//PA10
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA.10
//Usart1NVIC配置
NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//IRQ通道使能
NVIC_Init(&NVIC_InitStructure);//根据指定的参数初始化VIC寄存器
//USART初始化设置
USART_InitStructure.USART_BaudRate=bound;//串口波特率
USART_InitStructure.USART_WordLength=USART_WordLength_8b;//字长为8位数据格式
USART_InitStructure.USART_StopBits=USART_StopBits_1;//一个停止位
USART_InitStructure.USART_Parity=USART_Parity_No;//无奇偶校验位
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//无硬件数据流控制
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//收发模式
//初始化串口
USART_Init(USART1,&USART_InitStructure);//初始化串口1
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启串口接受中断
USART_Cmd(USART1,ENABLE);//使能串口1
相关工具
相关文章
相关快讯
推荐
一站式搞定AI绘图+视频,AI短片效率飙升的秘密在这儿!
2025-08-08 09:26
打工人新神器!10款国产AI,让你告别996!
2025-08-08 09:24
豆包视觉推理深度体验,AI也能“边看边想”了!
2025-08-08 09:19
300美元的AI男友来了!马斯克的情感生意从女友做到男友
2025-08-01 17:56
Agent智能体:2025年企业新员工,月薪仅需一度电?
2025-07-30 17:49
国产GLM-4.5把AI价格打到地板价,实测强到离谱!
2025-07-30 09:08
用AI批量生成治愈系漫画,月入2000+
2025-07-29 09:59
千亿市场规模背后,AI短剧商业化迎来爆发期?
2025-07-17 09:19
15个作品涨粉26万!AI历史账号又出王炸案例!
2025-07-09 09:37
亲测真香!这6个AI工具让工作效率翻倍,同事追着问链接
2025-06-17 16:21