• 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
    • 2
    • 3
    • 4
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    1. 🎋在usart.c文件中添加printf重映射打印函数,并在Target选项中勾选Use MICRO LIB,在main.c中包含stdio.h文件。
    /* USER CODE BEGIN 1 */
    #include 
    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 */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 📗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 */
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 🌼串口打印
      在这里插入图片描述

    ⛳工程源码

    链接:https://pan.baidu.com/s/1h5TaQVqEQW4prGd1kcvYGg 
    提取码:xya0
    
    • 1
    • 2
  • 相关阅读:
    690条中医疾病疾病知识问答ACCESS\EXCEL数据库
    达索系统SOLIDWORKS Electrical机电一体化协同设计
    不务正业,捣鼓了一个破网站,全过程记录
    用友U8与MES、PLM系统的成功对接实例
    uni-app 背景音频 熄屏或者退回桌面之后不在播放
    MobileViT v2导出onnx模型时遇Col2Im算子无法导出问题
    【仿牛客网笔记】 Spring Boot进阶,开发社区核心功能-发布帖子
    C和指针 第14章 预处理器 14.1 预定义符号
    CDGA|促进数据生产要素在大湾区自由流动,培养数据治理人才先行
    网络基础学习系列三http
  • 原文地址:https://blog.csdn.net/weixin_42880082/article/details/127790710