DS18B20读取数据异常的问题

最近需要使用DS18B20这颗温度传感器进行温度采集,但是由于DS18B20对时序要求非常严格,读取温度数据时有可能出现读到错误的数据,这次是使用的正点原子的例程更改的代码,但是项目中需要控制整个电路的功耗,所以就讲系统频率降到了48MHz运行,采集温度时总会时不时出现数据错误的现象。这是第一次使用CSDN发布东西,后续我会继续使用CSDN这个平台以记录在项目开发中所遇到的坑,给自己留一个笔记,同时避免大家踩雷。

DS18B20读取温度时需要注意的事项

1,、在读取温度时最好关闭中断,在读取完后再开放中断,以避免读取过程中由于中断到来打断读取过程,超出延时时间,导致时序错误。
2、

delay延时函数延时不精确的问题和解决办法

在调试过程中发现delay_us函数延时有较大的误差,本项目是使用正点原子的例程进行更改的,所以以下仅以正点原子STM32F1例程进行说明。

程序中的delay_ms和delay_ms函数是使用滴答时钟实现的,在函数初始化时对每个ms和每个us需要完成的滴答数进行计算,存在了变量fac_us和变量fac_ms中。而这个变量的值是根据系统当前频率来计算的,由于挣点原子的例程使用的系统频率都是72MHz,delay_init()函数中SystemCoreClock变量的值也是72000000,但是我在更改系统频率时是直接使用寄存器操作方式修改的,并未修改这个值,就造成了延时不准确的问题。

程序中SystemCoreClock的值是在system_stm32f10x.c文件中定义的,由151~165行的宏,这里的宏就设置了当前系统运行频率,因此需要将宏修改为对应频率的宏,计时才精准。

如何查看延时是否精准

可以使用Keil Debug中右下角的系统运行时间来计算。需要提前配置好相关设置,设置方法如下:
1、点击魔术棒
在这里插入图片描述
2、Debug—>Settings在这里插入图片描述
3、将Enable前的复选框打钩,更改频率为4自己所使用的频率,然后确定即可。在这里插入图片描述
4、debug时在delay那一行和后面一行各打一个断点,看看看看delay运行前后结束后的时间差。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值