Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Driver/main.h@14:05245fe1a7a0, 2018-07-24 (annotated)
- Committer:
- fahadmirza
- Date:
- Tue Jul 24 02:51:20 2018 +0000
- Revision:
- 14:05245fe1a7a0
- Parent:
- 11:f4346bbaa872
- Child:
- 15:2860c960d2ff
mbed button and led initialization are moved to main.h; uplink packet consists of switch status;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| fahadmirza | 5:53302861bfea | 1 | /* |
| fahadmirza | 5:53302861bfea | 2 | _ _ _____ _______ |
| fahadmirza | 5:53302861bfea | 3 | | | | | |_ _| |__ __| |
| fahadmirza | 5:53302861bfea | 4 | | |__| | __ ___ __ | | ___ | | |
| fahadmirza | 5:53302861bfea | 5 | | __ |/ _` \ \/ / | | / _ \| | |
| fahadmirza | 5:53302861bfea | 6 | | | | | (_| |> < _| || (_) | | |
| fahadmirza | 5:53302861bfea | 7 | |_| |_|\__,_/_/\_\_____\___/|_| |
| fahadmirza | 5:53302861bfea | 8 | (C)2017 HaxIoT |
| fahadmirza | 5:53302861bfea | 9 | |
| fahadmirza | 5:53302861bfea | 10 | Description: contains hardware configuration Macros and Constants |
| fahadmirza | 5:53302861bfea | 11 | License: Revised BSD License, see LICENSE.TXT file include in the project |
| fahadmirza | 5:53302861bfea | 12 | */ |
| fahadmirza | 5:53302861bfea | 13 | /******************************************************************************* |
| fahadmirza | 5:53302861bfea | 14 | * @File Name : main.h |
| fahadmirza | 5:53302861bfea | 15 | * @Author : Fahad Mirza |
| fahadmirza | 5:53302861bfea | 16 | * @Created : 22 January, 2018 |
| fahadmirza | 5:53302861bfea | 17 | * @Modified : 04 April, 2018 |
| fahadmirza | 5:53302861bfea | 18 | * @Description : Header file for main.c |
| fahadmirza | 5:53302861bfea | 19 | ********************************************************************************/ |
| fahadmirza | 5:53302861bfea | 20 | |
| fahadmirza | 5:53302861bfea | 21 | #ifndef MAIN_H_ |
| fahadmirza | 5:53302861bfea | 22 | #define MAIN_H_ |
| fahadmirza | 5:53302861bfea | 23 | |
| fahadmirza | 5:53302861bfea | 24 | #include "hw.h" |
| fahadmirza | 5:53302861bfea | 25 | #include "debug.h" |
| fahadmirza | 5:53302861bfea | 26 | #include "delay.h" |
| fahadmirza | 5:53302861bfea | 27 | #include "low_power_manager.h" |
| fahadmirza | 5:53302861bfea | 28 | |
| fahadmirza | 5:53302861bfea | 29 | /* Macros --------------------------------------------------------------------*/ |
| fahadmirza | 5:53302861bfea | 30 | #define ENABLE_FAST_WAKEUP |
| fahadmirza | 5:53302861bfea | 31 | |
| fahadmirza | 5:53302861bfea | 32 | /* Variables -----------------------------------------------------------------*/ |
| fahadmirza | 5:53302861bfea | 33 | //Flag to indicate if the MCU is Initialized |
| fahadmirza | 5:53302861bfea | 34 | static bool McuInitialized = false; |
| fahadmirza | 5:53302861bfea | 35 | |
| fahadmirza | 14:05245fe1a7a0 | 36 | // Mbed specific declaration |
| fahadmirza | 14:05245fe1a7a0 | 37 | AnalogIn temperatureSensor(A0); |
| fahadmirza | 14:05245fe1a7a0 | 38 | DigitalOut nucleoLED(LED1); |
| fahadmirza | 14:05245fe1a7a0 | 39 | DigitalIn slideSwitch(D12); |
| fahadmirza | 14:05245fe1a7a0 | 40 | DigitalOut blueLED(D11); |
| fahadmirza | 14:05245fe1a7a0 | 41 | DigitalOut redLED(D10); |
| fahadmirza | 14:05245fe1a7a0 | 42 | DigitalOut greenLED(D9); |
| fahadmirza | 14:05245fe1a7a0 | 43 | |
| fahadmirza | 5:53302861bfea | 44 | |
| fahadmirza | 5:53302861bfea | 45 | |
| fahadmirza | 5:53302861bfea | 46 | /****************************************************************************** |
| fahadmirza | 5:53302861bfea | 47 | * @brief : System Clock Configuration |
| fahadmirza | 5:53302861bfea | 48 | * The system Clock is configured as follow : |
| fahadmirza | 5:53302861bfea | 49 | * System Clock source = PLL (HSI) |
| fahadmirza | 5:53302861bfea | 50 | * SYSCLK(Hz) = 32000000 |
| fahadmirza | 5:53302861bfea | 51 | * HCLK(Hz) = 32000000 |
| fahadmirza | 5:53302861bfea | 52 | * AHB Prescaler = 1 |
| fahadmirza | 5:53302861bfea | 53 | * APB1 Prescaler = 1 |
| fahadmirza | 5:53302861bfea | 54 | * APB2 Prescaler = 1 |
| fahadmirza | 5:53302861bfea | 55 | * HSI Frequency(Hz) = 16000000 |
| fahadmirza | 5:53302861bfea | 56 | * PLLMUL = 6 |
| fahadmirza | 5:53302861bfea | 57 | * PLLDIV = 3 |
| fahadmirza | 5:53302861bfea | 58 | * Flash Latency(WS) = 1 |
| fahadmirza | 5:53302861bfea | 59 | * @retval: None |
| fahadmirza | 5:53302861bfea | 60 | * @note : This function enables all the clock necessary for the demo |
| fahadmirza | 5:53302861bfea | 61 | * including UARTs |
| fahadmirza | 5:53302861bfea | 62 | ******************************************************************************/ |
| fahadmirza | 5:53302861bfea | 63 | void SystemClock_Config(void) |
| fahadmirza | 5:53302861bfea | 64 | { |
| fahadmirza | 5:53302861bfea | 65 | RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; |
| fahadmirza | 5:53302861bfea | 66 | RCC_OscInitTypeDef RCC_OscInitStruct = {0}; |
| fahadmirza | 5:53302861bfea | 67 | |
| fahadmirza | 5:53302861bfea | 68 | // Enable HSI48 Oscillator for RNG analog part |
| fahadmirza | 5:53302861bfea | 69 | RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48; |
| fahadmirza | 5:53302861bfea | 70 | RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; |
| fahadmirza | 5:53302861bfea | 71 | RCC_OscInitStruct.HSI48State = RCC_HSI48_ON; |
| fahadmirza | 5:53302861bfea | 72 | if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) |
| fahadmirza | 5:53302861bfea | 73 | { |
| fahadmirza | 5:53302861bfea | 74 | // Initialization Error |
| fahadmirza | 5:53302861bfea | 75 | Error_Handler(); |
| fahadmirza | 5:53302861bfea | 76 | } |
| fahadmirza | 5:53302861bfea | 77 | |
| fahadmirza | 5:53302861bfea | 78 | // Set Voltage scale1 as MCU will run at 32MHz |
| fahadmirza | 5:53302861bfea | 79 | __HAL_RCC_PWR_CLK_ENABLE(); |
| fahadmirza | 5:53302861bfea | 80 | __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); |
| fahadmirza | 5:53302861bfea | 81 | |
| fahadmirza | 5:53302861bfea | 82 | // Poll VOSF bit of in PWR_CSR. Wait until it is reset to 0 |
| fahadmirza | 5:53302861bfea | 83 | while (__HAL_PWR_GET_FLAG(PWR_FLAG_VOS) != RESET) {}; |
| fahadmirza | 5:53302861bfea | 84 | |
| fahadmirza | 5:53302861bfea | 85 | // Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers |
| fahadmirza | 5:53302861bfea | 86 | RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); |
| fahadmirza | 5:53302861bfea | 87 | RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; |
| fahadmirza | 5:53302861bfea | 88 | RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; |
| fahadmirza | 5:53302861bfea | 89 | RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; |
| fahadmirza | 5:53302861bfea | 90 | RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; |
| fahadmirza | 5:53302861bfea | 91 | if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) |
| fahadmirza | 5:53302861bfea | 92 | { |
| fahadmirza | 5:53302861bfea | 93 | Error_Handler(); |
| fahadmirza | 5:53302861bfea | 94 | } |
| fahadmirza | 5:53302861bfea | 95 | |
| fahadmirza | 5:53302861bfea | 96 | HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); |
| fahadmirza | 5:53302861bfea | 97 | HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); |
| fahadmirza | 5:53302861bfea | 98 | |
| fahadmirza | 5:53302861bfea | 99 | // SysTick_IRQn interrupt configuration |
| fahadmirza | 5:53302861bfea | 100 | HAL_NVIC_SetPriority(SysTick_IRQn, 1, 0); |
| fahadmirza | 5:53302861bfea | 101 | } |
| fahadmirza | 5:53302861bfea | 102 | |
| fahadmirza | 5:53302861bfea | 103 | /****************************************************************************** |
| fahadmirza | 5:53302861bfea | 104 | * @Brief : Set all pin as analog |
| fahadmirza | 5:53302861bfea | 105 | * @Param : none |
| fahadmirza | 5:53302861bfea | 106 | * @return: none |
| fahadmirza | 5:53302861bfea | 107 | ******************************************************************************/ |
| fahadmirza | 5:53302861bfea | 108 | void HW_GpioInit(void) |
| fahadmirza | 5:53302861bfea | 109 | { |
| fahadmirza | 5:53302861bfea | 110 | GPIO_InitTypeDef GPIO_InitStruct; |
| fahadmirza | 5:53302861bfea | 111 | |
| fahadmirza | 5:53302861bfea | 112 | // STM32L0 Gpios are all configured as analog input at Reset |
| fahadmirza | 5:53302861bfea | 113 | __HAL_RCC_GPIOA_CLK_ENABLE(); |
| fahadmirza | 5:53302861bfea | 114 | __HAL_RCC_GPIOB_CLK_ENABLE(); |
| fahadmirza | 5:53302861bfea | 115 | __HAL_RCC_GPIOC_CLK_ENABLE(); |
| fahadmirza | 5:53302861bfea | 116 | |
| fahadmirza | 5:53302861bfea | 117 | /*GPIOC*/ |
| fahadmirza | 5:53302861bfea | 118 | GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 |
| fahadmirza | 5:53302861bfea | 119 | |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7 |
| fahadmirza | 5:53302861bfea | 120 | |GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_12; |
| fahadmirza | 5:53302861bfea | 121 | GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; |
| fahadmirza | 5:53302861bfea | 122 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
| fahadmirza | 5:53302861bfea | 123 | HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); |
| fahadmirza | 5:53302861bfea | 124 | |
| fahadmirza | 5:53302861bfea | 125 | /*GPIOA*/ |
| fahadmirza | 5:53302861bfea | 126 | GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_6 |
| fahadmirza | 5:53302861bfea | 127 | |GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10 |
| fahadmirza | 5:53302861bfea | 128 | |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_15; |
| fahadmirza | 5:53302861bfea | 129 | |
| fahadmirza | 5:53302861bfea | 130 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
| fahadmirza | 5:53302861bfea | 131 | |
| fahadmirza | 5:53302861bfea | 132 | /*GPIOB*/ |
| fahadmirza | 5:53302861bfea | 133 | GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_10 |
| fahadmirza | 5:53302861bfea | 134 | |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14 |
| fahadmirza | 5:53302861bfea | 135 | |GPIO_PIN_15|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5 |
| fahadmirza | 5:53302861bfea | 136 | |GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9; |
| fahadmirza | 5:53302861bfea | 137 | |
| fahadmirza | 5:53302861bfea | 138 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
| fahadmirza | 5:53302861bfea | 139 | |
| fahadmirza | 5:53302861bfea | 140 | __HAL_RCC_GPIOA_CLK_DISABLE(); |
| fahadmirza | 5:53302861bfea | 141 | __HAL_RCC_GPIOB_CLK_DISABLE(); |
| fahadmirza | 5:53302861bfea | 142 | __HAL_RCC_GPIOC_CLK_DISABLE(); |
| fahadmirza | 5:53302861bfea | 143 | } |
| fahadmirza | 5:53302861bfea | 144 | |
| fahadmirza | 5:53302861bfea | 145 | /****************************************************************************** |
| fahadmirza | 5:53302861bfea | 146 | * @Brief : This function initializes the hardware |
| fahadmirza | 5:53302861bfea | 147 | * @Param : None |
| fahadmirza | 5:53302861bfea | 148 | * @Retval: None |
| fahadmirza | 5:53302861bfea | 149 | ******************************************************************************/ |
| fahadmirza | 5:53302861bfea | 150 | void HW_Init(void) |
| fahadmirza | 5:53302861bfea | 151 | { |
| fahadmirza | 5:53302861bfea | 152 | if(McuInitialized == false) |
| fahadmirza | 5:53302861bfea | 153 | { |
| fahadmirza | 5:53302861bfea | 154 | // Reset of all peripherals, Initializes the Flash interface and the Systick. |
| fahadmirza | 5:53302861bfea | 155 | HAL_Init(); |
| fahadmirza | 5:53302861bfea | 156 | SystemClock_Config(); |
| fahadmirza | 5:53302861bfea | 157 | Debug_UART_Init(); |
| fahadmirza | 5:53302861bfea | 158 | |
| fahadmirza | 5:53302861bfea | 159 | #if defined( USE_BOOTLOADER ) |
| fahadmirza | 5:53302861bfea | 160 | /* Set the Vector Table base location at 0x3000 */ |
| fahadmirza | 5:53302861bfea | 161 | NVIC_SetVectorTable( NVIC_VectTab_FLASH, 0x3000 ); |
| fahadmirza | 5:53302861bfea | 162 | #endif |
| fahadmirza | 5:53302861bfea | 163 | |
| fahadmirza | 5:53302861bfea | 164 | HW_RTC_Init(); |
| fahadmirza | 5:53302861bfea | 165 | |
| fahadmirza | 5:53302861bfea | 166 | // LED on Nucleo board |
| fahadmirza | 5:53302861bfea | 167 | BSP_LED_Init(LED_GREEN); |
| fahadmirza | 14:05245fe1a7a0 | 168 | slideSwitch.mode(PullDown); |
| fahadmirza | 5:53302861bfea | 169 | McuInitialized = true; |
| fahadmirza | 5:53302861bfea | 170 | } |
| fahadmirza | 5:53302861bfea | 171 | } |
| fahadmirza | 5:53302861bfea | 172 | |
| fahadmirza | 5:53302861bfea | 173 | /****************************************************************************** |
| fahadmirza | 5:53302861bfea | 174 | * @Brief : Initializes the MSP. |
| fahadmirza | 5:53302861bfea | 175 | * @Param : None |
| fahadmirza | 5:53302861bfea | 176 | * @retval: None |
| fahadmirza | 5:53302861bfea | 177 | ******************************************************************************/ |
| fahadmirza | 5:53302861bfea | 178 | void HAL_MspInit(void) |
| fahadmirza | 5:53302861bfea | 179 | { |
| fahadmirza | 5:53302861bfea | 180 | __HAL_RCC_PWR_CLK_ENABLE(); |
| fahadmirza | 5:53302861bfea | 181 | |
| fahadmirza | 5:53302861bfea | 182 | // Disable the Power Voltage Detector |
| fahadmirza | 5:53302861bfea | 183 | HAL_PWR_DisablePVD(); |
| fahadmirza | 5:53302861bfea | 184 | |
| fahadmirza | 5:53302861bfea | 185 | // Enables the Ultra Low Power mode |
| fahadmirza | 5:53302861bfea | 186 | HAL_PWREx_EnableUltraLowPower(); |
| fahadmirza | 5:53302861bfea | 187 | |
| fahadmirza | 5:53302861bfea | 188 | __HAL_FLASH_SLEEP_POWERDOWN_ENABLE(); |
| fahadmirza | 5:53302861bfea | 189 | |
| fahadmirza | 5:53302861bfea | 190 | /* In debug mode, e.g. when DBGMCU is activated, Arm core has always clocks |
| fahadmirza | 5:53302861bfea | 191 | * And will not wait that the FLACH is ready to be read. It can miss in this |
| fahadmirza | 5:53302861bfea | 192 | * case the first instruction. To overcome this issue, the flash remain clocked during sleep mode |
| fahadmirza | 5:53302861bfea | 193 | */ |
| fahadmirza | 5:53302861bfea | 194 | DBG( __HAL_FLASH_SLEEP_POWERDOWN_DISABLE(); ); |
| fahadmirza | 5:53302861bfea | 195 | |
| fahadmirza | 5:53302861bfea | 196 | #ifdef ENABLE_FAST_WAKEUP |
| fahadmirza | 5:53302861bfea | 197 | /*Enable fast wakeUp*/ |
| fahadmirza | 5:53302861bfea | 198 | HAL_PWREx_EnableFastWakeUp( ); |
| fahadmirza | 5:53302861bfea | 199 | #else |
| fahadmirza | 5:53302861bfea | 200 | HAL_PWREx_DisableFastWakeUp( ); |
| fahadmirza | 5:53302861bfea | 201 | #endif |
| fahadmirza | 5:53302861bfea | 202 | } |
| fahadmirza | 5:53302861bfea | 203 | |
| fahadmirza | 5:53302861bfea | 204 | |
| fahadmirza | 5:53302861bfea | 205 | #ifdef USE_FULL_ASSERT |
| fahadmirza | 5:53302861bfea | 206 | |
| fahadmirza | 5:53302861bfea | 207 | /****************************************************************************** |
| fahadmirza | 5:53302861bfea | 208 | * @Brief : Reports the name of the source file and the source line number |
| fahadmirza | 5:53302861bfea | 209 | * where the assert_param error has occurred. |
| fahadmirza | 5:53302861bfea | 210 | * @Param : file: pointer to the source file name |
| fahadmirza | 5:53302861bfea | 211 | * line: assert_param error line source number |
| fahadmirza | 5:53302861bfea | 212 | * @Retval: None |
| fahadmirza | 5:53302861bfea | 213 | ******************************************************************************/ |
| fahadmirza | 5:53302861bfea | 214 | void assert_failed(uint8_t* file, uint32_t line) |
| fahadmirza | 5:53302861bfea | 215 | { |
| fahadmirza | 5:53302861bfea | 216 | /* User can add his own implementation to report the file name and line number, |
| fahadmirza | 5:53302861bfea | 217 | ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ |
| fahadmirza | 5:53302861bfea | 218 | } |
| fahadmirza | 5:53302861bfea | 219 | |
| fahadmirza | 5:53302861bfea | 220 | #endif |
| fahadmirza | 5:53302861bfea | 221 | |
| fahadmirza | 5:53302861bfea | 222 | #endif /* MAIN_H_ */ |
| fahadmirza | 5:53302861bfea | 223 |