OpenEdv-开源电子网

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

战舰V3板子UCOSII下使用DS18B20,加入定时器就显示不了温度了

[复制链接]

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-3-4
在线时间
9 小时
发表于 2016-4-3 16:37:39 | 显示全部楼层 |阅读模式
2金钱
使用的是STM32FI03战舰V3板子,UCOSII+DS18B20进行温度显示,是在实验51 UCOSII实验1-1-任务调度例程下改的,加入了原子哥的DS18B20,正常显示没有问题。但是在加入了定时器之后温度就显示为0.0了,去掉定时器就好了,求助为啥,例程的定时器用的是TIM3,换成别的通用定时器也同样不行,没找到原因,卡了好几天了,求助

最佳答案

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

找到原因了,是因为把18B20加入到UCOS里后,由于多任务运行,中断影响了温度的正常读取,把DS18B20里的所有延时函数delay_us( );去掉,改成软件延时,也就是 void delay1_us(u16 time) { u16 i=0; while(time--) { i=5; while(i--) ; } } 解决问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-3-4
在线时间
9 小时
 楼主| 发表于 2016-4-3 16:37:40 | 显示全部楼层
找到原因了,是因为把18B20加入到UCOS里后,由于多任务运行,中断影响了温度的正常读取,把DS18B20里的所有延时函数delay_us( );去掉,改成软件延时,也就是
void delay1_us(u16 time)
{       
        u16 i=0;       
        while(time--)
        {
                i=5;
                while(i--) ;
        }
}
解决问题。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-4-3 21:07:43 | 显示全部楼层
是不是定时器的中断频率太快了?
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
11970
金钱
11970
注册时间
2013-3-8
在线时间
1275 小时
发表于 2016-4-3 21:20:27 | 显示全部楼层
要么是定时器中断频率太快了,要么就是在中断里处理了太多东西!建议读取18B20时,关闭中断试试!等读完再开中断!
回复

使用道具 举报

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-3-4
在线时间
9 小时
 楼主| 发表于 2016-4-5 10:08:54 | 显示全部楼层
本帖最后由 269873978 于 2016-4-5 10:10 编辑
正点原子 发表于 2016-4-3 21:07
是不是定时器的中断频率太快了?


更改频率试过爷爷不行啊,但是为什么我在中断服务里加上  SysTick_Handler();  就可以了,但是  TIM3_Int_Init(4999,7199);  只能放在读取18B20的前面才行,还是哪里有问题。。。
回复

使用道具 举报

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-3-4
在线时间
9 小时
 楼主| 发表于 2016-4-5 10:12:12 | 显示全部楼层
augustedward 发表于 2016-4-3 21:20
要么是定时器中断频率太快了,要么就是在中断里处理了太多东西!建议读取18B20时,关闭中断试试!等读完再 ...

中断里只是设置了让指示灯翻转,频率改低也还是会出现18B20读取有问题,只不过原来度出来是0.0,现在是混乱的数
回复

使用道具 举报

28

主题

303

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2014-8-14
在线时间
67 小时
发表于 2016-4-9 14:37:52 | 显示全部楼层
怒赞~~~~~~~
这个世界上还有很多很多的人,但你不认识他们,他们也不属于你的世界。这个世界上还有很多好吃的好玩的好看的东西,可真正属于你的世界其实是很小的,只是你去过的地方吃过的东西和见过的落日,还有会在乎你死活的朋友。”——《龙族》
回复

使用道具 举报

1

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
245
金钱
245
注册时间
2017-7-1
在线时间
81 小时
发表于 2019-11-14 17:45:41 | 显示全部楼层
是因为原子哥写的delay函数引起任务调度,打断了ds18B20的时序,所以得不到想要的结果
回复

使用道具 举报

0

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
206
金钱
206
注册时间
2019-12-3
在线时间
27 小时
发表于 2019-12-5 10:11:42 | 显示全部楼层
有没有用中断来产生DS18B20时序的?软件延时产生的时序很容易被中断处理打乱
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-23 21:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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