STM32CubeMX下STM32单片机环境光传感器(ADC)

前言:本人上一篇博客介绍了关于STM32CubeMX的安装,这一篇博客将在STM32CubeMX进行实操。最近得到一块低功耗MCU:STM32L433CBT6的STM32开发板,于是利用无聊的寒假在上面打发时间。使上面的环境光传感器开启模数转换(ADC),并将数据通过串口printf实时打印到屏幕。

这便是开发板的外形啦!哈哈哈!麻雀虽小,五脏俱全!
不同开发板各个通道可能不同,具体参考对应的说明文档。
STM32CubeMX下STM32单片机环境光传感器(ADC)_第1张图片
好的,下面开始操作……

1.打开STM32CubeMX新建项目
STM32CubeMX下STM32单片机环境光传感器(ADC)_第2张图片
2.在搜索框内搜索到自己的芯片型号,我的自然就是STM32L433CB
STM32CubeMX下STM32单片机环境光传感器(ADC)_第3张图片
3.芯片构造,配置也在上面进行。在我的开发板上面可以看到环境光传感器对应的端口通道是PA4,选择ADC1外设,如图,可以看到颜色变成黄色,名字变成ADC1_IN9。
STM32CubeMX下STM32单片机环境光传感器(ADC)_第4张图片
4.选择Alalog下的ADC1选项进行配置,将IN9选择IN9 Single-ended。可以看到ADC1使能变绿。
STM32CubeMX下STM32单片机环境光传感器(ADC)_第5张图片
各项参数设置如下,都为默认设置。
STM32CubeMX下STM32单片机环境光传感器(ADC)_第6张图片

5.同样对串口进行配置,发送和接收分别是PA9和PA10,名字分别是USART1_TX和USART1_RX。此时颜色为黄色,下面进行串口配置。
STM32CubeMX下STM32单片机环境光传感器(ADC)_第7张图片
选择Connectivity下的USART1,通信方式为异步通信。
STM32CubeMX下STM32单片机环境光传感器(ADC)_第8张图片
基本参数要记住,后面串口通信会用到。
STM32CubeMX下STM32单片机环境光传感器(ADC)_第9张图片
串口配置初始化完成

6.时钟树配置。因为本人对这个不是很了解,大概知道这个开发板的的串口通信是80MHz,直接输入80即可配置好。
STM32CubeMX下STM32单片机环境光传感器(ADC)_第10张图片
7.项目管理,包括项目名字,路径,打开项目工具,本人使用的是keil 5。
STM32CubeMX下STM32单片机环境光传感器(ADC)_第11张图片
勾选此处
STM32CubeMX下STM32单片机环境光传感器(ADC)_第12张图片
8.初始化配置都已经完成了,生成报告以及代码。
STM32CubeMX下STM32单片机环境光传感器(ADC)_第13张图片
有两种打开方式……
STM32CubeMX下STM32单片机环境光传感器(ADC)_第14张图片
9.用keil 5打开代码可以看到各个模块c文件,其中有初始化函数,在Drivers/STM32l4xx_HAL_Driver文件夹中可以找到各个模块的操作函数,接下来就是编写代码了。
STM32CubeMX下STM32单片机环境光传感器(ADC)_第15张图片

在main()函数前面声明变量保存AD采集的值。

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */
uint16_t AD_Light=0;
/* USER CODE END PV */

在main()函数while(1)循环里面添加函数声明变量保存AD采集的值

 while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_ADC_Start(&hadc1);//启动ADC转换
        HAL_ADC_PollForConversion(&hadc1, 50);//表示等待转换完成,第二个参数表示超时时间,单位ms
        if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))//获取ADC状态。判断转换完成标志位是否设置
		{
		     AD_Light=HAL_ADC_GetValue(&hadc1);//读取ADC转换数据
			 printf("Environmental Light=%1.3fV\r\n",AD_Light*3.3f/4096);//串口打印到屏幕,*3.3f/4096是模数转换公式
		}
		HAL_Delay(1000);//延时1s
	}
  /* USER CODE END 3 */
}

在usart.c中添加串口printf()函数

/* USER CODE BEGIN 1 */
#include
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
PUTCHAR_PROTOTYPE
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
  return ch;
}
/* USER CODE END 1 */

在usart.h中声明printf()函数

#include "main.h"

/* USER CODE BEGIN Includes */
#include
/* USER CODE END Includes */

10.编译程序并下载到开发板。本人采用的是J-LINK。步骤如下
STM32CubeMX下STM32单片机环境光传感器(ADC)_第16张图片
STM32CubeMX下STM32单片机环境光传感器(ADC)_第17张图片
STM32CubeMX下STM32单片机环境光传感器(ADC)_第18张图片
11.打开串口调试助手,设置如下图,和之前的串口配置一致。接下来就可以测试了,手里拿着开了灯光的手机,串口助手上会不断显示环境光大小。
STM32CubeMX下STM32单片机环境光传感器(ADC)_第19张图片
后序:这只是一个简单的ADC采集传感器通道电压,然后通过公式计算出光强的实例。之后还会介绍通过DMA的方式采集两个ADC通道电压。过两天再研究研究……

你可能感兴趣的:(STM32L433CB)