尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

【STM32U385RG 测评】——7.获取STM32U385RG 板子温度传感器温度值

【STM32U385RG 测评】——7.获取STM32U385RG 板子温度传感器温度值 很多人都不知道STM32芯片内部就有一个温度传感器所以大多数人的做法其实就是外接温湿度传感器来做测评其实如果不是必须做项目是没有必要专门外接温度传感器来测试板子温度的因为可以直接使用STM32内部的温度传感器即可。STM32 内部有一个温度传感器可以用来测量 CPU 及周围的温度。这个温度传感器会产生随温度线性变化的电压转换的电压范围在 2~3.6V之间。 这个温度传感器的主要特性如下1对于 STM32F103 来说温度传感器在内部和 ADC1_IN16 输入通道相连接此通道把传感器输出的电压转换成数字值。2温度传感器模拟输入推荐采样时间是 17.1us。3STM32F103 内部温度传感器支持的温度范围为-40~125 度精度为±1.5℃左右。4温度传感器输出电压随温度线性变化由于生产过程的变化温度变化曲线的偏移在不同芯片上会有不同(最多相差45°C)。5内部温度传感器更适合于检测温度的变化而不是测量绝对的温度。如果需要测量精确的温度应该使用一个外置的温度传感器。打开STM32U385xx数据手册里面有详细的描述其中 Avg_Slope 2.5mV/°C 0.0025V30 752mV 0.752V对应的计算公式需要换算一下温度°C {(V30 -Vsensor)/Avg_Slope} 30 {(0.752 - Vsensor)/0.0025} 30大家自己进行换算实现即可按照上面的公式就可以计算出准确的温度值1.打开cubemx使能ADC2.时钟96MHZ3.使能串口1作为调试接口4.核心代码如下/* Includes ------------------------------------------------------------------*/#include main.h#include adc.h#include icache.h#include usart.h#include gpio.h/* Private includes ----------------------------------------------------------*//* USER CODE BEGIN Includes */#include esp8266.h#include string.h/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*//* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*//* USER CODE BEGIN PD *//* Definitions of environment analog values *//* Value of analog reference voltage (Vref), connected to analog voltage *//* supply Vdda (unit: mV). */#define VDDA_APPLI (3300UL)/* Definitions of data related to this example *//* Init variable out of expected ADC conversion data range */#define VAR_CONVERTED_DATA_INIT_VALUE (__LL_ADC_DIGITAL_SCALE(LL_ADC_RESOLUTION_12B) 1)/* USER CODE END PD *//* Private macro -------------------------------------------------------------*//* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE BEGIN PV *//* Variables for ADC conversion data */__IO uint16_t uhADCxConvertedData VAR_CONVERTED_DATA_INIT_VALUE; /* ADC group regular conversion data *//* Variables for ADC conversion data computation to physical values */__IO int16_t hADCxConvertedData_Temperature_DegreeCelsius 0UL; /* Value of temperature calculated from ADC conversion data (unit: degree Celsius) */__IO int16_t hADCxConvertedData_Temperature 0UL;/* 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 */uint16_t time 0;/* 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_ADC1_Init();MX_ICACHE_Init();MX_UART5_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 *//* Perform ADC calibration */if (HAL_ADCEx_Calibration_Start(hadc1,ADC_SINGLE_ENDED) ! HAL_OK){/* Calibration Error */Error_Handler();}/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* Init variable containing ADC conversion data */uhADCxConvertedData VAR_CONVERTED_DATA_INIT_VALUE;/* Start ADC group regular conversion */if (HAL_ADC_Start(hadc1) ! HAL_OK){/* Error: ADC conversion start could not be performed */Error_Handler();}/* Poll for conversion completion */if (HAL_ADC_PollForConversion(hadc1, 10) ! HAL_OK){/* Error: ADC conversion not completed set on time */Error_Handler();}/* Retrieve ADC conversion data *//* (data scale corresponds to ADC resolution: 12 bits) */uhADCxConvertedData HAL_ADC_GetValue(hadc1);/* Turn LED on after ADC conversion completion */HAL_Delay(200);//printf(Sensor: Adc %u\r\n, uhADCxConvertedData);/* Computation of ADC conversions raw data to physical values *//* using LL ADC driver helper macro. */hADCxConvertedData_Temperature_DegreeCelsius __LL_ADC_CALC_TEMPERATURE(VDDA_APPLI, uhADCxConvertedData, LL_ADC_RESOLUTION_12B);hADCxConvertedData_Temperature hADCxConvertedData_Temperature_DegreeCelsius15;printf(STM32U385板子温度是: %d℃\r\n, hADCxConvertedData_Temperature_DegreeCelsius);5.编译烧录代码6.打开串口助手可以看到板子温度值为31度非常的准确---------------------作者龙鳞铁碎牙链接https://bbs.21ic.com/icview-3477586-1-1.html来源21ic.com此文章已获得原创/原创奖标签著作权归21ic所有任何人未经允许禁止转载。
返回列表