Nathan Yonkee
/
Nucleo_sleep_copy
sleep example
main.cpp@4:2afaac57dc82, 2017-09-25 (annotated)
- Committer:
- Nathan Yonkee
- Date:
- Mon Sep 25 17:33:00 2017 -0600
- Revision:
- 4:2afaac57dc82
- Parent:
- 2:aa4afe9a928c
use HAL drivers for better sleep
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Nathan Yonkee |
2:aa4afe9a928c | 1 | #include "mbed.h" |
Nathan Yonkee |
2:aa4afe9a928c | 2 | |
Nathan Yonkee |
4:2afaac57dc82 | 3 | bool sleepyTime = false; |
Nathan Yonkee |
4:2afaac57dc82 | 4 | |
Nathan Yonkee |
4:2afaac57dc82 | 5 | void interrupter() |
Nathan Yonkee |
4:2afaac57dc82 | 6 | { |
Nathan Yonkee |
4:2afaac57dc82 | 7 | sleepyTime = true; |
Nathan Yonkee |
4:2afaac57dc82 | 8 | }; |
Nathan Yonkee |
2:aa4afe9a928c | 9 | |
Nathan Yonkee |
4:2afaac57dc82 | 10 | int main() |
Nathan Yonkee |
4:2afaac57dc82 | 11 | { |
Nathan Yonkee |
4:2afaac57dc82 | 12 | /* (#)Initialize the LPTIM low level resources by implementing the */ |
Nathan Yonkee |
4:2afaac57dc82 | 13 | DigitalOut led( PB_3 ); |
Nathan Yonkee |
4:2afaac57dc82 | 14 | InterruptIn inter( PA_12 ); |
Nathan Yonkee |
4:2afaac57dc82 | 15 | inter.fall( &interrupter ); |
Nathan Yonkee |
4:2afaac57dc82 | 16 | led = 0; |
Nathan Yonkee |
4:2afaac57dc82 | 17 | RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; |
Nathan Yonkee |
4:2afaac57dc82 | 18 | __HAL_RCC_MSI_RANGE_CONFIG( RCC_MSIRANGE_5 ); |
Nathan Yonkee |
4:2afaac57dc82 | 19 | wait_ms( 2000 ); |
Nathan Yonkee |
4:2afaac57dc82 | 20 | RCC_ClkInitStruct.ClockType = ( RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2 ); |
Nathan Yonkee |
4:2afaac57dc82 | 21 | RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI; // 80 MHz |
Nathan Yonkee |
4:2afaac57dc82 | 22 | RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // 80 MHz |
Nathan Yonkee |
4:2afaac57dc82 | 23 | RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; // 80 MHz |
Nathan Yonkee |
4:2afaac57dc82 | 24 | RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // 80 MHz |
Nathan Yonkee |
4:2afaac57dc82 | 25 | HAL_RCC_ClockConfig( &RCC_ClkInitStruct, FLASH_LATENCY_4 ); |
Nathan Yonkee |
4:2afaac57dc82 | 26 | HAL_PWREx_ControlVoltageScaling( PWR_REGULATOR_VOLTAGE_SCALE2 ); |
Nathan Yonkee |
4:2afaac57dc82 | 27 | HAL_PWREx_EnableLowPowerRunMode(); |
Nathan Yonkee |
4:2afaac57dc82 | 28 | SystemCoreClockUpdate(); |
Nathan Yonkee |
4:2afaac57dc82 | 29 | HAL_PWREx_EnterSTOP0Mode( PWR_STOPENTRY_WFI ); |
Nathan Yonkee |
2:aa4afe9a928c | 30 | |
Nathan Yonkee |
4:2afaac57dc82 | 31 | if( HAL_RCC_GetSysClockFreq() < 3000000 ) { led = 1; } |
Nathan Yonkee |
2:aa4afe9a928c | 32 | |
Nathan Yonkee |
4:2afaac57dc82 | 33 | wait_ms( 1 ); |
Nathan Yonkee |
4:2afaac57dc82 | 34 | led = 0; |
Nathan Yonkee |
4:2afaac57dc82 | 35 | wait_ms( 1000 ); |
Nathan Yonkee |
4:2afaac57dc82 | 36 | led = 1; |
Nathan Yonkee |
4:2afaac57dc82 | 37 | wait_ms( 10 ); |
Nathan Yonkee |
4:2afaac57dc82 | 38 | led = 0; |
Nathan Yonkee |
4:2afaac57dc82 | 39 | /* HAL_MPU_Disable(); */ |
Nathan Yonkee |
4:2afaac57dc82 | 40 | /* __HAL_RCC_MSI_STANDBY_RANGE_CONFIG(RCC_MSIRANGE_5); */ |
Nathan Yonkee |
4:2afaac57dc82 | 41 | /* __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_MSI); */ |
Nathan Yonkee |
4:2afaac57dc82 | 42 | /* GPIO_InitTypeDef GPIO_InitStructure = {0}; */ |
Nathan Yonkee |
4:2afaac57dc82 | 43 | /* GPIO_InitStructure.Pin = GPIO_PIN_All; */ |
Nathan Yonkee |
4:2afaac57dc82 | 44 | /* GPIO_InitStructure.Mode = GPIO_MODE_ANALOG; */ |
Nathan Yonkee |
4:2afaac57dc82 | 45 | /* GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_LOW; */ |
Nathan Yonkee |
4:2afaac57dc82 | 46 | /* GPIO_InitStructure.Pull = GPIO_NOPULL; */ |
Nathan Yonkee |
4:2afaac57dc82 | 47 | /* HAL_GPIO_Init(GPIOC, &GPIO_InitStructure); */ |
Nathan Yonkee |
4:2afaac57dc82 | 48 | /* HAL_GPIO_Init(GPIOH, &GPIO_InitStructure); */ |
Nathan Yonkee |
4:2afaac57dc82 | 49 | /* __HAL_RCC_GPIOC_CLK_DISABLE(); */ |
Nathan Yonkee |
4:2afaac57dc82 | 50 | /* __HAL_RCC_GPIOH_CLK_DISABLE(); */ |
Nathan Yonkee |
4:2afaac57dc82 | 51 | /* __HAL_RCC_USB_CLK_DISABLE(); */ |
Nathan Yonkee |
4:2afaac57dc82 | 52 | /* __HAL_RCC_ADC_CLK_DISABLE(); */ |
Nathan Yonkee |
4:2afaac57dc82 | 53 | /* __HAL_RCC_USART1_CLK_DISABLE(); */ |
Nathan Yonkee |
4:2afaac57dc82 | 54 | /* __HAL_RCC_USART2_CLK_DISABLE(); */ |
Nathan Yonkee |
4:2afaac57dc82 | 55 | /* __HAL_RCC_LPUART1_CLK_DISABLE(); */ |
Nathan Yonkee |
4:2afaac57dc82 | 56 | wait_ms( 2000 ); |
Nathan Yonkee |
4:2afaac57dc82 | 57 | /* wait_ms(3000); */ |
Nathan Yonkee |
4:2afaac57dc82 | 58 | /* HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN5); */ |
Nathan Yonkee |
4:2afaac57dc82 | 59 | /* //pc.printf("1\r\n"); */ |
Nathan Yonkee |
2:aa4afe9a928c | 60 | |
Nathan Yonkee |
4:2afaac57dc82 | 61 | /* /1* Enable the fast wake up from Ultra low power mode *1/ */ |
Nathan Yonkee |
4:2afaac57dc82 | 62 | /* /1* HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); *1/ */ |
Nathan Yonkee |
4:2afaac57dc82 | 63 | /* /1* HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); *1/ */ |
Nathan Yonkee |
4:2afaac57dc82 | 64 | /* /1* __HAL_RCC_GPIOA_CLK_DISABLE(); *1/ */ |
Nathan Yonkee |
4:2afaac57dc82 | 65 | /* /1* __HAL_RCC_GPIOB_CLK_DISABLE(); *1/ */ |
Nathan Yonkee |
4:2afaac57dc82 | 66 | /* for(int i = 0; i < 13; ++i){ */ |
Nathan Yonkee |
4:2afaac57dc82 | 67 | /* Thread::wait(1); */ |
Nathan Yonkee |
4:2afaac57dc82 | 68 | /* HAL_GPIO_DeInit(GPIOA,i); */ |
Nathan Yonkee |
4:2afaac57dc82 | 69 | /* HAL_GPIO_DeInit(GPIOB,i); */ |
Nathan Yonkee |
4:2afaac57dc82 | 70 | /* HAL_GPIO_DeInit(GPIOC,i); */ |
Nathan Yonkee |
4:2afaac57dc82 | 71 | /* HAL_GPIO_DeInit(GPIOH,i); */ |
Nathan Yonkee |
4:2afaac57dc82 | 72 | /* } */ |
Nathan Yonkee |
4:2afaac57dc82 | 73 | /* int j = 0; */ |
Nathan Yonkee |
4:2afaac57dc82 | 74 | /* HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); */ |
Nathan Yonkee |
4:2afaac57dc82 | 75 | /* HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); */ |
Nathan Yonkee |
4:2afaac57dc82 | 76 | /* Thread::wait(5000); */ |
Nathan Yonkee |
4:2afaac57dc82 | 77 | /* GPIO_InitStructure.Pin = GPIO_PIN_All; */ |
Nathan Yonkee |
4:2afaac57dc82 | 78 | /* GPIO_InitStructure.Mode = GPIO_MODE_ANALOG; */ |
Nathan Yonkee |
4:2afaac57dc82 | 79 | /* GPIO_InitStructure.Pull = GPIO_NOPULL; */ |
Nathan Yonkee |
4:2afaac57dc82 | 80 | /* HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); */ |
Nathan Yonkee |
4:2afaac57dc82 | 81 | /* HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); */ |
Nathan Yonkee |
4:2afaac57dc82 | 82 | |
Nathan Yonkee |
4:2afaac57dc82 | 83 | /* Timer t; */ |
Nathan Yonkee |
4:2afaac57dc82 | 84 | while( 1 ) { |
Nathan Yonkee |
4:2afaac57dc82 | 85 | if( sleepyTime ) { |
Nathan Yonkee |
4:2afaac57dc82 | 86 | led = 0; |
Nathan Yonkee |
4:2afaac57dc82 | 87 | /* HAL_PWR_EnterSTANDBYMode(); */ |
Nathan Yonkee |
4:2afaac57dc82 | 88 | HAL_PWREx_EnterSTOP0Mode( PWR_STOPENTRY_WFI ); |
Nathan Yonkee |
4:2afaac57dc82 | 89 | HAL_RCC_GetSysClockFreq(); |
Nathan Yonkee |
4:2afaac57dc82 | 90 | wait_ms( 50 ); |
Nathan Yonkee |
4:2afaac57dc82 | 91 | sleepyTime = false; |
Nathan Yonkee |
4:2afaac57dc82 | 92 | }; |
Nathan Yonkee |
4:2afaac57dc82 | 93 | |
Nathan Yonkee |
4:2afaac57dc82 | 94 | wait_ms( 1000 ); |
Nathan Yonkee |
2:aa4afe9a928c | 95 | |
Nathan Yonkee |
4:2afaac57dc82 | 96 | /* event.rise(&pressed); */ |
Nathan Yonkee |
4:2afaac57dc82 | 97 | /* if ((go_to_sleep == 0) || (go_to_sleep == 2)) { */ |
Nathan Yonkee |
4:2afaac57dc82 | 98 | /* printf("%d: Running\n", i); */ |
Nathan Yonkee |
4:2afaac57dc82 | 99 | /* myled = !myled; */ |
Nathan Yonkee |
4:2afaac57dc82 | 100 | /* wait(1.0); */ |
Nathan Yonkee |
4:2afaac57dc82 | 101 | /* } */ |
Nathan Yonkee |
4:2afaac57dc82 | 102 | led = 1; |
Nathan Yonkee |
4:2afaac57dc82 | 103 | |
Nathan Yonkee |
4:2afaac57dc82 | 104 | wait_ms( 100 ); |
Nathan Yonkee |
4:2afaac57dc82 | 105 | |
Nathan Yonkee |
4:2afaac57dc82 | 106 | led = 0; |
Nathan Yonkee |
2:aa4afe9a928c | 107 | |
Nathan Yonkee |
4:2afaac57dc82 | 108 | /* deepsleep(); */ |
Nathan Yonkee |
4:2afaac57dc82 | 109 | /* if (go_to_sleep == 1) { */ |
Nathan Yonkee |
4:2afaac57dc82 | 110 | /* myled = 0; */ |
Nathan Yonkee |
4:2afaac57dc82 | 111 | /* printf("%d: Entering sleep (press user button to resume)\n", i); */ |
Nathan Yonkee |
4:2afaac57dc82 | 112 | /* sleep(); */ |
Nathan Yonkee |
4:2afaac57dc82 | 113 | /* } */ |
Nathan Yonkee |
4:2afaac57dc82 | 114 | /* if (go_to_sleep == 3) { */ |
Nathan Yonkee |
4:2afaac57dc82 | 115 | /* myled = 0; */ |
Nathan Yonkee |
4:2afaac57dc82 | 116 | /* printf("%d: Entering deepsleep (press user button to resume)\n", i); */ |
Nathan Yonkee |
4:2afaac57dc82 | 117 | /* deepsleep(); */ |
Nathan Yonkee |
4:2afaac57dc82 | 118 | /* } */ |
Nathan Yonkee |
4:2afaac57dc82 | 119 | /* t.reset(); */ |
Nathan Yonkee |
4:2afaac57dc82 | 120 | /* t.start(); */ |
Nathan Yonkee |
4:2afaac57dc82 | 121 | /* led = !led; */ |
Nathan Yonkee |
4:2afaac57dc82 | 122 | /* j=0; */ |
Nathan Yonkee |
4:2afaac57dc82 | 123 | /* while(j < 100000) { */ |
Nathan Yonkee |
4:2afaac57dc82 | 124 | /* j = j + 1; */ |
Nathan Yonkee |
4:2afaac57dc82 | 125 | /* } */ |
Nathan Yonkee |
4:2afaac57dc82 | 126 | /* t.stop(); */ |
Nathan Yonkee |
4:2afaac57dc82 | 127 | /* led = !led; */ |
Nathan Yonkee |
4:2afaac57dc82 | 128 | /* led = !led; */ |
Nathan Yonkee |
4:2afaac57dc82 | 129 | /* HAL_GPIO_Init(GPIOC, &GPIO_InitStructure); */ |
Nathan Yonkee |
4:2afaac57dc82 | 130 | /* HAL_GPIO_Init(GPIOD, &GPIO_InitStructure); */ |
Nathan Yonkee |
4:2afaac57dc82 | 131 | /* HAL_GPIO_Init(GPIOH, &GPIO_InitStructure); */ |
Nathan Yonkee |
4:2afaac57dc82 | 132 | /* Thread::wait(500); */ |
Nathan Yonkee |
4:2afaac57dc82 | 133 | } |
Nathan Yonkee |
2:aa4afe9a928c | 134 | } |