stm32 ds18b20 温度传感器
相关文章:http://blog.csdn.net/zhangxuechao_/article/details/74991985
举例
void DS18B20_in()
{
GPIO_InitTypeDef gpio =
{
GPIO_Pin_11,
GPIO_Speed_50MHz,
GPIO_Mode_IPD
};
GPIO_Init(GPIOG, &gpio);
}
void DS18B20_out()
{
GPIO_InitTypeDef gpio =
{
GPIO_Pin_11,
GPIO_Speed_50MHz,
GPIO_Mode_Out_PP
};
GPIO_Init(GPIOG, &gpio);
}
u8 DS18B20_check()
{
u8 flag = 0;
DS18B20_in();
while(ds18b20_in == 1)
{
flag++;
if(flag > 100)
{
return 1;
}
delay_us(1); //一次循环1us
}
flag = 0;
while(ds18b20_in == 0)
{
flag++;
if(flag > 240)
{
return 1;
}
delay_us(1);
}
return 0;
}
u8 DS18B20_reset()
{
DS18B20_out();
ds18b20_out = 0;
delay_us(500);
ds18b20_out = 1;
delay_us(1);
return DS18B20_check();
}
u8 DS18B20_init()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
return DS18B20_reset();
}
u8 DS18B20_read_bit()
{
DS18B20_out();
ds18b20_out = 0;
delay_us(1);
ds18b20_out = 1; //释放总线
delay_us(1);
DS18B20_out();
delay_us(15);
return ds18b20_in;
}
u8 DS18B20_read()
{
u8 i = 0;
u8 r, tmp;
for(i = 0; i < 8; i++)
{
tmp = DS18B20_read_bit();
r = (tmp << 7 | r >> 1);
delay_us(45);
ds18b20_out = 1;
delay_us(1);
}
return r;
}
void DS18B20_write(u8 d)
{
u8 i = 0;
u8 tmp = 0;
DS18B20_out();
for(i = 0; i < 8; i++)
{
tmp = d & 0x01;
d >>= 1;
ds18b20_out = 0;
delay_us(1);
if(tmp == 0)
{
delay_us(60);
}
else
{
ds18b20_out = 1;
delay_us(60);
}
ds18b20_out = 1;
delay_us(1);
}
}
void DS18B20_ChangeTemp()
{
DS18B20_write(0xcc); //忽略ROM
DS18B20_write(0x44); //温度转换
return;
}
void DS18B20_ReadTemp()
{
DS18B20_write(0xcc);
DS18B20_write(0xbe); //读取RAM
return;
}
u16 readTemp()
{
int temp = 0;
u8 tmph = 0, tmpl = 0;
DS18B20_reset(); //必须的
DS18B20_ChangeTemp();
DS18B20_reset(); //必须的
DS18B20_ReadTemp();
tmpl = DS18B20_read(); //低字节
tmph = DS18B20_read(); //高字节
temp = tmph;
temp <<= 8;
temp |= tmpl;
return temp;
}
int main(void)
{
while(DS18B20_init() != 0)
{
printf("DS18B20_init failed.\n");
delay_ms(500);
}
while(1)
{
led1 = ~led1;
r = readTemp();
if((r & 0xf800) == 0xf800)
{
r = (~r) + 1;
temp = r * (-0.0625);
}
else
{
temp = r * 0.0625;
}
printf("temp %.2f\n", temp);
delay_ms(1000);
}
}
stm32 ds18b20 温度传感器的更多相关文章
- DS18B20温度传感器知识点总结
2018-01-1818:20:48 感觉自己最近有点凌乱,一个很简单的问题都能困扰自己很久.以前能很好使用和调试的DS18B20温度传感器,今天愣是搞了很久,妈卖批. 仅仅一个上拉电阻就困扰了我很久 ...
- 单线制DS18B20温度传感器LED数码管显示当前的温度值
/******************************************* 程序功能:利用单线制DS18B20温度传感器 LED数码管显示当前的温度值 ***************** ...
- DS18b20温度传感器基础使用
认识管脚 认识唯一标示的64位地址序列号 寄存器数据译码成温度值(下面只针对12位转化的,还有9..10等其他位的转化方式,不同位的转化,其精度也不同) 传感器存储器 配置寄存器使用说明 DS18b2 ...
- 总结:如何驱动DS18B20温度传感器
DS18B20时序分析: 以下是STM32的驱动代码: #include "bsp_ds18b20.h" static void DS18B20_GPIO_Config(void) ...
- stm32 内部温度传感器的配置
STM32的内部温度传感器和ADCx—IN16输入通道相连接.且温度传感器推荐采样时间为17.1us,支持的温度范围为:-40~125度,精度比较差,± 5℃左右. 计算温度值:T(℃) ={(V25 ...
- 「雕爷学编程」Arduino动手做(39)——DS18B20温度传感器
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...
- 单片机学习(十二)1-Wire通信协议和DS18B20温度传感器
目录 一.DS18B20 1. DS18B20简介 2. 电路原理图 3. 内部结构 内部完整结构框图 存储器结构 二.单总线(1-Wire BUS) 1. 单总线简介 2. 电路规范 3. 单总线的 ...
- nanopi的ds18b20温度传感器测试
参考(抄袭)资料在这里 先接线,3.3v,gnd,数据输出脚,我是PG11 vim /boot/armbianEnv.txt overlays=w1-gpio param_w1_pin=PG11 pa ...
- 使用天祥TX-1C调试DS18B20温度传感器的收获
翻查DS18B20的DataSheet编写操作函数,其过程遇到了不少坎,记下来备查. 对于单总线的DS18B20芯片,首先严格按照时序图写出正确的“写0”.“写1”和“读0.1”的基础函数,再以此写出 ...
随机推荐
- java导入excel很完美的取值的方法
java导入excel很完美的取值的方法 1.解决方法: /** * 获取单元格数据内容为字符串类型的数据 * @param cell Excel单元格 * @return St ...
- 请求头User-Agent作用?
请求头User-Agent作用 答: User Agent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA.它是一个特殊字符串头,是一种向访问网站提供你所 ...
- 服务器(三):利用github的webhooks实现自动部署
实现自动部署的关键就是利用github的webhooks,我们在github建立一个项目之后,在项目主页点击Settings,看到Webhooks点击打开可以添加一个链接,这里的意思是,github可 ...
- Mysql备份工具Xtrabackup
Xtrabackup是一个开源的免费的热备工具,在Xtrabackup包中主要有Xtrabackup和innobackupex两个工具.其中Xtrabackup只能备份InnoDB和XtraDB两种引 ...
- SpringCloud学习成长之路 六 cloud配置中心
一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ...
- python中pop(),popitem()的整理
在python中,列表,字典,有序字典的删除操作有些凌乱,所以决定记录下,以便以后用乱了. 列表: 列表删除有三种方式: l.pop() l.remove() del l[3:8] 已下面的code为 ...
- 【VS开发】Windows平台下Makefile学习笔记
作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译平台的问题(发现一些开源代码已经在使用VS2010开 ...
- 提高.NET应用性能
提高.NET应用性能的方法 写在前面 设计良好的系统,除了架构层面的优良设计外,剩下的大部分就在于如何设计良好的代码,.NET提供了很多的类型,这些类型非常灵活,也非常好用,比如List,Dictio ...
- pod install安装第三方库异常
使用pod install安装第三方插件时,可能会出现如下异常: Installing SDWebImage (3.7.3) [!] Error installing SDWebImage[!] /u ...
- airflow删除dag不在页面显示
当我们需要把dag删除的时候,遇到了删除了相应的dag文件,但页面还是显示 这个时候需要重启airflow 的webserver ps -ef|egrep rm -rf /home/airflow ...