3回答

1收藏

STM32F0 #02进程帖(二)---串口实现DS18B20温度传感器温度显示

STMCU STMCU 10710 人阅读 | 3 人回复 | 2012-11-06

本帖最后由 fengye5340 于 2012-11-6 14:00 编辑

    STM32F0 #02进程帖(二)---串口实现DS18B20温度传感器温度显示
    在调试DS18B20的过程中,出了不少问题,也解决了一些问题,可以说不亚于进行了一次小战斗了。这次战斗虽然付出了一些代价,最终还是获胜了,哈哈!
    第一个插曲:"首次初始化失败"
    A、刚开始,DS18B20初始化没有成功,问题肯定出在时序上了,因为我最初用定时器2实现的精确延时,中断方式实现。在做延时的时候,5us的延时,示波器显示7.75us。50us
的延时,示波器显示为51.225us,600us的延时,显示为600.4475us,延时时间很精准,可就是初始化不成功。很是纳闷。所以,以为是时序延时时间的问题,接着就严格按照在MSP430上跑得没问题
的程序中的时序来调整,还是不成功。确实挺奇怪了,难道遇到鬼了,哈哈。最后,实在没办法了,就用软件延时试试吧,结果一试,串口显示:"DS18B20初始化成功"而不是那个“检测失败!”的字符了,那个小激动啊!
    B、因为本人刚接触STM32不久,对这个片子认识不是很深刻,所以感觉是调用中断的原因,因为用定时器中断实现的us级延时调用中断过频,
对时序要求严格的DS18B20会造成很大影响。如果哪位大虾,有不同意见,欢迎提供建议啊。
    C、软件延时这个方法倒好,不过是浪费CPU了,对ARM--M系列来说,用systick实现延时才是王道,这个是硬件,弄好了不用管它就行。
参考了网上的一些资料,整理出了一些延时方法,见论坛已发资料。最终确定了用SYSTICK实现的延时来实现DS18B20温度的读取。
   
    第二个插曲:"温度显示为零"
    A、打通了初始化这一关后,就要实现温度读取了,结果读出来以后,显示的当前温度为0 ℃,明明是严格按照时序来读写的,怎么会出问题呢。
    后来又把数据手册看了一下,对照这示波器,把延时时间又进行了多次调整,才终于显示成功。
    B、刚开始处理只有整数部分的显示,后来有增加了一位小数部分。这个就是软件问题了,很好实现,DS18B20的精度有限,只有0.5℃的精度,做多了也没有意义。
下面是调试成功的图片和一些资料,希望对有需要的人有帮助。

20121106224.jpg (211.4 KB, 下载次数: 86)

电路板连接实物

电路板连接实物

20121106225.jpg (162.77 KB, 下载次数: 85)

DS18B20

DS18B20

20121106125602640.jpg (162.71 KB, 下载次数: 102)

串口显示界面-1

串口显示界面-1

20121106125652765.jpg (158.98 KB, 下载次数: 64)

串口显示界面-2

串口显示界面-2

DS18B20--控制流程.rar

2.16 KB, 下载次数: 334

分享到:
回复

使用道具 举报

回答|共 3 个

倒序浏览

沙发

dwwzl

发表于 2012-11-6 14:02:31 | 只看该作者

关注一下的,以前用pic做过
用技术,爱生活!
板凳

ahljj

发表于 2015-2-2 19:03:54 | 只看该作者

STM32F0 #02进程帖
地板

GUN_xing

发表于 2015-6-18 14:01:28 | 只看该作者

楼主,能不能把串口发送的程序给我瞅瞅啊
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条