HAL 库 ADC检测电压以及ADC校准问题 |
您所在的位置:网站首页 › adc校准电路 › HAL 库 ADC检测电压以及ADC校准问题 |
以下的都是我自己一边查资料,一边自己试的,不保证正确性 上面是电压检测电路和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 |