sleep example

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?

UserRevisionLine numberNew 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 }