HAL 库 ADC检测电压以及ADC校准问题

您所在的位置:网站首页 adc校准电路 HAL 库 ADC检测电压以及ADC校准问题

HAL 库 ADC检测电压以及ADC校准问题

2023-10-18 20:22| 来源: 网络整理| 查看: 265

以下的都是我自己一边查资料,一边自己试的,不保证正确性

上面是电压检测电路和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系列)

 

 

然后我在网上查了一下 一种校准方法:(没有实际试)参考链接如下

外部供电不稳定时准确测量ADC电压基于STM32L151最新HAL库实现方案_ioterr的博客-CSDN博客



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3