嵌入式学习小组
直播中

周臻庸

7年用户 853经验值
私信 关注

M261芯片如何进入睡眠和深度睡眠模式,以及如何退出来?有没有C语言参考?

M261芯片如何进入睡眠和深度睡眠模式,以及如何退出来?有没有C语言参考?

回帖(1)

李丽

2024-1-13 17:00:19
M261芯片可以通过官方提供的库函数来进入睡眠和深度睡眠模式,同时也可以通过手动配置相应寄存器来实现。

以下是进入睡眠模式的示例代码:

```c
#include "NuMicro.h"

int main(void)
{
    /* 系统时钟配置 */
    CLK_EnableCKO(CLK_CLKSEL2_FRQDIV_S_HXT, 0, 0);  // 配置时钟输出源为HXT,分频系数为1
    CLK_EnableModuleClock(UART0_MODULE);  // 使能UART0模块时钟

    /* UART配置 */
    UART_Open(UART0, 115200);  // 配置UART0波特率为115200
    printf("Hello, World!n");  // 发送欢迎消息

    /* 睡眠模式配置 */
    CLK_PowerDown();  // 进入睡眠模式

    /* 退出睡眠模式 */
    CLK_PowerUp();  // 退出睡眠模式
    SystemInit();  // 重新初始化系统时钟

    return 0;
}
```

在上述示例代码中,通过调用`CLK_PowerDown()`函数来进入睡眠模式,从而实现降低功耗的目的。当需要退出睡眠模式时,只需要调用`CLK_PowerUp()`函数即可。同时,为了保证系统正常运行,我们还需要在退出睡眠模式后重新初始化系统时钟,可以调用`SystemInit()`函数来完成。

以下是进入深度睡眠模式的示例代码:

```c
#include "NuMicro.h"

int main(void)
{
    /* 系统时钟配置 */
    CLK_EnableCKO(CLK_CLKSEL2_FRQDIV_S_HXT, 0, 0);  // 配置时钟输出源为HXT,分频系数为1
    CLK_EnableModuleClock(UART0_MODULE);  // 使能UART0模块时钟

    /* UART配置 */
    UART_Open(UART0, 115200);  // 配置UART0波特率为115200
    printf("Hello, World!n");  // 发送欢迎消息

    /* 深度睡眠模式配置 */
    CLK_SetPowerDownMode(CLK_PMUCTL_PM_SEL_PD);  // 配置PMU控制器工作在深度睡眠模式下
    /* 如果需要外部中断唤醒芯片,需要进行相应的配置,例如:
     * GPIO_EnableInt(PA, 2, GPIO_INT_FALLING);  // 使能PA.2下降沿触发中断
     * NVIC_EnableIRQ(GPIO_PA_IRQn);  // 使能PA中断
     */

    /* 进入深度睡眠模式 */
    CLK_PowerDown();  // 进入深度睡眠模式

    /* 退出深度睡眠模式 */
    CLK_PowerUp();  // 退出深度睡眠模式
    SystemInit();  // 重新初始化系统时钟

    return 0;
}
```

在上述示例代码中,除了调用`CLK_PowerDown()`函数进入睡眠模式外,还需要进行一些额外的配置,例如设置PMU控制器工作在深度睡眠模式下、配置外部中断唤醒芯片等。需要注意的是,在进入深度睡眠模式前,必须配置好唤醒芯片的条件,否则无法从深度睡眠模式中唤醒,可能会导致系统无法恢复正常工作。

以上就是M261芯片进入睡眠和深度睡眠模式的示例代码,可以根据实际需求进行相应的修改和调整。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分