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
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于STM32F103VET6的设计可以涉及到很多应用,下面我将介绍一种可能的设计方案。 STM32F103VET6是一款基于ARM Cortex-M3内核的微控制器,具有72MHz的主频和512KB的Flash存储空间。它集成了丰富的外设接口,包括多个串行通信接口(如UART、SPI、I2C)、模拟输入输出接口(如ADC、DAC)、定时器等,并且支持多种外部设备的协议,如USB、CAN等。 以智能家居系统为例,我们可以将STM32F103VET6用于设计一个控制中心。这个控制中心通过串行通信接口与各个智能设备(如灯光、门锁、温湿度传感器等)连接,并通过WiFi或蓝牙与用户的手机或电脑进行通信。 首先,我们可以使用STM32F103VET6的UART接口与各个智能设备进行通信。我们可以将每个设备连接到一个UART引脚,并采用相应的通信协议来进行控制和数据交换。例如,我们可以通过UART来向灯光设备发送指令控制其开关和亮度,或是接收温湿度传感器的数据。 其次,我们可以使用STM32F103VET6的GPIO和ADC接口来接收来自用户的输入。通过按钮或旋转开关等输入设备,用户可以向控制中心发送指令。通过ADC接口,我们可以接收模拟信号,如光敏传感器的光照强度,用于自动化控制。 最后,我们可以通过STM32F103VET6的WiFi或蓝牙接口与用户的手机或电脑进行通信。通过这种方式,用户可以通过APP或网页来远程控制智能家居设备。STM32F103VET6可以作为一个嵌入式Web服务器,接收来自用户的指令,并通过UART接口发送给相应的设备。同时,STM32F103VET6也可以向用户传输传感器数据,让用户可以随时了解家里的温度、湿度以及其他信息。 综上所述,基于STM32F103VET6的设计可以实现智能家居系统中控制中心的功能。通过它的丰富接口和强大的处理能力,我们可以方便地实现各种智能设备之间的通信和控制。 ### 回答2: stm32f103vet6是一款基于ARM Cortex-M3内核的高性能微控制器。它具有丰富的外设和强大的计算能力,常适用于各种嵌入式系统设计。 在基于stm32f103vet6的设计中,首先需要了解该微控制器的主要特点和功能。它具有72MHz的主频,512KB的闪存和64KB的SRAM,可以满足大多数嵌入式应用的需求。此外,它还集成了多个串行接口(如USART、SPI和I2C)、通用定时器和PWM输出等常用外设,方便了与外部设备的通信和控制。 基于stm32f103vet6的设计通常需要先进行电路设计和原理图绘制。可以根据具体需求选择合适的外设和接口,并将它们与stm32f103vet6连接起来。例如,如果需要与传感器进行数据交互,可以选择合适的GPIO引脚作为数据线,并通过SPI或I2C接口进行通信。接着,根据原理图进行电路板的设计和制作。 在设计的同时,还需要考虑软件开发。stm32f103vet6支持多种开发环境,如Keil MDK和STM32CubeIDE。在软件开发中,需要编写代码来配置和控制各个外设,实现系统的各项功能。可以使用C语言或汇编语言来编程,根据需要选择合适的编程方法。 此外,还需要进行系统测试和调试。通过连接上开发板和外部设备,进行各项功能测试和性能评估。如果出现问题,需要通过调试工具(如Oscilloscope和串口调试助手)来进行故障排查。 综上所述,基于stm32f103vet6的设计需要进行电路设计、软件开发、系统测试等步骤。它具有强大的性能和丰富的外设,适用于各种嵌入式系统,例如智能家居、工业自动化等。 ### 回答3: 基于STM32F103VET6的设计是一种基于ARM Cortex-M3内核的嵌入式系统设计,其具有高性能和低功耗的特点。它采用了72MHz的主频,具有512KB的Flash存储器和64KB的SRAM,可以满足各种复杂的应用需求。 STM32F103VET6可以用于各种各样的应用,例如工业自动化、智能家居、医疗设备和消费类电子产品等。它能够支持多种通信接口,包括UART、SPI、I2C和USB,方便与外部设备进行数据交互。 在设计中,可以使用STM32CubeMX软件进行硬件的配置和引脚映射,使得系统的搭建更加简单和快捷。同时,STM32F103VET6还提供了丰富的外设功能,如定时器、ADC和DMA等,可以满足不同应用的需求。 在软件开发方面,可以使用Keil MDK等集成开发环境进行程序的编写和调试。STM32F103VET6的编程语言可以选择C语言或者汇编语言进行开发。此外,ST公司还提供了一系列的开发板和示例代码,方便开发者快速上手并且加速项目的进展。 总体而言,基于STM32F103VET6的设计具有高性能、低功耗和灵活性的特点。通过合理的硬件配置和编程开发,可以实现多种不同应用的嵌入式系统设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值