ST意法半导体
直播中

李娟

7年用户 1375经验值
私信 关注
[问答]

STM32F373 ADC内部通道仅测量0xFFF怎么解决?

我正在使用 STM32F373CCT 开发一个项目。我需要使用内部 ADC 温度传感器补偿从 SDADC 信号读取的信号。
问题是我只从内部温度传感器和参考电压通道获得值 0xFFF。
我已经检查了 ADC 配置位 ADC_CR2_TSVREFE。它被设置并且在 ADC 打开之前被设置。
我还使用 DVM 检查了 VDDA 和 VSSA 引脚。它们相应地连接到 GND、3.3V VCC。
此外,ADC 以 10MHz 运行,239.5 个周期的采样时间应远大于内部温度传感器所需的 17.1µs 采样时间。
项目的更多信息:
我将 SDADC 与内部 1.8V 参考一起使用,但该参考应与正常的 ADC 电压分开。
我正在使用当前的 STMCubeIDE 1.5.0 和 STM32Cube MCU Package for STM32F3 in Version 1.11.2
我的简单测试代码:
  • int main(void)
  • {
  •   /* MCU Configuration--------------------------------------------------------*/
  •   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  •   HAL_Init();
  •   /* Configure the system clock */
  •   SystemClock_Config();
  •   /* Initialize all configured peripherals */
  •   MX_GPIO_Init();
  •   MX_USART3_UART_Init();
  •   MX_ADC1_Init();
  •   /* Infinite loop */
  •   while (1)
  •   {
  •           HAL_Delay(100);
  •           HAL_ADC_Start(&hadc1);
  •           HAL_Delay(100);
  •           HAL_ADC_PollForConversion(&hadc1, 1000);
  •           HAL_Delay(100);
  •           uint32_t temp = HAL_ADC_GetValue(&hadc1);
  •    }
  • }
对应的ADC.c:
  • /**
  •   ******************************************************************************
  •   * File Name          : ADC.c
  •   * Description        : This file provides code for the configuration
  •   *                      of the ADC instances.
  •   ******************************************************************************
  •   * @attention
  •   *
  •   *

    © Copyright (c) 2020 STMicroelectronics.
  •   * All rights reserved.
  •   *
  •   * This software component is licensed by ST under BSD 3-Clause license,
  •   * the "License"; You may not use this file except in compliance with the
  •   * License. You may obtain a copy of the License at:
  •   *                        opensource.org/licenses/BSD-3-Clause
  •   *
  •   ******************************************************************************
  •   */
  • /* Includes ------------------------------------------------------------------*/
  • #include "adc.h"
  • /* USER CODE BEGIN 0 */
  • /* USER CODE END 0 */
  • ADC_HandleTypeDef hadc1;
  • /* ADC1 init function */
  • void MX_ADC1_Init(void)
  • {
  •   ADC_ChannelConfTypeDef sConfig = {0};
  •   /** Common config
  •   */
  •   hadc1.Instance = ADC1;
  •   hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  •   hadc1.Init.ContinuousConvMode = DISABLE;
  •   hadc1.Init.DiscontinuousConvMode = DISABLE;
  •   hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  •   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  •   hadc1.Init.NbrOfConversion = 1;
  •   if (HAL_ADC_Init(&hadc1) != HAL_OK)
  •   {
  •     Error_Handler();
  •   }
  •   /** Configure Regular Channel
  •   */
  •   sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
  •   sConfig.Rank = ADC_REGULAR_RANK_1;
  •   sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
  •   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  •   {
  •     Error_Handler();
  •   }
  • }
  • void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
  • {
  •   if(adcHandle->Instance==ADC1)
  •   {
  •   /* USER CODE BEGIN ADC1_MspInit 0 */
  •   /* USER CODE END ADC1_MspInit 0 */
  •     /* ADC1 clock enable */
  •     __HAL_RCC_ADC1_CLK_ENABLE();
  •   /* 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();
  •   /* USER CODE BEGIN ADC1_MspDeInit 1 */
  •   /* USER CODE END ADC1_MspDeInit 1 */
  •   }
  • }
  • /* USER CODE BEGIN 1 */
  • /* USER CODE END 1 */
  • /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
如上所述,将通道更改为内部 ADC 参考测量不会改变测量结果。它始终测量 0xFFF。
有人可以帮助我,或者有一些线索,接下来要检查什么才能使用内部温度传感器吗?









回帖(1)

汪芳

2023-1-9 10:47:16
对于内部 ADC 温度或参考电压测量有类似问题的任何人。
存在电压大于 VCC 或小于 VSS 的引脚。(2 个输入在没有适当电压电平的情况下连接。)
根据支持,当任何可能的 ADC 引脚(即使引脚未设置为备用功能)上存在电压时,就会发生这种情况。
将所有未使用的引脚设置为输入并激活下拉电阻(针对所有引脚上定义的电压电平)解决了问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分