查看: 3160|回复: 4

我要使用DS18b20进行温度检测,需要us级别的延时,上网查...

[复制链接]
  • TA的每日心情
    奋斗
    2015-11-30 14:13
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2015-12-11 22:41:10 | 显示全部楼层 |阅读模式
    分享到:
    我要使用DS18b20进行温度检测,需要us级别的延时,上网查了相关资料,看了相应的代码,然后把那些ucosII的去掉了,然后进行测试,发现延时很不准,温度也检测不了。。。
    延时c文件
    #include "delay.h"

    void delay_init()         
    {
            SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);        //选择外部时钟  HCLK/8
    }

    void delay_us(u32 nus)
    {               
            u32 temp;                                        
            SysTick->LOAD=nus*9; //时间加载                           
            SysTick->VAL=0x00;        //清空计数器
            SysTick->CTRL|=SysTick_Counter_Enable ;          //开始倒数         
            do
            {
                    temp=SysTick->CTRL;
            }
            while(temp&0x01&&!(temp&(1<<16))); //等待时间到达   
            SysTick->CTRL&=~(SysTick_Counter_Enable);       //关闭计数器
            SysTick->VAL =0X00;       //清空计数器         
    }


    void delay_ms(u16 nms)
    {                                     
            u32 temp;                  
            SysTick->LOAD=nms*9000;//时间加载(SysTick->LOAD为24bit)
            SysTick->VAL =0x00;           //清空计数器
            SysTick->CTRL|=SysTick_Counter_Enable ;          //开始倒数  
            do
            {
                    temp=SysTick->CTRL;
            }
            while(temp&0x01&&!(temp&(1<<16)));//等待时间到达   
            SysTick->CTRL&=~(SysTick_Counter_Enable);       //关闭计数器
            SysTick->VAL =0X00;       //清空计数器                      
    }
    头文件
    #ifndef __DELAY_H
    #define __DELAY_H                           
    #include"stm32f10x_lib.h"

    void delay_init(void);
    void delay_ms(u16 nms);
    void delay_us(u32 nus);

    #endif

    测试情况:
    1.png

    此时时间:

    2.png

    运行:

    3.png

    此时时间:

    4.png

    整整相差0.0775568,也就是78ms , 也是 77557us ,并不是750us 。。。。。

    我是放在main函数里测试的







    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-11-30 14:13
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2015-12-12 08:52:01 | 显示全部楼层
    5.png
    6.png
    7.png
    8.png
    前面的断点设置有些问题,改正了一下,但发现时间还是不对啊,相差5ms啊




    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-5-27 15:41
  • 签到天数: 868 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-12-12 10:40:31 | 显示全部楼层
    750us是大约的吧,内部晶振本来就不准的

    温度是可以检测的,我用cubeMX读18b20,因为HAL库没微妙延迟,也是用的系统滴答
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-11-30 14:13
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2015-12-12 10:57:34 | 显示全部楼层
    可我选择的是外部时钟啊,是晶振提供的,不是应该很准吗
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-11-30 14:13
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2015-12-12 10:58:48 | 显示全部楼层
    wambob 发表于 2015-12-12 10:40
    750us是大约的吧,内部晶振本来就不准的

    温度是可以检测的,我用cubeMX读18b20,因为HAL库没微妙延迟,也是 ...

    可我选择的是外部时钟啊,是晶振提供的,不是应该很准吗
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-3-29 05:42 , Processed in 0.158444 second(s), 24 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.