STM32 环境光传感器ADC采样

一、STM32 环境光传感器模块

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

将PA4设置成ADC

二、Stm32CubeMx配置ADC

打开PA4并使能ADC1通道9

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

使能外部高速时钟

配置时钟

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

 

ADC参数设置

配置USART1为异步模式

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;

}

 

在adc.c中有ADC的初始化void MX_ADC1_Init(void),和在STM32CubeMx配置的一样,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

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

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

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

 

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

 

猜你喜欢

转载自blog.csdn.net/caijiwyj/article/details/88429256