STM32 KEIL 温度显示跳变

原本程序

#include "sys.h"
 #include "led.h"
 #include "usart.h"
 #include "IIC.h"
#include "oled.h"
 #include "30205.h"

char dis0[16];int  wendu_beep=37 ;int tiwen;
int main()
{
	double tem ;  //摄氏度
	delay_init();	
	max_init ();
	LED_Init();
	uart1_init(9600);
	YHGUI_Config();  //OLED初始化
	  YHGUI_DispString(0,0,"体表温度监测系统",16,1);  //OLED显示初始化
	NVIC_Configuration();					 //=====中断优先级分组,其中包含了所有的中断优先级的配置,方便管理和一次性修改。
	while(1)
	{
if((int)tiwen>wendu_beep){beep=1;delay_ms(50);beep=0;}

				sprintf(dis0,"温度:%d℃     ",(int)tiwen);
			YHGUI_DispString(0,16,dis0,16,1);		//显示
			sprintf(dis0,"阈值:%d℃  ",wendu_beep);
			YHGUI_DispString(0,32,dis0,16,1);		//显示
		
		tem = GetTemperature1();
			if( tem>1)
		tiwen=tem;
		printf("#S#%d#%d#1#1#",(int)tiwen,(int)wendu_beep);
		GPIO_ResetBits(GPIOC,GPIO_Pin_13);	
		delay_ms(1000);	
	}
}

void USART1_IRQHandler(void)                	//串口1中断服务程序//接收中断
	{
	u8 Res;
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
		{
		Res =USART_ReceiveData(USART1);	//读取接收到的数据
				if(Res == 'A')wendu_beep=wendu_beep+1;
					if(Res == 'B')wendu_beep=wendu_beep-1;

     } 
	}

是可以正常输出整数温度的,但是改成sprintf(wjk, "温度:%.1f℃", tiwen); float tiwen;  就出现-0.0的跳变。

视频如下:

尝试过将float tiwen改成double和%.1g℃也都不行。

求解答

 

最后,我们,设置了个条件,将温度为0跳过。但是实际问题却没有解决。

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在Keil uVision4显示STM32的CPU温度需要进行以下步骤: 1. 首先,需要在STM32微控制器启用内部温度传感器。这可以通过设置STM32的寄存器来完成。具体的操作可以参考相关的STM32芯片手册。 2. 在Keil uVision4的工程,需要包含STM32的相应头文件和库文件。这些文件通常可以在厂家的官方网站上下载。 3. 在代码,需要创建一个变量来存储温度值。这个变量的类型根据具体的数据类型来确定,比如float类型。 4. 在代码,通过读取STM32芯片的寄存器,可以获得CPU温度的原始数据。然后,根据芯片手册温度测量公式,将原始数据转换为实际的温度数值。 5. 最后,将得到的温度显示Keil uVision4的界面上。可以使用printf函数来将温度值发送到串口或者LCD屏幕上进行显示。 需要注意的是,具体的实现步骤可能会因为不同芯片型号的差异而有所不同,所以在进行具体操作时,需要参考相应的芯片手册和Keil uVision4的使用手册。同时,保证代码的正确性和可靠性也很重要,可以通过反复测试和调试来验证温度测量是否正确。 ### 回答2: 要在Keil uVision4上显示STM32的CPU温度,可以使用STM32内部的温度传感器和相应的代码来实现。 首先,需要在Keil uVision4创建一个新的STM32项目。然后,导入必要的头文件,包括stm32f10x.h和stm32f10x_adc.h。 接下来,在代码初始化ADC(模数转换)和GPIO(通用输入输出)模块。可以使用以下代码片段来实现: ``` #include "stm32f10x.h" #include "stm32f10x_adc.h" void ADC_Configuration(void) { ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; //使能ADC1时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE); //初始化ADC1 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; 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_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); //配置ADC1的通道 ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_55Cycles5); //使能温度传感器 ADC_TempSensorVrefintCmd(ENABLE); //使能ADC1 ADC_Cmd(ADC1, ENABLE); //使能ADC1的复位校准 ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); //开始ADC1的校准 ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); } ``` 然后,可以编写一个函数读取并计算CPU的温度值。可以使用以下代码片段来实现: ``` float GetCPUTemperature(void) { u16 ADCVal; float Temperature; //启动温度传感器的转换 ADC_SoftwareStartConvCmd(ADC1, ENABLE); //等待转换完成 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)); //获取转换结果 ADCVal = ADC_GetConversionValue(ADC1); //计算温度值 Temperature = (float)((ADCVal * 3300) / 4096); Temperature = (Temperature - 760) / 2.5 + 25; return Temperature; } ``` 最后,在主函数调用上述函数,并将结果显示Keil uVision4的串口窗口上。可以使用以下代码片段来实现: ``` int main(void) { float Temperature; //初始化ADC和GPIO ADC_Configuration(); while(1) { //获取CPU温度 Temperature = GetCPUTemperature(); //在Keil uVision4的串口窗口上显示温度 printf("CPU Temperature: %f\r\n", Temperature); //延时一段时间 Delay(ms); } } ``` 这样,就可以在Keil uVision4上显示STM32的CPU温度值了。 ### 回答3: Keil uVision4本身并不提供直接显示STM32 CPU温度的功能。不过我们可以通过其他方法来获取和显示CPU温度。 首先,在Keil uVision4创建一个新的STM32工程。然后,我们可以使用STM32的内置温度传感器来获取CPU温度。 在工程,我们需要包含STM32的头文件和外设库文件。然后,我们可以使用库文件提供的函数来读取和计算CPU温度。 首先,在代码声明一个变量来存储温度值,比如`float cpuTemperature`。然后,我们需要初始化ADC(模数转换器)和温度传感器。 接下来,我们可以使用ADC读取温度传感器的电压值。然后,根据STM32的数据手册提供的公式来计算CPU温度。 最后,我们可以使用库函数来将计算得到的温度显示在LCD或其他输出设备上。比如,我们可以使用`printf`函数将温度值以字符串的形式显示在串口终端上。 需要注意的是,这个方法只能在硬件和ADC通道正确配置的情况下才能获取正确的CPU温度值。并且每个型号的STM32都有不同的通道和寄存器配置,请确保使用正确的配置。 以上就是通过Keil uVision4和STM32显示CPU温度的方法。希望对您有帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值