STM32/STM8技术william hill官网
登录
直播中
赵宇
9年用户
115经验值
擅长:可编程逻辑 嵌入式技术 模拟技术 控制/MCU
私信
关注
[问答]
STM32F103C8使用内部温度传感器,温度不增加反而降低
开启该帖子的消息推送
STM32
温度传感器
使用的是某宝买来的
STM32
F103C8的核心板,原理图如下
实验
威廉希尔官方网站
为核心板加USB转TTL,其他并无外设。
尝试使用内部的ADCx_IN16连接的内部的温度传感器做实验,但是测出的结果一直都是十七点几,而且不增反降,结果是利用串口显示如图
现将关于温度传感器数值转化和ADC部分代码(temper.c文件全部内容)粘贴如下:
//temper.c文件起始
void Temprt_Init( void )
{
ADC_InitTypeDef ADC_InitStructure;
//使能GPIOA,ADC1通道时钟
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE );
//将外设 ADC1 的全部寄存器重设为缺省值
ADC_DeInit( ADC1 );
//ADC工作模式:ADC1和ADC2工作在独立模式
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
//模数转换工作在单通道模式
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
//模数转换工作在单次转换模式
ADC_InitStructure.ADC_Con
ti
nuousConvMode = ENABLE;
//转换由软件而不是外部触发启动
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
//ADC数据右对齐
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
//顺序进行规则转换的ADC通道的数目
ADC_InitStructure.ADC_NbrOfChannel = 1;
//根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
ADC_Init(ADC1, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC1,ADC_Channel_16,1,ADC_SampleTime_239Cycles5);
ADC_TempSensorVrefintCmd(ENABLE); //开启内部温度传感器
ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1
ADC_ResetCalibration(ADC1); //重置指定的ADC1的复位寄存器
//获取ADC1重置校准寄存器的状态,设置状态则等待
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1)); //获取指定ADC1的校准程序,设置状态则等待
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
}
uint16_t T_Get_Adc(uint8_t ch)
{
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道3,第一个转换,采样时间为239.5周期
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果
}
//得到ADC采样内部温度传感器的值 取10次,然后平均
uint16_t T_Get_Temp(void)
{
uint16_t temp_val=0;
uint8_t t;
for(t=0;t<10;t++)
{
temp_val+=T_Get_Adc(ADC_Channel_16);
DelayNms(5);
}
return temp_val/10;
}
//获取通道ch的转换值 取times次,然后平均
uint16_t T_Get_Adc_Average(uint8_t ch,uint8_t times)
{
uint32_t temp_val=0;
uint8_t t;
for(t=0;t
{
temp_val+=T_Get_Adc(ch);
DelayNms(5);
}
return temp_val/times;
}
//得到温度值 返回值:温度值(扩大了100倍,单位:℃.)
short Get_Temprate(void) //获取内部温度传感器温度值
{
uint32_t adcx;
short result;
double temperate;
adcx=T_Get_Adc_Average(ADC_Channel_16,20); //读取通道16,20次取平均
temperate=(float)adcx*(3.3/4096); //电压值
temperate=(1.42-temperate)*1000/4.35+25; //转换为温度值
result=temperate*=100; //扩大100倍.
return result;
}
//temper.c文件结束
在主函数中添加初始化函数后,在循环中添加将整形转化为浮点型,并发送到串口显示就是我的串口结果图。帖子省略代码部分为串口设置部分,使用主频是72MHz。
temperature = (uint8_t)(temperature_read /100) + (temperature_read %100) * 0.01;
希望能偶遇大神解决这个问题。
回帖
(2)
赵宇
2018-4-26 16:27:03
已解决,谢谢大家了,原因匪夷所思,函数用错了,返回值也错了,结果就错了。
已解决,谢谢大家了,原因匪夷所思,函数用错了,返回值也错了,结果就错了。
1
举报
心雨6688:
您好,请问你是哪里出现的问题呢?我的代码和你一样,温度高出来20度,找不到原因
jf_37844145
2021-4-23 16:41:32
麻烦问下是什么原因导致的,我现在也出现这个情况
麻烦问下是什么原因导致的,我现在也出现这个情况
1
举报
镜花水月12341241:
你解决了么
更多回帖
rotate(-90deg);
回复
相关问答
STM32
温度传感器
基于
stm32f103c8
的
温度
超限报警
2016-03-27
5157
STM32F103C8
单片机是怎样与串口
传感器
对接上的
2021-10-25
1239
STM32
内部
温度
传感器
参数
2021-02-02
2485
STM32f103
的
内部
温度
传感器
好像不对
2018-11-12
7244
请问MCU
内部
温度
传感器
如何计算
温度
2019-04-15
27772
STM32
内部
温度
传感器
有哪些使用注意事项呢
2021-11-26
2059
如何对基于
STM32F103
HAL库的DHT11
温度
传感器
进行试验
2021-12-08
943
请问
stm32f
070
内部
温度
传感器
的精度是多少?
2023-01-13
277
为什么
STM32F101C
4的
内部
温度
传感器
接在那一个通道上呢?
2019-07-18
892
stm32
单片机
STM32F103C8
内部
晶振
2019-06-27
8351
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分