4回答

0收藏

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

STMCU STMCU 3776 人阅读 | 4 人回复 | 2015-12-11

我要使用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

测试情况:


此时时间:



运行:



此时时间:



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

我是放在main函数里测试的







分享到:
回复

使用道具 举报

回答|共 4 个

倒序浏览

沙发

clyclycly

发表于 2015-12-12 08:52:01 | 只看该作者





前面的断点设置有些问题,改正了一下,但发现时间还是不对啊,相差5ms啊




板凳

wambob

发表于 2015-12-12 10:40:31 | 只看该作者

750us是大约的吧,内部晶振本来就不准的

温度是可以检测的,我用cubeMX读18b20,因为HAL库没微妙延迟,也是用的系统滴答
地板

clyclycly

发表于 2015-12-12 10:57:34 | 只看该作者

可我选择的是外部时钟啊,是晶振提供的,不是应该很准吗
5#

clyclycly

发表于 2015-12-12 10:58:48 | 只看该作者

wambob 发表于 2015-12-12 10:40
750us是大约的吧,内部晶振本来就不准的

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

可我选择的是外部时钟啊,是晶振提供的,不是应该很准吗
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

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