STM32F103VET6基于STM32CubeMX 配置非DMA方式获取内部温度
Posted perseverance52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32F103VET6基于STM32CubeMX 配置非DMA方式获取内部温度相关的知识,希望对你有一定的参考价值。
STM32F103VET6基于STM32CubeMX 配置非DMA方式获取内部温度
🛠STM32CubeMX配置
-
🌿勾选温度传感器通道。
-
🌿参数配置选项参考上图。
-
🌿配置串口1作为温度信息输出。
📝业务代码
- 🎋在adc.h文件对应位置添加如下两个函数方法:
/* USER CODE BEGIN Prototypes */
uint32_t Get_Adc(ADC_HandleTypeDef* hadc);
uint32_t Get_Temp(void);
/* USER CODE END Prototypes */
- 🎋在adc.c中对应位置放置如下实现函数内容:
/* USER CODE BEGIN 1 */
/*********************************************************************************************************
** Function name: Get_Adc
** Descriptions: 获取ADC采样值
** input parameters:ch:通道
** Returned value: 转换结果
*********************************************************************************************************/
uint32_t Get_Adc(ADC_HandleTypeDef* hadc)
//开启ADC1
HAL_ADC_Start(hadc);
//等待ADC转换完成,超时为50ms
HAL_ADC_PollForConversion(hadc,50);
//判断ADC是否转换成功
if(HAL_IS_BIT_SET(HAL_ADC_GetState(hadc),HAL_ADC_STATE_REG_EOC))
//读取值
return HAL_ADC_GetValue(hadc);
return 0;
/*********************************************************************************************************
** Function name:Get_Temp
** Descriptions: 取10次采样值,然后取平均
** input parameters:none
** Returned value: 10次采样取平均值
*********************************************************************************************************/
uint32_t Get_Temp(void)
uint32_t temp_val=0;
uint8_t t;
for(t=0;t<10;t++)
temp_val += Get_Adc(&hadc1);
HAL_Delay(5);
return temp_val/10;
/* USER CODE END 1 */
- 🎋在usart.c文件中添加printf重映射打印函数,并在Target选项中勾选
Use MICRO LIB
,在main.c中包含stdio.h文件。
/* USER CODE BEGIN 1 */
#include <stdio.h>
int fputc(int ch,FILE *f)
uint32_t temp = ch;
HAL_UART_Transmit(&huart1,(uint8_t *)&temp,1,0xFFFF); //huart1是串口的句柄
HAL_Delay(2);
return ch;
/* USER CODE END 1 */
- 📗main主函数代码如下:
int main(void)
/* USER CODE BEGIN 1 */
float ADC_ConvertedValueLocal=0.0;
float Temperature=0.0;
uint32_t ADC_Value;
/* 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_USART1_UART_Init();
/* USER CODE BEGIN 2 */
HAL_ADCEx_Calibration_Start(&hadc1); //校准ADC
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
/*****
HAL_ADC_Start(&hadc1); //手动开启ADC采集
HAL_ADC_PollForConversion(&hadc1,50); //等待转换完成
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
ADC_Value = HAL_ADC_GetValue(&hadc1);
ADC_ConvertedValueLocal =(float) ADC_Value/4096*3.3; // 读取转换的AD值
printf("Current AD_value = %u \\t voltage:%.2f V \\r\\n", ADC_Value,ADC_ConvertedValueLocal);
Temperature = (1.43 - ADC_Value*3.3/4096)/0.0043 + 25 ;//计算方法2
printf("Tmperture =%.2f\\r\\n",Temperature);
*****/
ADC_Value = Get_Temp();
Temperature = (1.43 - ADC_Value*3.3/4096)/0.0043 + 25 ;//计算方法2
printf("Tmperture =%.2f\\r\\n",Temperature);
HAL_Delay(1000);
/* USER CODE END 3 */
- 🌼串口打印
⛳工程源码
链接:https://pan.baidu.com/s/1h5TaQVqEQW4prGd1kcvYGg
提取码:xya0
以上是关于STM32F103VET6基于STM32CubeMX 配置非DMA方式获取内部温度的主要内容,如果未能解决你的问题,请参考以下文章
STM32F103VET6基于STM32CubeMX创建EXTI外部中断工程
STM32F103VET6基于STM32CubeMX RTC时钟秒更新中断使用示例
STM32F103VET6基于STM32CubeMX 配置非DMA方式获取内部温度
STM32F103VET6基于STM32CubeMX 配置硬件I2C驱动ssd1306 OLED屏幕