GD32L233低功耗串口唤醒
问题:参考官方的示例代码串口唤醒deep-sleep程序,串口接收后唤醒不了MCU。疑问点,MCU进入Deep-sleep模式后,所有时钟是禁止关闭的,串口模块RX接受数据判断,肯定是需要时钟才能运行,它是如何唤醒的。
官方示例程序有一个地方可能会让人误导,或者说会让人理解困难,进入深度睡眠前,会设置一下串口的时钟源为内部IRC16M时钟。
实际本质上设置串口时钟为内部时钟,并不是说在deep-sleep时,串口模块是由IRC16M来提供时钟,这个设置是为了唤醒后做准备的,因为唤醒后系统默认的时钟源是IRC16M。
深度睡眠介绍中写得比较清楚,在该模式下所有时钟都禁用,包括内部时钟IRC16M。所以从深度睡眠中唤醒,实质上就是IO口电平唤醒。串口模块没有办法接受完一字节数据才唤醒,因为它没有时钟。所以在串口唤醒配置中,只能选择串口开始位电平唤醒。
字在usart_wakeup_mode_config函数中的第二个输入形参,只能选择USART_WUM_STARTB,虽然标准库中,有其他选项,但是对于Deep-sleep模式只能选开始位唤醒。当你不是进入deep-sleep,而是sleep模式时,串口接收唤醒才能使用,因为sleep模式没有关对应时钟。
把串口唤醒源从接收数据唤醒改为串口开始位唤醒,问题得以解决。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/miaozheChen/article/details/142315377
在深度睡眠模式下,GD32L233系列MCU的电流降至极低水平(如2uA),以最大限度地节省电能。
在此模式下,大部分内部时钟和外设都被禁用,以降低功耗。 在 GD32L233 中,可以通过设置中断优先级寄存器来确定串口唤醒中断的优先级。确保将串口唤醒中断的优先级设置为适当的值,以便在需要时能够及时响应唤醒事件。 在进入深度睡眠模式前,需要配置串口模块以支持唤醒功能。
通常,这包括设置串口时钟源、波特率、数据位、停止位和校验位等参数。 虽然深度睡眠模式下所有时钟被禁用,但可以通过IO口电平变化来唤醒MCU。对于串口唤醒,实际上是通过检测串口开始位的电平变化来实现的。在usart_wakeup_mode_config函数中,第二个输入形参只能选择USART_WUM_STARTB,即使用串口开始位唤醒。 配置GD32L233进入低功耗模式,并启用串口唤醒功能。 在进入深度睡眠前,配置串口的时钟源为内部IRC16M时钟。这实际上是为了唤醒后做准备,因为唤醒后系统默认的时钟源是IRC16M。 当MCU被串口唤醒后,通常会触发一个中断。在中断服务程序中,可以编写相应的代码来处理唤醒后的任务。 在进入低功耗模式之前,需要根据具体的应用需求,对芯片的其他外设和功能进行适当的配置和关闭,以进一步降低功耗。 GD32L233是一款基于ARM Cortex-M4内核的低功耗微控制器,具有多种低功耗模式。在低功耗模式下,可以通过串口唤醒功能来唤醒MCU GD32L233系列MCU支持多种唤醒源,包括低功耗定时器(Low power Timer)、低功耗UART(Low power UART)、RTC(实时时钟)、LCD以及标准I2C、USART等。 当外部事件触发这些唤醒源时,MCU将从深度睡眠模式中唤醒,并恢复内部时钟和外设的正常工作。 在进入低功耗模式之前,需要使能LPUART的唤醒功能。这通常涉及到设置MCU的电源管理寄存器中的相关位。 首先需要配置系统时钟和串口时钟。确保在进入低功耗模式之前,串口时钟已经正确配置并保持开启状态。通常可以选择使用内部高速时钟或外部时钟源作为串口时钟,并根据需要设置相应的分频系数,以获得合适的串口通信波特率。 需要注意的是,在深度睡眠模式下,串口模块无法接收完整的数据包进行唤醒。因此,通常选择串口开始位电平作为唤醒条件。 在唤醒后,MCU需要恢复内部时钟和外设的正常工作。这通常包括重新启用被禁用的时钟和外设,并配置它们的工作参数。 将MCU配置为深度睡眠模式。在深度睡眠模式下,除了LPUART等特定外设外,MCU的其他部分都将停止工作,以达到最低的功耗 GD32L233系列MCU基于Arm Cortex-M23内核,具有多种低功耗模式,包括深度睡眠模式(Deep-sleep)。在深度睡眠模式下,所有时钟都被禁用,以降低功耗。 LPUART的中断信号将使MCU从深度睡眠模式中唤醒,恢复正常的运行状态。唤醒后,MCU可以处理LPUART接收到的数据,并继续执行其他任务。
页:
[1]