- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
折腾了一晚上,才把 DS18B20 的驱动移植到 STM32 上来。以前在 51
上使用过单个和多个连接的 DS18B20 ,有现成的程序了,以为很快就
能弄好,结果还是被卡住了,下面说下几个关键点吧:
首先是延时的问题, STM32 上若用软件延时的话不太好算时间, 所
以要么用定时器要么用 SysTick 这个定时器来完成延时的计算。 相比之
下用 SysTick 来的简单方便点。
接着是 STM32 IO 脚的配置问题,因为 51是双向的 IO ,所以作为
输入输出都比较方便。 STM32 的 IO 是准双向的 IO,网上查了下资料,
说将 STM32 的 IO 配置成开漏输出,然后外接上拉即可实现双向 IO。
于是我也按规定做了,但调了老半天都不成功,是因为 DS18B20 没有
响应的信号。在烦躁之际只有试下将接 DQ 的 IO 分别拉低和拉高看能
不能读入正确的信号。结果果然是读入数据不对,原来我将 IO 配成开
漏输出后相当然的以为读数据是用 GPIO_ReadOutputDataBit() ,这正
是问题所在,后来将读入的函数改为 GPIO_ReadInputDataBit() 就 OK
了。现在温度是现实出来了, 但跟我家里那台德胜收音机上显示的温度
相差 2度,都不知道是哪个准了,改天再找个温度计验证下。
下面引用一段 DS18B20 的时序描述,写的很详细 :
DS18B20 的控制流程
根据 DS18B20 的通信协议, DS18B20 只能作为从机,而单片机系统作为主机,单片机控制 DS18B20 完成一次温度转换必须经过 3个步骤:复位、发送 ROM 指令、发送 RAM 指令。每次对 DS18B20 的操作
都要进行以上三个步骤。
复位过程为:单片机将数据线拉低至少 480uS ,然后释放数据线,等待 15-60uS 让 DS18B20 接收信号, DS18B20 接收到信号后,会把数据线拉低 60-240uS ,主机检测到数据线被拉低后标识复位成功;
发送 ROM 指令: ROM 指令表示主机对系统上所接的全部 DS18B20 进行寻址,以确定对那一个 DS18B20 进行操作,或者是读取某个 DS18B20 的 ROM 序列号。
发送 RAM 指令:RAM 指令用于单片机对 DS18B20 内部 RAM 进
行操作,如读取寄存器的值,或者设置寄存器的值。
具体的 RAM 和 RAM 指令请查阅 DS18B20 的数据手册。下面简
单介绍:
1、ROM 操作命令 : DS18B20采用一线通信接口。因为一线通信接口,必须在先完成 ROM设定,否则记忆和控制功能将无法使用。一
旦总线检测到从属器件的存在,它便可以发出器件 ROM操作指令, 所有
ROM操作指令均为 8位长度,主要提供以下功能命令:
)读 ROM(指令码 0X33H):当总线上只有一个节点(器件)时,读此节点的 64位序列号。如果总线上存在多于一个的节点, 则此指令不能使用。
)ROM匹配(指令码 0X55H):此命令后跟 64位的 ROM序列号,总线上只有与此序列号相同的 DS18B20才会做出反应;该指令用于选中某个
DS18B20,然后对该 DS18B20进行读写操作。
3 )搜索 ROM(指令码 0XF0H): 用于确定接在总线上 DS18B20的个数和
识别所有的 64位 ROM序列号。当系统开始工作,总线主机可能不知道总
线上的器件个数或者不知道其 64位 ROM序列号,搜索命令用于识别所有
连接于总线上的 64位 ROM序列号。
4 )跳过 ROM(指令码 0XCCH): 此指令只适合于总线上只有一个节点;
该命令通过允许总线主机不提供 64位 ROM序列号而直接访问 RAM,以节
省操作时间。
5 )报警检查(指令码 0XECH):此指令与搜索 ROM指令基本相同,差别
在于只有温度超过设定的上限或者下限值的 DS18B20才会作出响应。只
DS18B20一上电,告警条件就保持在设置状态,直到另一次温度测量显示出非告警值, 或者改变 TH或 TL 的设置使得测量值再一次位于允许
的范围之内。储存在 EEPROM内的触发器用于告警。
2、RAM指令
DS18B20有六条 RAM命令:
温度转换(指令码 0X44H): 启动 DS18B20进行温度转换,结果存入内部 RAM。
读暂存器(指令码 0XBEH):读暂存器 9个字节内容, 此指令从 RAM
的第 1个字节(字节 0)开始读取,直到九个字节(字节 8,CRC值)被读
出为止。如果不需要读出所有字节的内容,那么主机可以在任何时候发
出复位信号以中止读操作。
写暂存器(指令码 0X4EH): 将上下限温度报警值和配置数据写入到 RAM的2
原创力文档


文档评论(0)