STM32F103VET6基于STM32CubeMX 配置非DMA方式获取内部温度

STM32F103VET6基于STM32CubeMX 配置非DMA方式获取内部温度


🛠STM32CubeMX配置

  1. 🌿勾选温度传感器通道。
    在这里插入图片描述

  2. 🌿参数配置选项参考上图。

  3. 🌿配置串口1作为温度信息输出。

📝业务代码

  1. 🎋在adc.h文件对应位置添加如下两个函数方法:
/* USER CODE BEGIN Prototypes */
uint32_t Get_Adc(ADC_HandleTypeDef* hadc);
uint32_t Get_Temp(void);
/* USER CODE END Prototypes */
  1. 🎋在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 */
  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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值