温度检测,画出实时波形图
matlab_serial源码:
- clc;
- global t;
- global x;
- global m;
- global ii;
- t = [0];
- m = [0];
- ii = 0;
- x = -1;
- p = plot(t,m,'EraseMode','background','MarkerSize',5);
- axis([x x+100 1.6 2]);
- grid on;
-
- try
- s=serial('com4');
- catch
- error('cant serial');
- end
- set(s,'BaudRate', 115200,'DataBits',8,'StopBits',1,'Parity','none','FlowControl','none');
- s.BytesAvailableFcnMode = 'terminator';
- s.BytesAvailableFcn = {@callback,p};
- fopen(s);
- pause;
- fclose(s);
- delete(s);
- clear s
- close all;
- clear all;
-
复制代码
单片机源程序如下:
- /**
- ******************************************************************************
- * @file 芯片温度
- * @author fire
- * @version V1.0
- * @date 2015-xx-xx
- * @brief 芯片温度例程
- ******************************************************************************
- ******************************************************************************
- */
- // 通过ADC1通道16获取芯片内部温度,并通过串口打印到电脑串口调试助手显示
- #include "stm32f10x.h"
- #include "./usart/bsp_usart.h"
- #include "./temp/bsp_tempad.h"
- /* ADC1转换的电压值通过DMA方式传到sram*/
- extern __IO u16 ADC_ConvertedValue;
- /*计算后的温度值*/
- u16 Current_Temp;
-
- /* 延时 */
- void delay_ms(u16 nms)
- {
- u32 temp;
- SysTick->LOAD = 9000*nms;
- SysTick->VAL=0X00;//清空计数器
- SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
- do
- {
- temp=SysTick->CTRL;//读取当前倒计数值
- }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
- SysTick->CTRL=0x00; //关闭计数器
- SysTick->VAL =0X00; //清空计数器
- }
- /*
- * 函数名:main
- * 描述 :主函数
- * 输入 : 无
- * 输出 :无
- */
- int main(void)
- {
- USART_Config();
- Temp_ADC1_Init();
- printf( "\r\n");
- while (1)
- {
- delay_ms(1000); // 延时
-
- //计算方法1
- Current_Temp= (1.43- ADC_ConvertedValue*3.3/4096)*1000 / 4.3+ 25 ;
-
- //计算方法2
- //Current_Temp=(V25-ADC_ConvertedValue)/AVG_SLOPE+25;
- //10进制显示
- printf("%3d \r\n", Current_Temp);
-
- //16进制显示
- // printf("\r\n The current temperature= %04x \r\n", Current_Temp);
- }
- }
复制代码
所有资料51hei提供下载:
ADC芯片温度.rar
(291.35 KB, 下载次数: 59)
|