一、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