查看: 10340|回复: 11

[求助] RT1011是否支持串口唤醒

[复制链接]

该用户从未签到

5

主题

15

帖子

0

中级会员

Rank: 3Rank: 3

积分
221
最后登录
2021-6-26
发表于 2020-6-4 16:01:47 | 显示全部楼层 |阅读模式
如题,我想在MCU低功耗空闲的状态下使用串口唤醒,参考SDK中的电源管理例程修改了唤醒源和初始化了UART,进入低功耗空闲状态后,发现怎么发送数据都无法唤醒MCU,但是将UARTRX引脚初始化成GPIO串口发送数据能正常唤醒。不知道是不是哪里配置有问题,还是RT并不支持串口唤醒,如果支持,我该怎么操作?望解答。
各种模式下的唤醒源:





我的代码:
void Lpuart_Init(void)
{
/* Configure UART divider to default */
CLOCK_SetMux(kCLOCK_UartMux, 1); /* Set UART source to OSC 24M */
CLOCK_SetDiv(kCLOCK_UartDiv, 0); /* Set UART divider to 1 */

lpuart_config_t config;
/*
* config.baudRate_Bps = 115200U;
* config.parityMode = kLPUART_ParityDisabled;
* config.stopBitCount = kLPUART_OneStopBit;
* config.txFifoWatermark = 0;
* config.rxFifoWatermark = 0;
* config.enableTx = false;
* config.enableRx = false;
*/
LPUART_GetDefaultConfig(&config);
config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
config.enableTx = true;
config.enableRx = true;
LPUART_Init(APP_WAKEUP_LPUART_BASE, &config, APP_WAKEUP_LPUART_CLK_FREQ);
/* Enable RX interrupt. */
LPUART_EnableInterrupts(APP_WAKEUP_LPUART_BASE, kLPUART_RxDataRegFullInterruptEnable);
EnableIRQ(APP_WAKEUP_LPUART_IRQn);
NVIC_EnableIRQ(APP_WAKEUP_LPUART_IRQn);
LPM_EnableWakeupSource(APP_WAKEUP_LPUART_IRQn);
}

void LowPowerIdleMode(void)
{
LPM_PreEnterWaitMode();
LPM_EnterLowPowerIdle();
LPM_ExitLowPowerIdle();
LPM_PostExitWaitMode();
}


void APP_WAKEUP_LPUART_IRQn_HANDLER(void)
{
if ((kLPUART_RxDataRegFullFlag)&LPUART_GetStatusFlags(APP_WAKEUP_LPUART_BASE))
{
recv_data = LPUART_ReadByte(APP_WAKEUP_LPUART_BASE);
PRINTF("%c", recv_data);
LPM_DisableWakeupSource(APP_WAKEUP_LPUART_IRQn);
}
}

回复

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25480
最后登录
2025-9-9
发表于 2020-6-4 17:15:16 | 显示全部楼层
楼主你好!
看了下LPUART的低功耗模式,有这些说明:
48.2.2.1 Stop mode
The LPUART remains functional during Stop mode, provided the CTRL[DOZEEN] bit
is clear and the asynchronous transmit and receive clock remain enabled. The LPUART
can generate an interrupt or DMA request to cause a wakeup from Stop mode.
If the LPUART is disabled in Stop mode, then it can generate a wakeup via the
STAT[RXEDGIF] flag if the receiver detects an active edge.
你看看,你对应的配置做了没有?
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

15

帖子

0

中级会员

Rank: 3Rank: 3

积分
221
最后登录
2021-6-26
 楼主| 发表于 2020-6-4 17:46:27 | 显示全部楼层
小恩GG 发表于 2020-6-4 17:15
楼主你好!
看了下LPUART的低功耗模式,有这些说明:
48.2.2.1 Stop mode

小恩你好,

我根据你给出的描述清除了CTRL[DOZEEN]位,即将其置0使能,时钟部分我并没有关闭所以保持使能状态。但并没有起什么做作用。你标注的这个章节我也没在手册看到,我的手册描述LPUART在40章节。
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

15

帖子

0

中级会员

Rank: 3Rank: 3

积分
221
最后登录
2021-6-26
 楼主| 发表于 2020-6-4 18:04:19 | 显示全部楼层
小恩GG 发表于 2020-6-4 17:15
楼主你好!
看了下LPUART的低功耗模式,有这些说明:
48.2.2.1 Stop mode

另外我还将串口中断的接收buf满触发中断改为检测接收边沿中断触发。也无法从低功耗状态唤醒,感觉就没有触发接收中断。
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

15

帖子

0

中级会员

Rank: 3Rank: 3

积分
221
最后登录
2021-6-26
 楼主| 发表于 2020-6-5 09:07:23 | 显示全部楼层
本帖最后由 ~物语 于 2020-6-5 09:10 编辑
小恩GG 发表于 2020-6-4 17:15
楼主你好!
看了下LPUART的低功耗模式,有这些说明:
48.2.2.1 Stop mode

可能我没表述清楚,我想实现的是使用串口去唤醒处于低功耗状态下的MCU。并不仅仅让串口在低功耗模式下可以工作。昨天测试的两种方法都没成功,在低功耗状态下串口是不工作的。我确保已经进入了低功耗状态,因为我使用万用表检测着电流。另外我使用的是串口3。
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

15

帖子

0

中级会员

Rank: 3Rank: 3

积分
221
最后登录
2021-6-26
 楼主| 发表于 2020-6-5 11:37:41 | 显示全部楼层
本帖最后由 ~物语 于 2020-6-5 11:44 编辑

我根据RM的描述,加入数据匹配唤醒,一样是不起作用。

代码如下,添加在LPUART初始化函数那里:
APP_WAKEUP_LPUART_BASE->CTRL &= ~(1 << LPUART_CTRL_DOZEEN_SHIFT);

APP_WAKEUP_LPUART_BASE->CTRL |= LPUART_CTRL_RWU(1)|LPUART_CTRL_WAKE(1);
APP_WAKEUP_LPUART_BASE->BAUD |= LPUART_BAUD_MATCFG(3)|LPUART_BAUD_MAEN1(1)|LPUART_BAUD_MAEN2(1);
APP_WAKEUP_LPUART_BASE->MATCH = LPUART_MATCH_MA1(0x81)|LPUART_MATCH_MA2(0xAA);
回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25480
最后登录
2025-9-9
发表于 2020-6-5 14:00:17 | 显示全部楼层
本帖最后由 小恩GG 于 2020-6-5 14:11 编辑
~物语 发表于 2020-6-5 11:37
我根据RM的描述,加入数据匹配唤醒,一样是不起作用。

代码如下,添加在LPUART初始化函数那里:

你现在的功耗模式是low power idle吗?主要还是要确认下你的功耗模式,LPUART到底是否还能够工作。
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

15

帖子

0

中级会员

Rank: 3Rank: 3

积分
221
最后登录
2021-6-26
 楼主| 发表于 2020-6-5 14:30:42 | 显示全部楼层
小恩GG 发表于 2020-6-5 14:00
你现在的功耗模式是low power idle吗?主要还是要确认下你的功耗模式,LPUART到底是否还能够工作。
...

恩,功耗模式是low power idle,进入低功耗后,串口不工作,测试方法是使用串口把收到的内容发回到上位机。在之前的描述中已经写了。
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

15

帖子

0

中级会员

Rank: 3Rank: 3

积分
221
最后登录
2021-6-26
 楼主| 发表于 2020-6-9 14:24:59 | 显示全部楼层
本帖最后由 ~物语 于 2020-6-9 14:27 编辑
小恩GG 发表于 2020-6-5 14:00
你现在的功耗模式是low power idle吗?主要还是要确认下你的功耗模式,LPUART到底是否还能够工作。
...

小恩你好,

这个问题我依然没有头绪,根据RM的描述,芯片进入低功耗后,串口是依然可以工作的,只要我没关闭它的时钟。另外,我使用的是OSC时钟,PLL时钟会在进入低功耗时关闭。


回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25480
最后登录
2025-9-9
发表于 2020-6-9 14:41:47 | 显示全部楼层
~物语 发表于 2020-6-9 14:24
小恩你好,

这个问题我依然没有头绪,根据RM的描述,芯片进入低功耗后,串口是依然可以工作的,只要我没 ...

把你问题的测试工程发我,然后GPIO可以唤醒的也发我,等我手里忙完,帮你测试下,如果确实复现问题,我去内部帮你问问。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-9 23:52 , Processed in 0.119598 second(s), 28 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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