一、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 */