(蓝桥杯)STM32G431RBT6(ADC采集)

一、CubeMx配置

(1)最基础的配置

 (2)ADC配置
2.1原理图

        PB15、PB12是ADC的端口 

 2.2配置

 

 

 

 PB12同上

 2.3GPIO端口配置

 

(3) 注意

        因为ADC转换需要LCD显示,所以我们需要调用LCD的文件到工程里面去

        并且要注意,首先要把LCD的头文件包含进去,然后要记得写LCD的初始化函数

二、ADC函数解释

(1)HAL_ADC_Start(ADC_HandleTypeDef *hadc)

        HAL_ADC_Start(ADC_HandleTypeDef *hadc) 这个括号里面的东西就是句柄,可以在里面写入参数

        这个函数是用来启动ADC转换的

 HAL_ADC_Start (&hadc1);
 HAL_ADC_Start (&hadc2);
(2)HAL_ADC_PollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout)

        HAL_ADC_PollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout)这个括号里面先写句柄,然后写时间,这个时间是超时时间,超过这个时间就不再转换了,以ms为单位

         这个函数是用来查询转换结果的

      HAL_ADC_PollForConversion(&hadc1,2);
	  HAL_ADC_PollForConversion(&hadc2,2);
 (3)HAL_ADC_GetValue(const ADC_HandleTypeDef *hadc)

        HAL_ADC_GetValue(const ADC_HandleTypeDef *hadc)这个括号里面也是写句柄的

·        这个函数是用来获取数据的

 HAL_ADC_GetValue(&hadc1);
 HAL_ADC_GetValue(&hadc2);

三、LCD函数

(1)LCD初始化和清屏函数 

 

  LCD_Init ();
  LCD_Clear(Black);
(2)#include "stdio.h"头文件

#include "stdio.h"
(3)定义字符串变量 

char databuff[30];
(4)sprintf函数

         用sprintf一定要写#include“stdio.h”这个头文件

	  sprintf(databuff,"     ADC1:%.2fV",HAL_ADC_GetValue(&hadc1)/4096*3.3);
	  LCD_DisplayStringLine(Line6,(uint8_t *)databuff );

        databuff是这个函数的字符长度,然后开始打印:小数点后两位的浮点数,把获取ADC值的函数放在括号里面除以4096(因为它是浮点数)再去乘以3.3,因为接的电压是3.3V

        下面的LCD显示函数就是显示databuff这个字符串,如果没有这个LCD_DisplayStringLine这个函数的话,我的LCD就无法显现出来我的这个函数

四、主体执行程序函数(有错误)

        但是这个函数的现象显示出的数值就是0

       因为HAL_ADC_GetValue这个函数获取到的值是一个整数,用这个整数去除以4096,而且这个值不会比4096大,所以用获取到的值去除以4096得到的值是不足1的,所以相除的值就为0

        想让整数除以整数,得到的数是浮点数的话,需要除以4096.0,要加上一个.0,这样得到的现象才是正确的

        且旋转下方的可调电阻,可以改变ADC采集到的值

五、正确函数代码

main.c函数

         #include “lcd.h”是包含在main.h里面的

#include "stdio.h"

         int 函数里面写LCD的函数

  LCD_Init ();
  LCD_Clear(Black);

 

         while循环里面的主体函数

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

    /* USER CODE BEGIN 3 */
	  HAL_ADC_Start (&hadc1);//启动ADC的转换
	  HAL_ADC_Start (&hadc2);
	  
	  HAL_ADC_PollForConversion(&hadc1,2);//查询转换结果
	  HAL_ADC_PollForConversion(&hadc2,2);
  
	  sprintf(databuff,"     ADC1:%.2fV",HAL_ADC_GetValue(&hadc1)/4096.0*3.3);
	  LCD_DisplayStringLine(Line6,(uint8_t *)databuff );
	  
	  sprintf(databuff,"     ADC2:%.2fV",HAL_ADC_GetValue(&hadc2)/4096.0*3.3);
	  LCD_DisplayStringLine(Line8,(uint8_t *)databuff );
	  
	  
  }
  /* USER CODE END 3 */

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值