前言:本人上一篇博客介绍了关于STM32CubeMX的安装,这一篇博客将在STM32CubeMX进行实操。最近得到一块低功耗MCU:STM32L433CBT6的STM32开发板,于是利用无聊的寒假在上面打发时间。使上面的环境光传感器开启模数转换(ADC),并将数据通过串口printf实时打印到屏幕。
这便是开发板的外形啦!哈哈哈!麻雀虽小,五脏俱全!
不同开发板各个通道可能不同,具体参考对应的说明文档。
好的,下面开始操作……
1.打开STM32CubeMX新建项目
2.在搜索框内搜索到自己的芯片型号,我的自然就是STM32L433CB
3.芯片构造,配置也在上面进行。在我的开发板上面可以看到环境光传感器对应的端口通道是PA4,选择ADC1外设,如图,可以看到颜色变成黄色,名字变成ADC1_IN9。
4.选择Alalog下的ADC1选项进行配置,将IN9选择IN9 Single-ended。可以看到ADC1使能变绿。
各项参数设置如下,都为默认设置。
5.同样对串口进行配置,发送和接收分别是PA9和PA10,名字分别是USART1_TX和USART1_RX。此时颜色为黄色,下面进行串口配置。
选择Connectivity下的USART1,通信方式为异步通信。
基本参数要记住,后面串口通信会用到。
串口配置初始化完成
6.时钟树配置。因为本人对这个不是很了解,大概知道这个开发板的的串口通信是80MHz,直接输入80即可配置好。
7.项目管理,包括项目名字,路径,打开项目工具,本人使用的是keil 5。
勾选此处
8.初始化配置都已经完成了,生成报告以及代码。
有两种打开方式……
9.用keil 5打开代码可以看到各个模块c文件,其中有初始化函数,在Drivers/STM32l4xx_HAL_Driver文件夹中可以找到各个模块的操作函数,接下来就是编写代码了。
在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。步骤如下
11.打开串口调试助手,设置如下图,和之前的串口配置一致。接下来就可以测试了,手里拿着开了灯光的手机,串口助手上会不断显示环境光大小。
后序:这只是一个简单的ADC采集传感器通道电压,然后通过公式计算出光强的实例。之后还会介绍通过DMA的方式采集两个ADC通道电压。过两天再研究研究……