標(biāo)題: LPUART喚醒STOP模式下的MCU之話題 [打印本頁(yè)]

作者: 小融1號(hào)    時(shí)間: 2017-5-5 09:44
標(biāo)題: LPUART喚醒STOP模式下的MCU之話題
在低功耗應(yīng)用中有時(shí)會(huì)讓MCU進(jìn)入STOP模式以節(jié)省功耗,在有些芯片架構(gòu)中,若要實(shí)現(xiàn)這種應(yīng)用,往往會(huì)在進(jìn)低功耗模式之前將串口的管腳設(shè)置成帶外部中斷模式的普通IO口。雖然這樣也可以達(dá)到效果,但這樣難免會(huì)丟失開(kāi)頭的一些數(shù)據(jù)。
STM32家族里有些系列的芯片已經(jīng)集成了低功耗UART,即LPUART,這樣就能將低功耗、數(shù)據(jù)通信、正常喚醒完美結(jié)合。
我們可以使用新的LPUART把MCU從STOP下喚醒,又可以不丟失通訊數(shù)據(jù)。當(dāng)然基于LPUART喚醒STOP模式下的MCU也有一定使用限制。下面我們將詳細(xì)介紹一下。

使用不同時(shí)鐘下LPUART進(jìn)行喚醒分析
1、使用HSI16的LPUART
使用HSI16作為L(zhǎng)PUART的時(shí)鐘,波特率就可以較高。不過(guò)使用LPUART來(lái)喚醒還是有個(gè)問(wèn)題要注意,即高速的波特率與LPUART的喚醒時(shí)間差的問(wèn)題。我們以STM32L431作為例子,根據(jù)其數(shù)據(jù)手冊(cè),它的LPUART喚醒時(shí)間如下:



結(jié)合某客戶的實(shí)際案例探討。他們反映LPUART在576000時(shí)喚醒會(huì)丟失首字節(jié)。來(lái)一起詳細(xì)分析一下這個(gè)情況。
如果應(yīng)用在STOP MODE 1/2 下,喚醒時(shí)間最大為8.5us,這個(gè)時(shí)間不能逾越串口異步通信所能承受的最大時(shí)間公差。畢竟,串口異步通信時(shí)是不會(huì)針對(duì)這個(gè)喚醒時(shí)間做等待的。那么現(xiàn)在需要做的就是在這樣情況下,求得串口的最大安全通信波特率。
首先我們需要需要以下兩個(gè)參數(shù):
tWULPUART (MCU從STOP模式下的喚醒時(shí)間),這可從數(shù)據(jù)手冊(cè)上查得(如上表)。
LPUART接收的允許公差(如下表):

下面我們以8bit ,1 STOP bit,BRR ≥4096,STOP 2 mode作為例子:
首先我們可以通過(guò)上表”Table 165: Tolerance of the LPUART receiver whenBRR[3:0] is different from 0000”得出LPUART在這情況下的接收容差是4.42%.

容錯(cuò)公式為 : DTRA + DQUANT + DREC + DTCL + DWU < USART
DTRA: 預(yù)期發(fā)送的容錯(cuò)率(這個(gè)包含發(fā)射器本身振蕩器的偏差)
DQUANT: 波特率接收的錯(cuò)誤率
DREC: 接收晶體的偏差
DTCL: 發(fā)送的偏差率 (一般都是發(fā)送器采用不對(duì)稱的上升沿和下降沿時(shí)序)
DWU :是從stop mode 下喚醒后采樣點(diǎn)的偏差而導(dǎo)致的錯(cuò)碼率.

為了更容易計(jì)算,我們簡(jiǎn)化一下公式,假設(shè)DTRA,DQUANT,DREC和DTCL為0%,所以DWU是4.42%,為了更準(zhǔn)確,我還要考慮晶體的誤差,我們使用的HSI誤差為1%,tWULPUART = 8.5uS(這里采用的是STOP2):

DREC + DWU < LPUART
=>1% + DWU <4.42%
=>DWU<3.42%
因?yàn)槲覀冞@里采用的是8bit ,1stop,所以 :
M[1:0] = 00 :
DWU = tWUUSART/(10 × Tbit )
Tbit min = 8.5us/( 10* 3.42%)
Tbit min = 24.8us

所以在這個(gè)條件下異步串口允許的最大波特率是1/24.8us,即要小于40.3K的波特率.我們客戶使用的是576000的波特率顯然過(guò)高,丟失首字節(jié)就不難理解了。當(dāng)修改為19200后,問(wèn)題就解決了。

2、使用LSE的LPUART
有了上面的分析,如果LPUART使用LSE就相對(duì)簡(jiǎn)單了。因?yàn)長(zhǎng)SE只有32.768Khz,LPUART的波特率最大也只能到9600,速度下來(lái)了,自然就沒(méi)有那么多問(wèn)題了。

小結(jié):時(shí)不時(shí)會(huì)有人問(wèn)起類似問(wèn)題,其實(shí)關(guān)于該問(wèn)題在STM32芯片的相關(guān)參考手冊(cè)中都有描述?傊,在開(kāi)發(fā)中遇到問(wèn)題時(shí)建議看看芯片技術(shù)手冊(cè)的相關(guān)部分,有的可能是專門(mén)描述,有的是可能是旁注提醒【Note/Caution】等。





作者: 晏城第一大帥哥    時(shí)間: 2018-5-29 16:01
樓主大神,我這邊使用LSE 2400 為什么進(jìn)不去喚醒中斷呢,求賜教




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1