最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

CW32單片機UART低功耗模式介紹

2023-05-22 16:03 作者:武漢芯源半導體  | 我要投稿

在嵌入式系統(tǒng)的設計中,低功耗設計(Low-Power Design)是許多設計人員必須面對的問題,其原因在于嵌入式系統(tǒng)被廣泛應用于便攜式和移動性較強的產(chǎn)品中去,而這些產(chǎn)品不是一直都有充足的電源供應,往往是靠電池來供電,所以設計人員從每一個細節(jié)來考慮降低功率消耗,從而盡可能地延長電池使用時間。因此,大部分芯片都會有低功耗模式,以CW32L083為例,它就是一個32位低功耗微控制器。


一、芯片模式介紹

1.CW32L083工作模式

CW32L083 支持三種工作模式,由內(nèi)嵌的電源管理模塊自動完成電源的統(tǒng)一管理。三種工作模式是:?

? 運行模式(Active mode)?

? 休眠模式(Sleep mode)?

? 深度休眠模式(DeepSleep mode)?

電源上電后,系統(tǒng)自動進入運行模式。用戶可通過軟件程序,進入休眠或深度休眠兩種低功耗運行狀態(tài);在低功耗運行狀態(tài)時,可通過硬件中斷觸發(fā)喚醒機制,使系統(tǒng)返回到運行模式。


2.進入休眠模式或深度休眠模式

使用 M0+ 內(nèi)核的 ARM 等待中斷專用指令,WFI(Wait for Interrupt),配合 M0+ 內(nèi)核的系統(tǒng)控制寄存器(SCR, System Control Register)的 SLEEPONEXIT 和 SLEEPDEEP 位域,可實現(xiàn)立即進入或退出(中斷服務程序)時進 入休眠模式或深度休眠模式。?

? 立即進入?

執(zhí)行 WFI 指令,MCU 將立即進入休眠模式(SLEEPDEEP 為 0 時)或深度休眠模式(SLEEPDEEP 為 1 時)?

? 退出時進入?

將 SLEEPONEXIT 位置 1,當退出最低優(yōu)先級的中斷服務程序后,MCU 會進入休眠模式(SLEEPDEEP 為 0 時) 或深度休眠模式(SLEEPDEEP 為 1 時),而不需執(zhí)行 WFI 指令 。


在深度休眠模式下,系統(tǒng)將自動關閉高速時鐘。如用戶需要在深度休眠模式下使部分外設仍保持運行,則須在進入深度休眠模式前,啟動相應的低速時鐘并將該外設時鐘設置為此低速時鐘。


3.退出休眠模式或深度休眠模式

在休眠模式或深度休眠模式下,均可通過中斷來喚醒 CPU,返回到運行模式。但是,值得注意的是,如果用戶在中斷服務程序中執(zhí)行 WFI 命令進入休眠(包括深度休眠),則需要比此中斷更高優(yōu)先級的中斷才能喚醒 CPU,因此,我們強烈建議用戶在準備進入休眠前,應先處理完所有中斷服務程序,并且清除所有中斷請求和中斷標志。

使用中斷退出休眠模式,用戶必須在進入休眠(包括深度休眠)前使能此中斷的允許位。

中斷喚醒退出深度休眠模式時,CPU 運行狀態(tài)與退出休眠模式相同。


4.UART控制深度休眠模式

UART控制器工作在雙時鐘域下,支持在深度休眠模式下進行正常的數(shù)據(jù)收發(fā),并通過接收完成中斷喚醒 MCU回到運行模式。

如果設置了傳輸時鐘 UCLK來源為低速時鐘,當系統(tǒng)進入深度休眠模式后,高速時鐘將停止,低速時鐘保持運行,UART仍可以進行正常的數(shù)據(jù)收發(fā)(波特率僅支持 2400 bps、4800 bps 和 9600 bps)。要實現(xiàn)深度休眠模式下使用 UART 喚醒功能,需在進入深度休眠模式之前使能 UART 接收完成中斷(即設置 UARTx_IER.RC 為 1),數(shù)據(jù)接收完成時,接收完成中斷將喚醒MCU恢復到運行模式。

如果設置了傳輸時鐘 UCLK 來源為高速時鐘,當系統(tǒng)進入深度休眠模式后,高速時鐘會停止運行,UAR不會接收數(shù)據(jù)。此時,仍可通過GPIO中斷喚醒 MCU,實現(xiàn)在深度休眠模式下接收數(shù)據(jù),參考配置步驟如下:?

步驟 1:使能 UARTx_RXD 對應引腳的 GPIO 下降沿中斷;?

步驟 2:設置 UARTx_CR1.START 為 1,選擇 RXD 信號起始位判定方式為低電平;?

步驟 3:使能 UART 接收(即設置 UARTx_CR1.RXEN 為 1);?

步驟 4:進入深度休眠模式;?

步驟 5:等待主機發(fā)送數(shù)據(jù),產(chǎn)生 GPIO 下降沿中斷,喚醒 MCU;?

步驟 6:關閉 RXD 對應引腳的 GPIO 中斷功能,等待 RXD 接收完成。


二、實例演示:UART深度休眠模式示例(傳輸時鐘為LSI)

程序運行一段時間后進入深度休眠模式,PC發(fā)送數(shù)據(jù)可喚醒MCU,喚醒后UART輪詢接收數(shù)據(jù),并存儲到TxRxBuffer緩沖區(qū),UART接收到'\n'后不再接收數(shù)據(jù),然后將TxRxBuffer緩沖區(qū)中的數(shù)據(jù)回傳至PC。傳輸結束后,LED1閃爍5s,并再次進入深度休眠模式。


1.外設時鐘使能



2.配置GPIO



3.配置UART

4.配置低功耗模式

5.配置NVIC中斷

6.發(fā)送8位數(shù)組



7.接收8位數(shù)組



8.主程序



9.測試結果

結果顯示,通過PC發(fā)送123456后喚醒MCU, 喚醒后UART輪詢接收數(shù)據(jù),并存儲到TxRxBuffer緩沖區(qū),UART接收到'\n'后不再接收數(shù)據(jù),然后將TxRxBuffer緩沖區(qū)中的數(shù)據(jù)回傳至PC收到123456。傳輸結束后,LED1閃爍5s,并再次進入深度休眠模式。

圖片



CW32單片機UART低功耗模式介紹的評論 (共 條)

分享到微博請遵守國家法律
左权县| 临沧市| 鄂托克前旗| 唐河县| 蓬安县| 易门县| 榕江县| 盈江县| 沽源县| 元江| 贵南县| 渭源县| 岐山县| 志丹县| 正安县| 北碚区| 弋阳县| 穆棱市| 大兴区| 县级市| 郯城县| 右玉县| 潞西市| 隆化县| 马龙县| 灵川县| 安泽县| 资中县| 松阳县| 扎囊县| 富源县| 商都县| 凤山县| 太谷县| 依安县| 宁南县| 南汇区| 平南县| 武清区| 南城县| 衡山县|