以下的都是我自己一边查资料,一边自己试的,不保证正确性
上面是电压检测电路和CubeMX的配置
#include “main.h”
#include “adc.h”
#include “tim.h”
#include “usart.h”
#include “gpio.h”
/* Private includes ———————————————————-*/
/* USER CODE BEGIN Includes */
#include “stdio.h”
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart3,(uint8_t *)&ch,1,0xFFFF);//??????
return ch;
}
/* USER CODE END Includes */
/* Private typedef ———————————————————–*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ————————————————————*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro ————————————————————-*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ———————————————————*/
/* USER CODE BEGIN PV */
/* USER CODE END PV */
/* Private function prototypes ———————————————–*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ———————————————————*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
float voltage;
int value_adc;
/* USER CODE END 1 */
/* MCU Configuration——————————————————–*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ADC_Init();
MX_USART3_UART_Init();
MX_TIM3_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_ADC_Start(&hadc);
if(HAL_OK ==HAL_ADC_PollForConversion(&hadc,50))
{
value_adc=HAL_ADC_GetValue(&hadc);
voltage=(float)value_adc/4095*3.3*11;
}
printf(“%f\r\n”,voltage);
printf(“%d\r\n”,value_adc);
HAL_Delay(500);
}
/* USER CODE END 3 */
}
ADC检测组要用到两个函数HAL_ADC_Start 。HAL_ADC_PollForConversion 和 HAL_ADC_GetValue
以上三个函数的使用说明来自官方
程序运行的结果如下
在网上查看ADC使用例程时候,发现基本都会加HAL_ADCEx_Calibration_Start()这个校准函数,但加上这个函数后,编译出现告警,后面查了一下资料好像是我这个型号的单片机没有这个函数(注:不确认是否正确这个说法,我用的L151系列)
然后我在网上查了一下 一种校准方法:(没有实际试)参考链接如下