【蓝桥杯嵌入式】【HAL库】五、获取ADC+LCD显示

原理图分析

在这里插入图片描述
蓝桥杯的板子上带了四个电位器,其中上图两个引脚对应的是ADC1和ADC2某个通道的引脚,本次我们用ADC1的11通道,也就是PB12来获取ADC的数值,并且通过计算得到电压值,然后用lcd显示出来。ADC的原理相信学过数电的同学都十分熟悉了,在这里不再叙述,不明白的同学查一下资料几分钟就明白了。

STM32CubeMX配置

时钟,时钟数配置不再叙述。
ADC引脚配置:
在这里插入图片描述
关于该ADC的配置我们只需要改动一处,其他默认即可(仅限本次简单的显示电压),Clock Prescaler我们要进行6分频,我们在时钟树找到下图:

在这里插入图片描述
我们的ADC得到的时钟频率是80MHz,而我们的ADC为了保证数据的稳定性,时钟频率不要超过14MHz,所以此处我们有以上配置。(但是我看官方给的例程就是直接用80MHz,然后也能正常显示,但查资料都说要小于14MHz…额,后续再研究研究)
然后生成工程即可。

代码

因为我们需要用lcd显示,所以上节用到的lcd文件夹也要加入该工程里,流程和上节一样,在这不再叙述。
剩下的就只是获取ADC数值和显示的代码了,一些问题我已经在注释写的很清楚了,找到合适的位置粘贴即可。
在main函数上面定义获取ADC数值的子函数:

/* USER CODE BEGIN 0 */
uint16_t getADC(void)//12位ADC,要用uint16_t定义
{
	uint16_t adc = 0;//定义adc数值
	
	//以下两句配合使用,得到adc的数值
	HAL_ADC_Start(&hadc1);
	adc = HAL_ADC_GetValue(&hadc1);
	
	return adc;//返回得到的adc数值
}
/* USER CODE END 0 */

main函数:

  /* USER CODE BEGIN 2 */
  	char buf[20];//定义用来显示一行lcd的20位字符串
	
	//以下为lcd初始化,白底,红字
	LCD_Init();
	LCD_Clear(White);
	LCD_SetBackColor(White);
	LCD_SetTextColor(Red);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
		sprintf(buf, "     VAL:%.2fV     ", getADC()*3.3/4096);//计算电压值并放入到字符串里
		HAL_Delay(100);
		LCD_DisplayStringLine(Line4, (uint8_t *)buf);//在第四行显示字符串
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

在main.h中添加的头文件:

/* USER CODE BEGIN Includes */
#include "lcd.h"
#include "stdio.h"//包含字符操作的相关函数
#include "string.h"//包含字符操作的相关函数
/* USER CODE END Includes */

运行结果

转动第二个电位器,就可以获的不同的电压值了。
请添加图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HAL库是针对STM32系列微控制器的硬件抽象层库。它提供了一组函数和驱动程序,用于简化对STM32微控制器的配置和操作。ADC(模数转换器)是一种用于将模拟信号转换为数字信号的设备。FFT(快速傅里叶变换)是一种用于将时域信号转换为频域信号的算法。 在使用HAL库进行ADC和FFT应用时,可以按照以下步骤进行操作: 1. 配置ADC模块:使用HAL库提供的函数设置ADC的采样时间和分辨率\[1\]。 2. 启动ADC转换:使用HAL库提供的函数启动ADC转换,并使用DMA(直接内存访问)方式将采样数据存储到指定的缓冲区中\[2\]。 3. 等待转换完成:使用一个标志位(例如AdcConvEnd)来检测ADC转换是否完成\[3\]。 4. 进行FFT变换:使用FFT算法对采样数据进行频域转换,将时域信号转换为频域信号。 5. 分析和处理频域数据:根据应用需求,对FFT得到的频域数据进行分析和处理,例如频谱分析、滤波等。 需要注意的是,具体的代码实现可能会因为使用的STM32系列微控制器型号和HAL库版本而有所不同。因此,在实际应用中,需要参考相关的文档和示例代码来进行具体的配置和操作。 希望以上信息对您有所帮助! #### 引用[.reference_title] - *1* [STM32 CubeMX配置ADC+DMA进行FFT(1)](https://blog.csdn.net/ANNOLRA/article/details/119206287)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [STM32HAL ADC+TIM+DMA采集交流信号 基于cubemx](https://blog.csdn.net/qq_34022877/article/details/121941236)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值