stm32f103rct6adc采集片内温度
时间: 2025-01-22 22:30:14 浏览: 57
### STM32F103RCT6 使用 ADC 采集片内温度传感器
为了使用 STM32F103RCT6 的 ADC 来读取内部温度传感器的数据,需要配置 ADC 并启动转换过程。具体实现涉及初始化 ADC 和设置通道来读取温度传感器电压。
#### 初始化 ADC 配置
首先,在 HAL 库中初始化 ADC 模块并启用所需的时钟:
```c
// 定义全局变量用于存储ADC值和计算后的温度值
uint32_t adc_raw_value;
float temperature;
void MX_ADC_Init(void)
{
hadc.Instance = ADC1; // 设置使用的ADC实例
// ADC参数结构体初始化
ADC_ChannelConfTypeDef sConfig = {0};
// ADC公共配置
hadc.Init.ScanConvMode = DISABLE; // 单次模式
hadc.Init.ContinuousConvMode = DISABLE; // 禁用连续转换
hadc.Init.DiscontinuousConvMode = DISABLE; // 不间断模式关闭
hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; // 软件触发
hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; // 右对齐数据
hadc.Init.NbrOfConversion = 1; // 数量为1
if (HAL_ADC_Init(&hadc) != HAL_OK){
Error_Handler(); // 错误处理函数
}
// 温度传感器连接到特定的ADC输入通道, 这里假设是Channel 16(实际可能不同取决于MCU版本)[^1]
sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5;
if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK){
Error_Handler();
}
}
```
#### 启动 ADC 转换与获取原始数值
完成上述配置之后就可以调用 `HAL_ADC_Start` 函数开始一次性的软件触发转换,并通过回调函数获得结果:
```c
if(HAL_ADC_Start(&hadc)!= HAL_OK){
/* Start ADC conversion */
Error_Handler();
}
/* Wait until the end of conversion and get value from DR register */
if(HAL_ADC_PollForConversion(&hadc, HAL_MAX_DELAY)== HAL_OK){
adc_raw_value = HAL_ADC_GetValue(&hadc);
} else {
Error_Handler();
}
```
#### 计算温度值
得到 ADC 原始采样值后,依据芯片资料中的线性方程将该值转化为摄氏度表示的实际温度。对于 STM32F103RCT6 版本而言,通常采用如下公式进行换算:
\[ \text{Temperature(Celsius)} = (\frac{\text{Vrefint\_cal}}{\text{adc\_raw\_value}} * T_{\text{slope}})+T_{\text{offset}} \]
其中 \( Vrefint\_cal \),\( T_{\text{slope}} \),以及 \( T_{\text{offset}}\) 是由制造商提供的校准常数,可以从器件的技术文档或头文件中找到具体的定义。
阅读全文
相关推荐

















