UART 和 LOGUART

对于需要特定时钟设置的外设,例如 UART 和 LOGUART,其设置流程在以下章节中进行了描述。

  1. 初始化 UART/LOGUART 并使能其中断。

  2. 设定唤醒源:在 sleep_wevent_config[] 中设置唤醒源 (UART0/UART1/UART2_BT/UART_LOG) 要唤醒的 CPU( WAKEUP_KM4WAKEUP_KM0),并确保中断注册在要唤醒的 CPU 上。

  3. 选择时钟源:

    1. XTAL: 在 ps_config[] 中将 xtal_mode_in_sleep 设置为 XTAL_Normal, 将 keep_OSC4M_on 设置为 TRUE。

    2. OSC2M: 在 ps_config[] 中将 keep_OSC4M_on 设置为 TRUE。

  4. 设置工作电压:在 ps_config[] 中将 sleep_to_08V 设定为 TRUE

  5. 通过释放 KM4 上的睡眠锁进入睡眠模式(PMU_OS 需要被释放,因为系统启动时默认已获取)。

  6. 唤醒后清除 UART/LOGUART 中断。

备注

  • 当使用 UART 作为唤醒源时,有以下限制:

    • Rx 时钟源只能为 OSC2M,且睡眠期间不可关闭 OSC4M。当波特率大于 115200 时,不建议使用 UART 作为唤醒源。

      • 睡前需要调用 API RCC_PeriphClockSource_UART(UARTx_DEV, UART_RX_CLK_OSC_LP) 将时钟切换到 OSC2M。

      • 醒后需要更高波特率,可通过 API RCC_PeriphClockSource_UART(UARTx_DEV, UART_RX_CLK_XTAL_40M) 切换为 XTAL40M Rx 时钟。

    • 用于唤醒的命令中超出 FIFO 深度(64 字节)的部分会丢失。

  • 当使用 LOGUART 作为唤醒源时,有以下限制:

    • 若 Rx 时钟源为 OSC2M,睡眠期间不可关闭 OSC4M。

      • 睡前需要调用 API RCC_PeriphClockSource_LOGUART(LOGUART_CLK_OSC_LP) 将时钟切换到 OSC2M。

      • 醒后需要更高波特率,可通过 API RCC_PeriphClockSource_LOGUART(LOGUART_CLK_XTAL_40M) 切换为 XTAL40M Rx 时钟。

    • 若 Rx 时钟源为 XTAL40M,睡眠期间不可关闭 XTAL。

    • 用于唤醒的命令中超出 FIFO 深度(16 字节)的部分会丢失。