1、淘宝店铺:http:/ 技术论坛:,手把手教你学STM32,主讲人 :正点原子团队硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司淘宝店铺:http:/技术论坛: 开源电子 网公众平台:“正点原子”官方网站:联系电话:13922348612,ALIENTEK,手把手教你学STM32,DS18B20实验,STM32F1xx开发板(正点原子),STM32F4xx开发板(正点原子),适用平台,淘宝店铺:http:/ 技术论坛:,DS18B20实验,淘宝店铺:http:/ 技术论坛:,参考资料:,战舰STM32F1开发板 STM32F1开发指南-库函数版本-第35章 DS18B
2、20温度传感器实验精英STM32F1开发板 STM32F1开发指南-库函数版本-第34章 DS18B20温度传感器实验miniSTM32F1开发板 STM32不完全手册-库函数版本 -第28章 DS18B20温度传感器实验探索者STM32F4开发板 STM32F4开发指南-库函数版本 -第35章 DS18B20温度传感器实验,目录,淘宝店铺:http:/ 技术论坛:,DS18B20介绍,淘宝店铺:http:/ 技术论坛:,DS18B20技术性能特征,、 独特的单总线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实 现微处理器与DS18B20的双向通讯。大大提高了系统的抗干扰性。
3、、测温范围 55+125,精度为05。、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个, 实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的 不稳定。、 工作电源: 3.05.5V/DC (可以数据线寄生电源)。 、在使用中不需要任何外围元件。、 测量结果以912位数字量方式串行传送。,DS18B20介绍,淘宝店铺:http:/ 技术论坛:,DS18B20封装,DS18B20介绍,淘宝店铺:http:/ 技术论坛:,连接方式,DS18B20介绍,淘宝店铺:http:/ 技术论坛:,硬件连接,战舰,精英,mini,探索者,DS18B20介绍,淘宝店
4、铺:http:/ 技术论坛:,单总线是一种半双工通信方式,DS18B20共有6种信号类型:复位脉冲、应答脉冲、写0、写1、读0和读1。所有这些信号,除了应答脉冲以外,都由主机发出同步信号。并且发送所有的命令和数据都是字节的低位在前。,边讲信号类型,边讲代码配置的方式,让大家了解STM32驱动18B20过程。,DS18B20介绍,淘宝店铺:http:/ 技术论坛:,信号线:PG11(战舰/精英),/IO方向设置#define DS18B20_IO_IN() GPIOG-CRH/IO操作 #defineDS18B20_DQ_OUT PGout(11) /数据端口PA0 #defineDS18B20
5、_DQ_IN PGin(11) /数据端口PA0,信号线:PA0(mini),/IO方向设置#define DS18B20_IO_IN() GPIOA-CRL/IO操作 #defineDS18B20_DQ_OUT PAout(0) /数据端口PA0#defineDS18B20_DQ_IN PAin(0) /数据端口PA0,信号线:PG9(探索者),/IO方向设置#define DS18B20_IO_IN() GPIOG-MODER /PG9输出模/IO操作 #defineDS18B20_DQ_OUT PGout(9) /数据端口PG9#defineDS18B20_DQ_IN PGin(9) /
6、数据端口PG9,DS18B20介绍,淘宝店铺:http:/ 技术论坛:,复位脉冲,单总线上的所有通信都是以初始化序列开始。主机输出低电平,保持低电平时间至少480 us,以产生复位脉冲。接着主机释放总线,4.7K的上拉电阻将单总线拉高,延时1560 us,并进入接收模式(Rx)。接着DS18B20拉低总线60240 us,以产生低电平应答脉冲。,/复位DS18B20void DS18B20_Rst(void) DS18B20_IO_OUT(); /设置为输出模式 DS18B20_DQ_OUT=0; /拉低DQ delay_us(750); /拉低750us(至少480us) DS18B20_D
7、Q_OUT=1; /DQ=1拉高释放总线 delay_us(15); /15US /进入接受模式,等待应答信号。,DS18B20介绍,淘宝店铺:http:/ 技术论坛:, 应答信号,/等待DS18B20的回应/返回1:未检测到DS18B20的存在 返回0:存在u8 DS18B20_Check(void) u8 retry=0; DS18B20_IO_IN();/SET PA0 INPUT while (DS18B20_DQ_IN,DS18B20介绍,淘宝店铺:http:/ 技术论坛:, 写时序,写时序包括写0时序和写1时序。所有写时序至少需要60us,且在2次独立的写时序之间至少需要1us的恢
8、复时间,两种写时序均起始于主机拉低总线。写1时序:主机输出低电平,延时2us,然后释放总线,延时60us。写0时序:主机输出低电平,延时60us,然后释放总线,延时2us。,DS18B20介绍,淘宝店铺:http:/ 技术论坛:,/写一个字节到DS18B20/dat:要写入的字节void DS18B20_Write_Byte(u8 dat) u8 j; u8 testb; DS18B20_IO_OUT();/设置PA0为输出 for (j=1;j1; if (testb) /输出高 DS18B20_DQ_OUT=0;/ 主机输出低电平 delay_us(2); /延时2us DS18B20_D
9、Q_OUT=1;/释放总线 delay_us(60); /延时60us else /输出低 DS18B20_DQ_OUT=0;/主机输出低电平 delay_us(60); /延时60us DS18B20_DQ_OUT=1;/释放总线 delay_us(2); /延时2us ,DS18B20介绍,淘宝店铺:http:/ 技术论坛:, 读时序,单总线器件仅在主机发出读时序时,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。所有读时序至少需要60us,且在2次独立的读时序之间至少需要1us的恢复时间。每个读时序都由主机发起,至少拉低总线1us。主机在读时序期
10、间必须释放总线,并且在时序起始后的15us之内采样总线状态。典型的读时序过程为:主机输出低电平延时2us,然后主机转入输入模式延时12us,然后读取单总线当前的电平,然后延时50us。,DS18B20介绍,淘宝店铺:http:/ 技术论坛:,/从DS18B20读取一个位/返回值:1/0u8 DS18B20_Read_Bit(void) / read one bit u8 data; DS18B20_IO_OUT();/设置为输出 DS18B20_DQ_OUT=0; /输出低电平2us delay_us(2); DS18B20_DQ_OUT=1; /拉高释放总线 DS18B20_IO_IN();
11、/设置为输入 delay_us(12);/延时12us if(DS18B20_DQ_IN)data=1;/读取总线数据 else data=0; delay_us(50); /延时50us return data;,典型的读时序过程为:主机输出低电平延时2us,然后主机转入输入模式延时12us,然后读取单总线当前的电平,然后延时50us。,DS18B20介绍,淘宝店铺:http:/ 技术论坛:,/从DS18B20读取一个字节/返回值:读到的数据u8 DS18B20_Read_Byte(void) / read one byte u8 i,j,dat; dat=0; for (i=1;i1);
12、return dat;,读取一个字节数据,DS18B20介绍,淘宝店铺:http:/ 技术论坛:,我们来看看DS18B20的典型温度读取过程,DS18B20的典型温度读取过程为:复位发SKIP ROM命令(0XCC)发开始转换命令(0X44)延时复位发送SKIP ROM命令(0XCC)发读存储器命令(0XBE)连续读出两个字节数据(即温度)结束。,DS18B20介绍,淘宝店铺:http:/ 技术论坛:,/从ds18b20得到温度值/精度:0.1C/返回值:温度值 (-5501250) short DS18B20_Get_Temp(void) u8 temp; u8 TL,TH; short t
13、em; DS18B20_Start (); / ds1820 start convert DS18B20_Rst();复位 DS18B20_Check(); DS18B20_Write_Byte(0xcc);/ skip rom DS18B20_Write_Byte(0xbe);/ convert TL=DS18B20_Read_Byte(); TH=DS18B20_Read_Byte(); if(TH7) TH=TH; TL=TL; temp=0;/温度为负 else temp=1;/温度为正 tem=TH; /获得高八位 tem=8; tem+=TL;/获得底八位 tem=(float)t
14、em*0.625;/转换 if(temp)return tem; /返回温度值 else return -tem; ,/开始温度转换void DS18B20_Start(void)/ ds1820 start convert DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc);/ skip rom DS18B20_Write_Byte(0x44);/ convert,转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0, 这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际 温度。 例如+125的数字输出为07D0H,-25.0625的数字输出为FE6FH。,DS18B20介绍,淘宝店铺:http:/ 技术论坛:,再梳理一下开发板配套实验程序源码。,谢谢您对“正点原子”团队的支持,硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司淘宝店铺:http:/技术论坛:,淘宝店铺:http:/ 技术论坛:,