找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2802|回復(fù): 4
收起左側(cè)

基于STM32+ucos-II+DS18B20調(diào)試成功

[復(fù)制鏈接]
ID:79874 發(fā)表于 2020-2-2 19:48 | 顯示全部樓層 |閱讀模式
前幾天調(diào)試了一下DS18B20的程序,起初系統(tǒng)在裸奔的時(shí)候DS18B20可以很正常的讀取數(shù)據(jù)。由于項(xiàng)目前期設(shè)計(jì)時(shí)添加了ucos實(shí)時(shí)操作系統(tǒng)。原以為把裸奔的程序移植過來就可以使用。結(jié)果悲劇發(fā)生了……如果做過這方面的朋友一定知道。添加后,你會(huì)發(fā)現(xiàn)系統(tǒng)不跑了,徹底的死掉了。原因在何處?經(jīng)過一整天的查找,發(fā)現(xiàn)原來系統(tǒng)的時(shí)間片被占用了。導(dǎo)致ucos的ticks出現(xiàn)異常。


解決辦法:一種方法是:修改OS_CPU_SysTickInit(void)函數(shù),與delay函數(shù)進(jìn)行兼容。在溫度傳感器延時(shí)的時(shí)候不影響操作系統(tǒng)的tick運(yùn)行。這樣就可以解決問題了。


還有一種方法就是,把18B20的延時(shí)定時(shí)器更換成TIM3或者是其他定時(shí)器。和系統(tǒng)的tick分開。即可解決。

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:79874 發(fā)表于 2020-2-2 20:01 來自觸屏版 | 顯示全部樓層
CPU_CRITICAL_ENTER();         
  讀取18b20;
  CPU_CRITICAL_EXIT();
回復(fù)

使用道具 舉報(bào)

ID:79874 發(fā)表于 2020-2-3 08:47 來自觸屏版 | 顯示全部樓層
認(rèn)同二樓看法,DS18B20上見過類似情況,

OS_ENTER_CRITICAL();
XXXXXXXXXXXX
OS_EXIT_CRITICAL();

如上方法可解決。

你這情況有些蹊蹺了,如果問題不在中斷/delay上,也許是因?yàn)樗梨i。
不過死鎖一般出現(xiàn)在復(fù)雜的系統(tǒng)上,DHT11發(fā)生死鎖也不應(yīng)該啊。
回復(fù)

使用道具 舉報(bào)

ID:752705 發(fā)表于 2020-5-31 17:38 | 顯示全部樓層
學(xué)習(xí)一下,在哪里看代碼
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表