STM32 环境光传感器ADC采样

一、STM32 环境光传感器模块

STM32 环境光传感器ADC采样

TEMT60000光传感器把光信号转变成为电信号,PA作为模拟输入,接收光传感器的电压,

将PA4设置成ADC

二、Stm32CubeMx配置ADC

打开PA4并使能ADC1通道9

STM32 环境光传感器ADC采样

配置完ADC之后,GPIO模式自动为模数转换模式

STM32 环境光传感器ADC采样

使能外部高速时钟

STM32 环境光传感器ADC采样

配置时钟

STM32 环境光传感器ADC采样

不要让ADC时钟超过14MHz,否则可能不准

 

ADC参数设置

STM32 环境光传感器ADC采样

配置USART1为异步模式

STM32 环境光传感器ADC采样

PA10和PA9被使能作为串口的收发端

 

生成代码

三、Keil编写程序

在uart.c中做printf、scanf的重定向以便于串口通信

#include <stdio.h>

#ifdef __GNUC__

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

#else

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

#endif

PUTCHAR_PROTOTYPE

{

HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);

return ch;

}

int fgetc(FILE *f)

{

    uint8_t ch;

    HAL_UART_Receive(&huart1,(uint8_t *)&ch,1,0xfff);

    return ch;

}

 

STM32 环境光传感器ADC采样

在adc.c中有ADC的初始化void MX_ADC1_Init(void),和在STM32CubeMx配置的一样,ADC的配置也可在这修改

STM32 环境光传感器ADC采样

 

定义变量用于保存ADC采样值

int ADC_value = 0 ;

float voltage = 0 ;

 

在while(1)里

 /* USER CODE BEGIN WHILE */

  while (1)

  {

HAL_ADC_Start(&hadc1); //开始ADC转换

HAL_ADC_PollForConversion(&hadc1,100); //等待ADC转换完成,第二个参数表示超时时间,单位ms

ADC_value = HAL_ADC_GetValue(&hadc1);//获取ADC采样值

voltage = (float)(value *3.3/4096);//ADC采样值到电压的转换

printf("Light voltage:%.3f\r\n",voltage);

HAL_Delay(1000);

    /* USER CODE END WHILE */



    /* USER CODE BEGIN 3 */

  }

  /* USER CODE END 3 */

ADC采样值到电压的转换:

ADC12位分辨率,也就是说ADC模块读到的数据是12位的数据。。二进制的12位可表示0-4095个数。 电压值 = ADC采样值*(3.3V/4096)

 

 

右键我的电脑选择管理,进入计算机管理界面,在设备管理器的端口可以看到串口的端口为COM4

STM32 环境光传感器ADC采样

远程连接工具串口连接要选择一样的参数

STM32 环境光传感器ADC采样

然后就可以看到串口打印出来的电压值

STM32 环境光传感器ADC采样

用手机手电筒照到环境光传感器可以看到电压变化

 

参考:https://blog.csdn.net/qq_42908042/article/details/86694228