5 years, 5 months ago.

Printed out string after woken up from deepsleep() are broken.


I'm testing deepsleep() function on ST Nucleo-L152RE board. Here is my code.

simple deepsleep and wake up by button

#include "mbed.h"

InterruptIn event(USER_BUTTON);
DigitalOut myled(LED1);

void trigger() {

int main() {
  int i = 1;
  pc.printf("Hello World !\r\n");
  while(1) { 
      myled = !myled;
      pc.printf("Enter deepsleep!\r\n", i++);
      pc.printf("Woken up\r\n");

And, here is result.

Result on terminal

Hello World !                                                                
Enter deepsleep!...............                                              
                               Woken up                                      
Enter deepsleep!

The 'pressed' string in trigger() function is broken. I found an article https://developer.mbed.org/questions/50532/Problems-after-WakeUp-from-deepsleep. So I commented out the printing in trigger().

Then, the result is ...

No printing pressed

Hello World !                                                
Enter deepsleep!C??k??.up                                   
Enter deepsleep!

Why is still the string broken?? Does the PLL need some time to be reconfigured? So I added wait(1.0) into trigger().


Hello World !
Enter deepsleep!..

Isn't wait() NOP based simple delay()? I don't know why the code stucks.

So I moved wait(1.0) in trigger() to right after deepsleep().

still broken characters

Hello World !
Enter deepsleep!C?Woken up
Enter deepsleep!

In this case, the code doesn't stuck. But still broken characters are printed before 'Woken up' string.

Is there anybody know it? Thanks.


Be the first to answer this question.