OpenEdv-开源电子网

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

DS18B20为什么要设置初始化串口

[复制链接]

6

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2017-7-16
在线时间
19 小时
发表于 2018-8-22 23:46:47 | 显示全部楼层 |阅读模式
5金钱
各位大神  最近搞到一个OLED显示屏(不是正点原子的模块  是一个普通的SPI接口的OLED)  想做一个带温度的万年历  关于温度测量方面  18B20驱动直接移植了官方的例程  但是在调试过程中读出的数据全是0  通过对比我发现我的MAIN函数跟例程的MAIN函数只有一个区别  就是例程中初始化了串口  我没有  当我把串口也初始化以后读数就正常了  请问我并没有用到串口为什么还要初始化串口呢?谢谢

最佳答案

查看完整内容[请看2#楼]

嗯嗯我说的死机就是如果使用了串口的话,向发送寄存器送一个字符后腰检测是否发送完成,直到发送完成这个发送函数才会退出进行其他工作。所以如果用到了串口但是却没有对串口进行初始化,这个发送完成标记就一直都不会置位,程序也就一直不断地检测这个是否发送完成,在宏观时间上来看单片机就和死机了一样。当然楼主的应该不是这个问题。 楼主可以尝试从下面几个地方找问题: 1、尝试用串口助手查看串口上是否有什么数据? ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-22 23:46:48 | 显示全部楼层
xxxxxx 发表于 2018-8-23 09:44
由于才疏学浅  我不太清楚您说的死机是什么现象  我在读温度的同时  还在从DS1302读时间  时间可以正常显 ...

嗯嗯我说的死机就是如果使用了串口的话,向发送寄存器送一个字符后腰检测是否发送完成,直到发送完成这个发送函数才会退出进行其他工作。所以如果用到了串口但是却没有对串口进行初始化,这个发送完成标记就一直都不会置位,程序也就一直不断地检测这个是否发送完成,在宏观时间上来看单片机就和死机了一样。当然楼主的应该不是这个问题。

楼主可以尝试从下面几个地方找问题:
1、尝试用串口助手查看串口上是否有什么数据?
2、尝试检查串口初始化时对引脚所做的初始化操作,是不是碰巧使能了和DS18B20有关的硬件或时钟?
十六进制带我飞。
回复

使用道具 举报

6

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2017-7-16
在线时间
19 小时
 楼主| 发表于 2018-8-22 23:47:37 | 显示全部楼层
补充一下  我用的板子是战舰
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2018-8-22
在线时间
1 小时
发表于 2018-8-23 01:24:28 | 显示全部楼层
因为DS18B20是通过,串口获取参数的,可要用普通IO口模拟个串口,读DS18B20
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-8-23 01:33:39 | 显示全部楼层
仿真找问题。按理说不影响。 你是不是用到printf,但是又没有初始化串口,所以死机 了?
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-23 08:49:44 | 显示全部楼层
我觉得4#正点原子说的正确。一般为了方便调试,大部分例程都会初始化串口,如果你copy过来没有直接修改的话,在准备输出调试信息的时候由于串口没有初始化,所以发送第一个字符之后就等待发送完成,但是一直都不会完成这个操作,进而给人的假象就是死机了。

不过上面我的猜想并不能解释楼主“调试的时候读到的数据都为0”的现象。很好奇,楼主没有使能串口的时候是使用OLED还是什么其他的手段查看的数据呢?还有就是如果DS18B20,没有能够正确地被初始化或者读出数据的时候,其获得到的读数应该是85.0才对啊
十六进制带我飞。
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7620
金钱
7620
注册时间
2016-11-30
在线时间
646 小时
发表于 2018-8-23 09:33:33 | 显示全部楼层
楼上说的对
回复

使用道具 举报

6

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2017-7-16
在线时间
19 小时
 楼主| 发表于 2018-8-23 09:40:51 | 显示全部楼层
正点原子 发表于 2018-8-23 01:33
仿真找问题。按理说不影响。 你是不是用到printf,但是又没有初始化串口,所以死机 了?

没有用printf 整个过程只是 从18B20读数 放到一个变量中  然后把变量送给OLED  仿真如果不初始化串口读出来的数据就是0
回复

使用道具 举报

6

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2017-7-16
在线时间
19 小时
 楼主| 发表于 2018-8-23 09:44:36 | 显示全部楼层
DreamWaterPro 发表于 2018-8-23 08:49
我觉得4#正点原子说的正确。一般为了方便调试,大部分例程都会初始化串口,如果你copy过来没有直接修改的话 ...

由于才疏学浅  我不太清楚您说的死机是什么现象  我在读温度的同时  还在从DS1302读时间  时间可以正常显示  但是温度一直是0  至于我是怎样知道读数是0  一方面是从OLED的显示中知道 另一方面是从仿真里面查看变量  二者结果都是0  并且整个程序都没用到串口  所有通讯都是用IO模拟
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-11 12:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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