历史上的今天
今天是:2024年09月06日(星期五)
2019年09月06日 | STM32 环境光传感器ADC采样
2019-09-06 来源:eefocus
一、STM32 环境光传感器模块

TEMT60000光传感器把光信号转变成为电信号,PA作为模拟输入,接收光传感器的电压,
将PA4设置成ADC
二、Stm32CubeMx配置ADC
打开PA4并使能ADC1通道9

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

使能外部高速时钟

配置时钟

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

配置USART1为异步模式

PA10和PA9被使能作为串口的收发端
生成代码
三、Keil编写程序
在uart.c中做printf、scanf的重定向以便于串口通信
#include #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:%.3frn",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 远程连接工具串口连接要选择一样的参数 然后就可以看到串口打印出来的电压值 用手机手电筒照到环境光传感器可以看到电压变化 




史海拾趣
|
一、课程介绍 嵌入式Linux驱动程序成为进来嵌入式开发的热点,因为驱动程序担负着将嵌入式系统越来越复杂的硬件运转起来的能力。而且Linux内核代码量极大,其中有60%以上代码属于驱动程序,掌握嵌入式Linux驱动程序开发技术,对嵌入式工程师的重 ...… 查看全部问答> |
|
请大家帮忙看看这两个电容分别是什么电容? 第一个电容上标有103,是不是表示容值为0.01uF? 第二个电容上标有L82,105, 是不是表示容值为1uF? 刚刚接触这方面,谢谢大家帮忙!… 查看全部问答> |
|
大侠们!!! 好好的帮我看看这个程序好吗? 之前的程序 https://bbs.eeworld.com.cn/forum ... 5521&fromuid=582339 (出处: 电子工程世界-论坛) 下面是我更改之后的程序!之前的闪烁消除了,就是对于定时器中断1里的这段程序 if ...… 查看全部问答> |




