| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- /* USER CODE BEGIN Header */
- /**
- ******************************************************************************
- * @file adc.c
- * @brief This file provides code for the configuration
- * of the ADC instances.
- ******************************************************************************
- * @attention
- *
- * Copyright (c) 2026 STMicroelectronics.
- * All rights reserved.
- *
- * This software is licensed under terms that can be found in the LICENSE file
- * in the root directory of this software component.
- * If no LICENSE file comes with this software, it is provided AS-IS.
- *
- ******************************************************************************
- */
-
- #include "math.h"
- /* USER CODE END Header */
- /* Includes ------------------------------------------------------------------*/
- #include "adc.h"
- /* USER CODE BEGIN 0 */
- #define ADC1_CHANNEL_COUNT 2 //
- #define ADC_SAMPLING_TIMES 10 //
- uint16_t ADC1_Converted_Value[ADC1_CHANNEL_COUNT * ADC_SAMPLING_TIMES];
- /* USER CODE END 0 */
- ADC_HandleTypeDef hadc1;
- DMA_HandleTypeDef hdma_adc1;
- /* ADC1 init function */
- void MX_ADC1_Init(void)
- {
- /* USER CODE BEGIN ADC1_Init 0 */
- /* USER CODE END ADC1_Init 0 */
- ADC_ChannelConfTypeDef sConfig = {0};
- /* USER CODE BEGIN ADC1_Init 1 */
- /* USER CODE END ADC1_Init 1 */
- /** Common config
- */
- hadc1.Instance = ADC1;
- hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
- hadc1.Init.ContinuousConvMode = ENABLE;
- hadc1.Init.DiscontinuousConvMode = DISABLE;
- hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
- hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
- hadc1.Init.NbrOfConversion = 2;
- if (HAL_ADC_Init(&hadc1) != HAL_OK)
- {
- Error_Handler();
- }
- /** Configure Regular Channel
- */
- sConfig.Channel = ADC_CHANNEL_12;
- sConfig.Rank = ADC_REGULAR_RANK_1;
- sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /** Configure Regular Channel
- */
- sConfig.Channel = ADC_CHANNEL_13;
- sConfig.Rank = ADC_REGULAR_RANK_2;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN ADC1_Init 2 */
- /* USER CODE END ADC1_Init 2 */
- }
- void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
- {
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(adcHandle->Instance==ADC1)
- {
- /* USER CODE BEGIN ADC1_MspInit 0 */
- /* USER CODE END ADC1_MspInit 0 */
- /* ADC1 clock enable */
- __HAL_RCC_ADC1_CLK_ENABLE();
- __HAL_RCC_GPIOC_CLK_ENABLE();
- /**ADC1 GPIO Configuration
- PC2 ------> ADC1_IN12
- PC3 ------> ADC1_IN13
- */
- GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
- /* ADC1 DMA Init */
- /* ADC1 Init */
- hdma_adc1.Instance = DMA1_Channel1;
- hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
- hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
- hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
- hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
- hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
- hdma_adc1.Init.Mode = DMA_CIRCULAR;
- hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
- if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
- {
- Error_Handler();
- }
- __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);
- /* USER CODE BEGIN ADC1_MspInit 1 */
- /* USER CODE END ADC1_MspInit 1 */
- }
- }
- void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
- {
- if(adcHandle->Instance==ADC1)
- {
- /* USER CODE BEGIN ADC1_MspDeInit 0 */
- /* USER CODE END ADC1_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_ADC1_CLK_DISABLE();
- /**ADC1 GPIO Configuration
- PC2 ------> ADC1_IN12
- PC3 ------> ADC1_IN13
- */
- HAL_GPIO_DeInit(GPIOC, GPIO_PIN_2|GPIO_PIN_3);
- /* ADC1 DMA DeInit */
- HAL_DMA_DeInit(adcHandle->DMA_Handle);
- /* USER CODE BEGIN ADC1_MspDeInit 1 */
- /* USER CODE END ADC1_MspDeInit 1 */
- }
- }
- /* USER CODE BEGIN 1 */
- void ADC_Inner_start(void)
- {
- HAL_ADC_Stop_DMA(&hadc1);
- HAL_Delay(10);
- HAL_StatusTypeDef ret;
- ret = HAL_ADC_Start_DMA(&hadc1, (uint32_t*)ADC1_Converted_Value, ADC1_CHANNEL_COUNT * ADC_SAMPLING_TIMES);
- if(ret)
- {
- Error_Handler();
- }
- }
- float getADC_Chanel_value(unsigned int ch){
- unsigned int max;
- unsigned int min;
- unsigned int sum;
- if(ch < ADC1_CHANNEL_COUNT){
- max = ADC1_Converted_Value[0];
- min = ADC1_Converted_Value[0];
- sum = ADC1_Converted_Value[0];
- for(unsigned int i=1;i<ADC_SAMPLING_TIMES;i++){
- if(max < ADC1_Converted_Value[i*ADC1_CHANNEL_COUNT+ch])max=ADC1_Converted_Value[i*ADC1_CHANNEL_COUNT+ch];
- if(min > ADC1_Converted_Value[i*ADC1_CHANNEL_COUNT+ch])min=ADC1_Converted_Value[i*ADC1_CHANNEL_COUNT+ch];
- sum += ADC1_Converted_Value[i*ADC1_CHANNEL_COUNT+ch];
- }
- }
- sum -= min;
- sum -= max;
- sum = sum/(ADC_SAMPLING_TIMES - 2);
-
- float Rt=0; //NTC电阻
- float R=10000; //10K固定阻值电阻
- float T0=273.15+25; //转换为开尔文温度
- float B=3980; //B值 >50°
- float Ka=273.15; //K值
- float temp;
- float VR=0; //电压值
- float NTCVoltage=0; //电压值
-
- NTCVoltage=(sum*3300/4096);
- VR=NTCVoltage/1000.00;
- Rt=10000*VR/(3.3-VR);
- temp=1/(1/T0+log(Rt/R)/B)-Ka; //计算温度
-
-
-
- return temp;
- }
- /* USER CODE END 1 */
|