OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 23402|回复: 20

【Alientek STM32 实验22】--DS18B20温度传感器实验

[复制链接]

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2010-12-14 23:35:53 | 显示全部楼层 |阅读模式

3.22  DS18B20实验

 

STM32虽然内部自带了温度传感器,但是因为芯片温升较大等问题,与实际温度差别较大,所以ALIENTEK MiniSTM32开发板还预留了目前最常用的数字温度传感器:DS18B20的接口,用户只需要自己找一个DS18B20焊接上去,就可以使用了。本节将向大家介绍,如何在ALIENTEK MiniSTM32开发板上,通过DS18B20来读取环境温度值。本节分为如下几个部分:

3.22.1 DS18B20简介

3.22.2 硬件设计

3.22.3 软件设计

3.22.4 下载与测试

3.22.1 DS18B20简介

DS18B20是由DALLAS半导体公司推出的一种的“一线总线”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。一线总线结构具有简洁且经济的特点,可使用户轻松地组建传感器网络,从而为测量系统的构建引入全新概念,测量温度范围为-55~+125 ,精度为±05。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~l2位的数字值读数方式。它工作在355 V的电压范围,采用多种封装形式,从而使系统设计灵活、方便,设定分辨率及用户设定的报警温度存储在EEPROM中,掉电后依然保存。其内部结构见下图:


                    3.22.1.1 DS18B20内部结构图

ROM中的64位序列号是出厂前被光记好的,它可以看作是该DS18B20的地址序列码,每DS18B2064位序列号均不相同。64ROM的排列是:前8位是产品家族码,接着48位是DS18B20的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5 +X4 +1)ROM作用是使每一个DS18B20都各不相同,这样就可实现一根总线上挂接多个。

所有的单总线器件要求采用严格的信号时序,以保证数据的完整性。DS18B20共有6种信号类型:复位脉冲、应答脉冲、写0、写1、读0和读1。所有这些信号,除了应答脉冲以外,都由主机发出同步信号。并且发送所有的命令和数据都是字节的低位在前。这里我们简单介绍这几个信号的时序:

1)复位脉冲和应答脉冲

单总线上的所有通信都是以初始化序列开始。主机输出低电平,保持低电平时间至少480 us,,以产生复位脉冲。接着主机释放总线,4.7K的上拉电阻将单总线拉高,延时1560 us,并进入接收模式(Rx)。接着DS18B20拉低总线60~240 us,以产生低电平应答脉冲,

若为低电平,再延时480 us

2)写时序

写时序包括写0时序和写1时序。所有写时序至少需要60us,且在2次独立的写时序之间至少需要1us的恢复时间,两种写时序均起始于主机拉低总线。写1时序:主机输出低电平,延时2us,然后释放总线,延时60us。写0时序:主机输出低电平,延时60us,然后释放总线,延时2us

3)读时序

单总线器件仅在主机发出读时序时,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。所有读时序至少需要60us,且在2次独立的读时序之间至少需要1us的恢复时间。每个读时序都由主机发起,至少拉低总线1us。主机在读时序期间必须释放总线,并且在时序起始后的15us之内采样总线状态。典型的读时序过程为:主机输出低电平延时2us,然后主机转入输入模式延时12us,然后读取单总线当前的电平,然后延时50us

在了解了单总线时序之后,我们来看看DS18B20的典型温度读取过程,DS18B20的典型温度读取过程为:复位àSKIP ROM命令(0XCCà发开始转换命令(0X44à延时à复位à发送SKIP ROM命令(0XCCà发读存储器命令(0XBEà连续读出两个字节数据(即温度)->结束。

DS18B20的介绍就到这里,更详细的介绍,请大家参考DS18B20的技术手册。
3.22.2 硬件设计    

由于开发板上标准配置是没有DS18B20这个传感器的,只有接口,所以大家需要自己焊接一个DS18B20上去。

本节实验功能简介:开机的时候先检测是否有DS18B20存在,如果没有,则提示错误。只有在检测到DS18B20之后才开始读取温度并显示在LCD上,如果发现了DS18B20,则程序每隔200ms左右读取一次数据,并把温度显示在LCD上。同样我们也是用LED0来指示程序正在运行。

所要用到的硬件资源如下:

1STM32F103RBT6

2DS0(外部LED0)。

3TFTLCD液晶模块。

4DS18B20温度传感器。

            前三部分,在之前的实例已经介绍过了,DS18B20STM32的连接电路则很简单,入下图所示:


                  3.22.2.1 DS18B20STM32的连接电路图

DS18B20STM32PA0通过跳线帽连接,这个在硬件上要连接上,否则PA0将得不到信号。

3.22.3 软件设计

打开上一节的工程,首先在HARDWARE文件夹下新建一个DS18B20的文件夹。然后新建一个ds18b20.cds18b20.h的文件保存在DS18B20文件夹下,并将这个文件夹加入头文件包含路径。

打开ds18b20.c在该文件下输入如下代码:

#include "ds18b20.h"

#include "delay.h"                                                                             

//Mini STM32开发板

//DS18B20驱动函数

//正点原子@ALIENTEK

//2010/6/17

 

//复位DS18B20

void DS18B20_Rst(void)       

{                

     DS18B20_IO_OUT(); //SET PA0 OUTPUT

    DS18B20_DQ_OUT=0; //拉低DQ

    delay_us(750);    //拉低750us

    DS18B20_DQ_OUT=1; //DQ=1

     delay_us(15);     //15US

}

//等待DS18B20的回应

//返回1:未检测到DS18B20的存在

//返回0:存在

u8 DS18B20_Check(void)       

{  

     u8 retry=0;

     DS18B20_IO_IN();//SET PA0 INPUT    

    while (DS18B20_DQ_IN&&retry<200)

     {

                 retry++;

                 delay_us(1);

     };        

     if(retry>=200)return 1;

     else retry=0;

    while (!DS18B20_DQ_IN&&retry<240)

     {

                 retry++;

                 delay_us(1);

     };

     if(retry>=240)return 1;      

     return 0;

}

//DS18B20读取一个位

//返回值:1/0

u8 DS18B20_Read_Bit(void)                                    // read one bit

{

    u8 data;

     DS18B20_IO_OUT();//SET PA0 OUTPUT

    DS18B20_DQ_OUT=0;

     delay_us(2);

    DS18B20_DQ_OUT=1;

     DS18B20_IO_IN();//SET PA0 INPUT

     delay_us(12);

     if(DS18B20_DQ_IN)data=1;

    else data=0;       

    delay_us(50);          

    return data;

}

//DS18B20读取一个字节

//返回值:读到的数据

u8 DS18B20_Read_Byte(void)    // read one byte

{       

    u8 i,j,dat;

    dat=0;

     for (i=1;i<=8;i++)

     {

        j=DS18B20_Read_Bit();

        dat=(j<<7)|(dat>>1);

    }                                                                          

    return dat;

}

//写一个字节到DS18B20

//dat:要写入的字节

void DS18B20_Write_Byte(u8 dat)    

 {            

    u8 j;

    u8 testb;

     DS18B20_IO_OUT();//SET PA0 OUTPUT;

    for (j=1;j<=8;j++)

     {

        testb=dat&0x01;

        dat=dat>>1;

        if (testb)

        {

            DS18B20_DQ_OUT=0;// Write 1

            delay_us(2);                           

            DS18B20_DQ_OUT=1;

            delay_us(60);            

        }

        else

        {

            DS18B20_DQ_OUT=0;// Write 0

            delay_us(60);            

            DS18B20_DQ_OUT=1;

            delay_us(2);                         

        }

    }

}

//开始温度转换

void DS18B20_Start(void)// ds1820 start convert

{                                                                                          

    DS18B20_Rst();    

     DS18B20_Check();       

    DS18B20_Write_Byte(0xcc);// skip rom

    DS18B20_Write_Byte(0x44);// convert

}

//初始化DS18B20IO DQ 同时检测DS的存在

//返回1:不存在

//返回0:存在           

u8 DS18B20_Init(void)

{

     RCC->APB2ENR|=1<<2;    //使能PORTA口时钟

     GPIOA->CRL&=0XFFFFFFF0;//PORTA.0 推挽输出

     GPIOA->CRL|=0X00000003;

     GPIOA->ODR|=1<<0;      //输出1

     DS18B20_Rst();

     return DS18B20_Check();

} 

//ds18b20得到温度值

//精度:0.1C

//返回值:温度值 -550~1250

short DS18B20_Get_Temp(void)

{

    u8 temp;

    u8 TL,TH;

     short tem;

    DS18B20_Start ();                    // ds1820 start convert

    DS18B20_Rst();

    DS18B20_Check();        

    DS18B20_Write_Byte(0xcc);// skip rom

    DS18B20_Write_Byte(0xbe);// convert         

    TL=DS18B20_Read_Byte(); // LSB  

    TH=DS18B20_Read_Byte(); // MSB 

                   

    if(TH>7)

    {

        TH=~TH;

        TL=~TL;

        temp=0;//温度为负 

    }else temp=1;//温度为正               

    tem=TH; //获得高八位

    tem<<=8;   

    tem+=TL;//获得底八位

    tem=(float)tem*0.625;//转换    

     if(temp)return tem; //返回温度值

     else return -tem;   

}

该部分代码就是根据我们前面介绍的单总线操作时序来读取DS18B20的温度值的,DS18B20的温度通过DS18B20_Get_Temp函数读取,该函数的返回值为带符号的短整形数据,返回值的范围为-550~1250,其实就是温度值扩大了10倍。保存ds18b20.c,并把该文件加入到HARDWARE组下,然后我们打开ds18b20.h,在该文件下输入如下内容:

#ifndef __DS18B20_H

#define __DS18B20_H

#include "sys.h"  

//Mini STM32开发板

//DS18B20驱动函数

//正点原子@ALIENTEK

//2010/6/17     

 

//IO方向设置

#define DS18B20_IO_IN() {GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=8<<0;}

#define DS18B20_IO_OUT() {GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=3<<0;}

////IO操作函数                                                                         

#define   DS18B20_DQ_OUT PAout(0) //数据端口 PA0

#define   DS18B20_DQ_IN PAin(0)  //数据端口 PA0

         

u8 DS18B20_Init(void);//初始化DS18B20

short DS18B20_Get_Temp(void);//获取温度

void DS18B20_Start(void);//开始温度转换

void DS18B20_Write_Byte(u8 dat);//写入一个字节

u8 DS18B20_Read_Byte(void);//读出一个字节

u8 DS18B20_Read_Bit(void);//读出一个位

u8 DS18B20_Check(void);//检测是否存在DS18B20

void DS18B20_Rst(void);//复位DS18B20   

#endif

关于这段代码,我们就不做多的解释了,接下来我们先保存这段代码,然后打开test.c,在该文件下修改main函数如下:

int main(void)

{              

   short temp;                                 

  Stm32_Clock_Init(9);//系统时钟设置

   delay_init(72);            //延时初始化

   uart_init(72,9600); //串口1初始化         

   LCD_Init();                //初始化液晶

   LED_Init();         //LED初始化         

   POINT_COLOR=RED;//设置字体为红色    

   LCD_ShowString(60,50,"Mini STM32");     

   LCD_ShowString(60,70,"DS18B20 TEST");   

   LCD_ShowString(60,90,"ATOM@ALIENTEK");

   LCD_ShowString(60,110,"2010/6/17");

   while(DS18B20_Init())//初始化DS18B20,兼检测18B20

   {

          LCD_ShowString(60,130,"DS18B20 Check Failed!");

          delay_ms(500);              

          LCD_ShowString(60,130,"Please Check!        ");

          delay_ms(500);

          LED0=!LED0;//DS0闪烁

   }

    LCD_ShowString(60,130,"DS18B20 Ready!     "); 

   POINT_COLOR=BLUE;//设置字体为蓝色   

   LCD_ShowString(60,150, "Temperate:   . C");    

   while(1)

   {       

          temp=DS18B20_Get_Temp();

          if(temp<0)

          {

                 temp=-temp;

                 LCD_ShowChar(140,150,'-',16,0);//显示负号      

          }                                       

          LCD_ShowNum(148,150,temp/10,2,16);//显示温度值   

          LCD_ShowNum(172,150,temp%10,1,16);//显示温度值

          //printf("t1:%d\n",temp);

          delay_ms(200);

          LED0=!LED0;

   }                      

}

至此,我们本节的软件设计就结束了。

 

3.22.4 下载与测试

 

在代码编译成功之后,我们通过下载代码到ALIENTEK MiniSTM32开发板上,可以看到LCD显示开始显示当前的温度值(假定DS18B20已经焊接上去了),如下图所示:


3.22.4.1 DS18B20读取到的温度值

 改程序还可以读取并显示负温度值的,只是由于作者在广州,是没办法看到了(除非放到冰箱),具备条件的大家可以测试一下。

DS18B20温度实验.pdf

350.66 KB, 下载次数: 1832

ALIENTEK MINISTM32 实验22 DS18B20实验.rar

2.26 MB, 下载次数: 4286

我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2011-4-13
在线时间
0 小时
发表于 2011-4-13 15:41:36 | 显示全部楼层
菜鸟提问,我想在这个实验的基础上再加一个DS18B20测温对比2个温度,连在C4口上,应该不会和其他功能冲突吧?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-4-13 16:59:01 | 显示全部楼层
回复【2楼】carrie_sky:
-------------------------------
看原理图.PC4有没有接其他东西?如果没有的话,是可以的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2011-5-12
在线时间
3 小时
发表于 2011-11-21 20:09:00 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
u8 DS18B20_Check(void)       

{  

     u8 retry=0;

     DS18B20_IO_IN();//SET A0 INPUT    

    while (DS18B20_DQ_IN&&retry<200)

     {

                 retry++;

                 delay_us(1);

     };        

     if(retry>=200)return 1;

     else retry=0;

    while (!DS18B20_DQ_IN&&retry<240)

     {

                 retry++;

                 delay_us(1);

     };

     if(retry>=240)return 1;      

     return 0;

}对这个函数不是很理解
想…要壮志凌云,干…要脚踏实地!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-11-21 20:44:52 | 显示全部楼层
回复【4楼】chzfmx:
---------------------------------
就是检查18B20是否存在的一个函数.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2011-5-12
在线时间
3 小时
发表于 2011-11-21 20:56:10 | 显示全部楼层
我试了一下将 : 
//复位DS18B20
void DS18B20_Rst(void)       

{                

     DS18B20_IO_OUT(); //SET A0 OUTPUT

    DS18B20_DQ_OUT=0; //拉低DQ

    delay_us(750);    //拉低750us

    DS18B20_DQ_OUT=1; //DQ=1

     delay_us(15);     //15US

}中的 拉低750us 改为拉低500us,然后就检测不到DS18B20的存在了,也就是说 u8 DS18B20_Check(void)函数中的两个数值“200”和“240”和这个延时是有关系的,这两个值是根据上面的拉低IO口的时间计算得出的吗,手册上说至少拉低480us,只要大于480us都可以吗?       
想…要壮志凌云,干…要脚踏实地!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-11-21 21:36:01 | 显示全部楼层
回复【6楼】chzfmx:
---------------------------------
仔细看手册时序.ds18b20对时序要求很高.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

19

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2011-11-6
在线时间
1 小时
发表于 2011-12-5 20:36:09 | 显示全部楼层
short DS18B20_Get_Temp(void)
{
    u8 temp;
    u8 TL,TH;
short tem;
    DS18B20_Start ();                    // ds1820 start convert
    DS18B20_Rst();
    DS18B20_Check();  
    DS18B20_Write_Byte(0xcc);// skip rom
    DS18B20_Write_Byte(0xbe);// convert     
    TL=DS18B20_Read_Byte(); // LSB   
    TH=DS18B20_Read_Byte(); // MSB  
       
    if(TH>7)
    {
        TH=~TH;
        TL=~TL; 
        temp=0;//温度为负  
    }else temp=1;//温度为正      
    tem=TH; //获得高八位
    tem<<=8;    
    tem+=TL;//获得底八位
    tem=(float)tem*0.625;//转换     
if(temp)return tem; //返回温度值
else return -tem;    



这个函数中,  if(TH>7)
    {
        TH=~TH;
        TL=~TL; 
        temp=0;//温度为负  
    }else temp=1;//温度为正
这句应该是取负数的正数部分,
那不是应该 取反后加1的吗?
回复 支持 反对

使用道具 举报

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2012-11-11
在线时间
0 小时
发表于 2012-12-10 20:21:25 | 显示全部楼层
这里面的原子回答问题总是含含糊糊的,能不能清晰点呢?人家都说了是初学者了
回复 支持 反对

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
 楼主| 发表于 2012-12-11 09:53:19 | 显示全部楼层
回复【9楼】shengshm1989:
---------------------------------
因为是初学者,所以回答才能是指引,而不是直接告诉答案,直接告诉答案,你只知道18b20怎么用,直接指引你怎么去找答案,你还会解决其他问题。
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复 支持 反对

使用道具 举报

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2012-11-11
在线时间
0 小时
发表于 2012-12-13 11:45:15 | 显示全部楼层
恩恩,有道理,谢谢
回复 支持 反对

使用道具 举报

7

主题

69

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2013-4-6
在线时间
0 小时
发表于 2013-4-27 18:11:13 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
单总线中,每次由主机拉低后,释放总线应该就是由上拉电阻拉高,是否还需要再由主机输出高电平?我知道在51中,是因为输入要先写1。而在stm32中这个还需要主机输出高吗?本人没有那个温度传感器,无法直接试验。请原子哥解释一下。谢谢!
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-9-2
在线时间
1 小时
发表于 2013-9-5 12:47:56 | 显示全部楼层
原子哥哥,我这儿有你的库函数的程序,我是将他们几乎全部复制的,就改了个引脚,主函数里面和你的也差不多,为什么我的就是没有显示呢,我是用串口显示的,结果什么都没有,是不是我的硬件电路有问题啊,我就是将18b20的数据线接到32的端口,地线接32的地,中间没有任何其他元件,
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-5 18:03:31 | 显示全部楼层
回复【13楼】sinmcu:
---------------------------------
上拉电阻接了么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-9-2
在线时间
1 小时
发表于 2013-9-6 08:45:16 | 显示全部楼层
是硬件电路没有接对
现在可以了
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2013-11-17
在线时间
0 小时
发表于 2013-11-17 16:54:12 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
原子哥能不能解释一下200和240几个参数的意思啊,实在是想了很久都不通,谢谢啦!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-17 17:14:30 | 显示全部楼层
回复【16楼】dazuihou:
---------------------------------
就是延时等待啊
DS18B20在收到复位脉冲后,会回复存在脉冲,这个脉冲以低电平形式给出,时间是60~240us之间。
我们第一次等待就是等待DQ拉低,这里200,是设置最长等待200us,如果200us以内,还没有出现低电平,就认为DS18B20不存在。
然后如果出现,就会进入下一个等待,等待DQ变高,这个DQ,最多是240us的低电平,所以设置为240.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2013-11-17
在线时间
0 小时
发表于 2013-11-17 20:04:30 | 显示全部楼层
回复【17楼】正点原子:
---------------------------------
谢谢您的解答!我还有一个问题想问一下,我看了技术手册上面的初始化时序图,并没有标明复位脉冲和存在脉冲之间的slot的长度,所以我不明白200秒的出处。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-17 22:18:01 | 显示全部楼层
回复【18楼】dazuihou:
---------------------------------
200是自己定义的,你可以随意。能用就OK。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2013-11-17
在线时间
0 小时
发表于 2013-11-18 12:09:21 | 显示全部楼层
回复【19楼】正点原子:
---------------------------------
喔,懂了,谢谢啦!
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2014-5-28
在线时间
0 小时
发表于 2014-5-28 15:45:34 | 显示全部楼层
回复【20楼】dazuihou:
---------------------------------
这个程序设计中,能不能不用系统时钟啊   如果在uc/os中做这个温度实验的话,系统时钟的使用会发生冲突吧,请问这种情况下,该怎么办?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-8 07:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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