【蓝桥杯嵌入式】ADC模数转换的原理图解析与代码实现(以第十一届省赛为例)——STM32G4

简介: 【蓝桥杯嵌入式】ADC模数转换的原理图解析与代码实现(以第十一届省赛为例)——STM32G4

目录


原理图解析

设置STM32CubeMX

手搓代码

实例运用


正文


原理图解析


    从图中可以看出,模拟输出的引脚分别为PB15和PB12。


设置STM32CubeMX


     打开STM32CubeMX后,找到PB15和PB12,并把他们设置为ADC输入模式。PB15的为ADC2_IN15,PB12的为ADC1_IN11。

 然后在左侧的Analog中设置ADC,如我们设置刚刚配置给PB12的ADC1,通道为IN11设置为slingle ended,PB15的ADC2的通道IN15前打勾。这样ADC在STM32CubeMX的设置就完成了。



手搓代码


利用STM32CubeMX生成号代码后,我们新建两个文件来单独写ADC的代码,但是要注意的是,新文件不能命名为adc.c和adc.h,因为用STM32CubeMX会生成adc.c和adc.h的库文件,为例使命名不冲突,就想要命名为其他名字。


       如下所示,ADC的有效代码只有4行,而且也没什么难点,等一下我们直接以十一届省赛左例子来使用一下,这里我们来讨论一下这四行代码中的最后一句,这个算式为什么这样写呢。


       我们通过HAL_ADC_GetValue();这个函数获取的是一个电压值,而存储这个电压值是12位的空间,也就是说这个函数理论上取出来的电压值在0~4095之间。3.3是这个电位器的实际最大电压为3.3。因此我们除以4096再乘3.3就知道这个电压值对应的真实电压数值是多少啦。


double getADC(ADC_HandleTypeDef *pin)
{
  uint adc;
  HAL_ADC_Start(pin);
  adc = HAL_ADC_GetValue(pin);
  return adc*3.3/4096;
}


实例运用


题目

       这里要求使用PB0来检测电位器R37的电压信号,我们在STM32CubeMX上的PB0接口选择ADC_IN15就可以啦,这里我们改一下题目,将两个电位器都测一下


       使用STM32微控制器ADC通道(PB15和PB12)分别测量竞赛板电位器R37与R38输出的模拟电压信号。并在LCD屏中显示出来。

代码实现

aadc.c中依旧是我们上面提到的获取ADC的函数

double getADC(ADC_HandleTypeDef *pin)
{
  uint adc;
  HAL_ADC_Start(pin);
  adc = HAL_ADC_GetValue(pin);
  return adc*3.3/4096;
}

    在lcd.c中调用getADC并显示,getADC(&hadc1)获取的是R38电位器的模拟电压信号,getADC(&hadc2)获取的是R37电位器的模拟电压信号。

void disp_proc()
{
  char text[30];
  sprintf(text,"      Para   ");
  LCD_DisplayStringLine(Line4, (uint8_t *)text);
  sprintf(text,"    V: %.2f",getADC(&hadc1));
  LCD_DisplayStringLine(Line6, (uint8_t *)text);
  sprintf(text,"    V: %.2f",getADC(&hadc2));
  LCD_DisplayStringLine(Line7, (uint8_t *)text);
}
相关文章
|
数据可视化 关系型数据库 MySQL
嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议数据可视化
通过本文的介绍,我们详细讲解了如何结合嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议,实现数据的采集、传输、存储和可视化。这种架构在物联网项目中非常常见,可以有效地处理和展示实时数据。希望本文能帮助您更好地理解和应用这些技术,构建高效、可靠的数据处理和可视化系统。
900 82
|
JSON JavaScript 前端开发
蓝桥杯web组赛题解析和杯赛技巧
本文作者是一位自学前端两年半的大一学生,在第十五届蓝桥杯Web组比赛中获得省一和国三。文章详细解析了比赛题纲,涵盖HTML、CSS、JavaScript、Echarts和Vue等技术要点,并分享了备赛技巧和比赛经验。作者强调了多写代码和解题思路的重要性,同时提供了省赛和国赛的具体流程及注意事项。希望对参赛者有所帮助。
1667 11
|
传感器 芯片
嵌入式通信协议全解析:SPI、I²C、UART详解(附带面试题)
通信是指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递。从广义上来说,通信是指需要信息的双方或多方在不违背各自意愿的情况下采用任意方法、任意媒质,将信息从某方准确安全地传送到另方。在出现电波传递通信后,通信被单一解释为信息的传递,是指由一地向另一地进行信息的传输与交换,其目的是传输消息。通信方式包括利用“电”来传递消息的电信,这种通信具有迅速、准确、可靠等特点,且几乎不受时间、地点、空间、距离的限制,因而得到了飞速发展和广泛应用。
8717 0
|
存储 数据管理 数据库
CRUD操作实战:从理论到代码实现的全面解析
【7月更文挑战第4天】在软件开发领域,CRUD代表了数据管理的四个基本操作:创建(Create)、读取(Read)、更新(Update)和删除(Delete)。这四个操作构成了大多数应用程序数据交互的核心。本文将深入讲解CRUD概念,并通过一个简单的代码示例,展示如何在实际项目中实现这些操作。我们将使用Python语言结合SQLite数据库来演示,因为它们的轻量级特性和易用性非常适合教学目的。
1889 2
|
存储 数据安全/隐私保护 芯片
【STM32】详解嵌入式中FLASH闪存的特性和代码示例
【STM32】详解嵌入式中FLASH闪存的特性和代码示例
|
Web App开发 传感器 Linux
【嵌入式软件工程师面经】STM32单片机
【嵌入式软件工程师面经】STM32单片机
915 1
数据结构学习记录——堆的删除(思路图解、代码实现、逐段解析)
数据结构学习记录——堆的删除(思路图解、代码实现、逐段解析)
534 1
|
机器学习/深度学习 存储 并行计算
深入解析xLSTM:LSTM架构的演进及PyTorch代码实现详解
xLSTM的新闻大家可能前几天都已经看过了,原作者提出更强的xLSTM,可以将LSTM扩展到数十亿参数规模,我们今天就来将其与原始的lstm进行一个详细的对比,然后再使用Pytorch实现一个简单的xLSTM。
1112 2
|
缓存 网络协议 算法
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)

推荐镜像

更多
  • DNS