基于51/STM32 TEMT6000环境光模块测试 串口打印
一. 实现功能
注:预留OLED0.96程序,简单更改也可用OLED0.96显示 上电后串口打印AD值和光强值单位(LUX)
二. 硬件清单
- TEMT6000模块
- STM32F103C8T6/STC89C52RC
- SWD或JLINK仿真器(直接用CH340串口模块烧录也行,不过注意配置BOOT)
- 杜邦线若干
三. 资料清单
程序代码
文档资料
四. 模块简介
1.基本参数
2.引脚说明
五. 接线
基于STM32 +模块接线
模块------------- ------------------- STM32
VCC-----------------------------------5V
GND-----------------------------------GND
S----------------- --------------- - GPIOA_0(AD1通道0)
基于51 +模块接线
模块-------- PCF8591------------STC89C52RC
VCC-------------------------------------5V
GND-------------------------------------GND
S--------------AIN2 ----------------- - P3.7
---------------VCC----------------------5V
---------------GND---------------------GND
---------------SCL---- ----------------- P2.0
T--------------SDA----- -------------- - P2.1
六.代码说明
以下以32代码为例,
1. AD参数与相关引脚配置
static void ADCx_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_GPIO_APBxClock_FUN ( ADC_GPIO_CLK, ENABLE );
GPIO_InitStructure.GPIO_Pin = ADC_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(ADC_PORT, &GPIO_InitStructure);
}
static void ADCx_Mode_Config(void)
{
ADC_InitTypeDef ADC_InitStructure;
ADC_APBxClock_FUN ( ADC_CLK, ENABLE );
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE ;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADCx, &ADC_InitStructure);
RCC_ADCCLKConfig(RCC_PCLK2_Div8);
ADC_RegularChannelConfig(ADCx, ADC_CHANNEL, 1,
ADC_SampleTime_55Cycles5);
ADC_ITConfig(ADCx, ADC_IT_EOC, ENABLE);
ADC_Cmd(ADCx, ENABLE);
ADC_ResetCalibration(ADCx);
while(ADC_GetResetCalibrationStatus(ADCx));
ADC_StartCalibration(ADCx);
while(ADC_GetCalibrationStatus(ADCx));
ADC_SoftwareStartConvCmd(ADCx, ENABLE);
}
static void ADC_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = ADC_IRQ;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void ADCx_Init(void)
{
ADCx_GPIO_Config();
ADCx_Mode_Config();
ADC_NVIC_Config();
}
2. AD中断服务函数
void ADC_IRQHandler(void)
{
if (ADC_GetITStatus(ADCx,ADC_IT_EOC)==SET)
{
ADC_ConvertedValue = ADC_GetConversionValue(ADCx);
}
ADC_ClearITPendingBit(ADCx,ADC_IT_EOC);
}
3. 主函数
int main(void)
{
ADCx_Init();
DelayInit();
USART_Config();
while (1)
{
ADC_ConvertedValueLocal =(float) ADC_ConvertedValue/4096*3.3;
ADC_ConvertedValueLux =(float) ADC_ConvertedValue/4096*1000;
printf("AD_VO:%.3fV",ADC_ConvertedValueLocal);
printf(" ValueLux:%f Lux",ADC_ConvertedValueLux);
printf(" AD_VA:%d\r\n",ADC_ConvertedValue);
DelayMs(100);
}
}
七.资料获取
加群私聊群主可免费获得,也可加群学习交流 群号:1041406448。
|