欢迎来到泰骏兴电子,大家有问题可以直接联系管理员QQ:233619809单片机 QQ群:59194556 各位游客也可以注册玩玩,享受更多权益。温馨提示:本网站仅提供平台学习以及渠道,一切后果自行承担,还望广大用户提高自我意识,请不要轻易相信他人,请不要轻易相信他人,请不要轻易相信他人。为了更好的管理论坛工作,所以现在使用邮箱注册,如果以前的邮箱不能修改的,请联系管理员代为修改

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 133|回复: 0

STM32F103获取CPU温度

[复制链接]
发表于 2025-7-17 10:52:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
STM32F1的ADC通道



[C] 纯文本查看 复制代码
//初始化ADC
void Adc_CPU_Temp_Init(void)  //ADC通道初始化
{
			ADC_InitTypeDef ADC_InitStructure; 
			RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1	, ENABLE );	  //使能GPIOA,ADC1通道时钟
			RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //分频因子6时钟为72M/6=12MHz
			ADC_DeInit(ADC1);  //将外设 ADC1 的全部寄存器重设为缺省值
			ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;	//ADC工作模式:ADC1和ADC2工作在独立模式
			ADC_InitStructure.ADC_ScanConvMode = DISABLE;	//模数转换工作在单通道模式
			ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;	//模数转换工作在单次转换模式
			ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	//转换由软件而不是外部触发启动
			ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	//ADC数据右对齐
			ADC_InitStructure.ADC_NbrOfChannel = 1;	//顺序进行规则转换的ADC通道的数目
			ADC_Init(ADC1, &ADC_InitStructure);	//根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
			ADC_TempSensorVrefintCmd(ENABLE); //开启内部温度传感器
			ADC_Cmd(ADC1, ENABLE);	//使能指定的ADC1
			ADC_ResetCalibration(ADC1);	//重置指定的ADC1的复位寄存器
			while(ADC_GetResetCalibrationStatus(ADC1));	//获取ADC1重置校准寄存器的状态,设置状态则等待
			ADC_StartCalibration(ADC1);	 //
			while(ADC_GetCalibrationStatus(ADC1));		//获取指定ADC1的校准程序,设置状态则等待
}


u16 adc_data_value(u8 ch)
{
			ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);
			ADC_SoftwareStartConvCmd(ADC1,ENABLE);
			while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
			return ADC_GetConversionValue(ADC1);
}

//获取通道ch的转换值
//取size次,然后平均
u16 Get_Adc_value(u8 ch,u8 size)
{
			u32 temp=0;
			u8 t;
			for(t=0;t<size;t++)
			{
			temp+=adc_data_value(ch);
			delay_ms(1);
			}
			return temp/size;
} 

float Get_CPU_temp()//返回直接是℃温度
{
			float temp=0;
			temp+=Get_Adc_value(ADC_Channel_16,20);
			temp=(float)temp*(3.3/4096);		//电压值 
			temp=(1.43-temp)/0.0043+25;	//转换为温度值 	 
			return temp;
} 





初始化ADC通道后直接调用Get_CPU_temp()即可获取CPU温度

高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|泰骏兴电子科技有限公司 ( 粤ICP备2023060260号-1 ) 单片机爱好者

GMT+8, 2025-10-31 11:32

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表