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.
main.h@23:bb0063d3d791, 2018-10-19 (annotated)
- Committer:
- fahadmirza
- Date:
- Fri Oct 19 04:31:45 2018 +0000
- Revision:
- 23:bb0063d3d791
- Parent:
- Driver/main.h@22:5b77cf59d630
- Child:
- 30:c58316bab0fb
Moved main.h to keep with main.cpp;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| fahadmirza | 5:53302861bfea | 1 | /* |
| fahadmirza | 22:5b77cf59d630 | 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 | 22:5b77cf59d630 | 15 | * @Author : Fahad Mirza (Haxiot) |
| fahadmirza | 22:5b77cf59d630 | 16 | * @Version : V1.0.0 |
| fahadmirza | 22:5b77cf59d630 | 17 | * @Modified : 18 October, 2018 |
| fahadmirza | 5:53302861bfea | 18 | * @Description : Header file for main.c |
| fahadmirza | 15:2860c960d2ff | 19 | ****************************************************************************** |
| fahadmirza | 15:2860c960d2ff | 20 | * @attention |
| fahadmirza | 15:2860c960d2ff | 21 | * |
| fahadmirza | 15:2860c960d2ff | 22 | * <h2><center>© COPYRIGHT(c) 2017 Haxiot</center></h2> |
| fahadmirza | 15:2860c960d2ff | 23 | * |
| fahadmirza | 15:2860c960d2ff | 24 | * Redistribution and use in source and binary forms, with or without modification, |
| fahadmirza | 15:2860c960d2ff | 25 | * are permitted provided that the following conditions are met: |
| fahadmirza | 15:2860c960d2ff | 26 | * 1. Redistributions of source code must retain the above copyright notice, |
| fahadmirza | 15:2860c960d2ff | 27 | * this list of conditions and the following disclaimer. |
| fahadmirza | 15:2860c960d2ff | 28 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
| fahadmirza | 15:2860c960d2ff | 29 | * this list of conditions and the following disclaimer in the documentation |
| fahadmirza | 15:2860c960d2ff | 30 | * and/or other materials provided with the distribution. |
| fahadmirza | 15:2860c960d2ff | 31 | * 3. Neither the name of Haxiot nor the names of its contributors |
| fahadmirza | 15:2860c960d2ff | 32 | * may be used to endorse or promote products derived from this software |
| fahadmirza | 15:2860c960d2ff | 33 | * without specific prior written permission. |
| fahadmirza | 15:2860c960d2ff | 34 | * |
| fahadmirza | 15:2860c960d2ff | 35 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| fahadmirza | 15:2860c960d2ff | 36 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| fahadmirza | 15:2860c960d2ff | 37 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| fahadmirza | 15:2860c960d2ff | 38 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
| fahadmirza | 15:2860c960d2ff | 39 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| fahadmirza | 15:2860c960d2ff | 40 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| fahadmirza | 15:2860c960d2ff | 41 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| fahadmirza | 15:2860c960d2ff | 42 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| fahadmirza | 15:2860c960d2ff | 43 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| fahadmirza | 15:2860c960d2ff | 44 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| fahadmirza | 15:2860c960d2ff | 45 | * |
| fahadmirza | 15:2860c960d2ff | 46 | ****************************************************************************** |
| fahadmirza | 15:2860c960d2ff | 47 | */ |
| fahadmirza | 15:2860c960d2ff | 48 | |
| fahadmirza | 5:53302861bfea | 49 | #ifndef MAIN_H_ |
| fahadmirza | 5:53302861bfea | 50 | #define MAIN_H_ |
| fahadmirza | 5:53302861bfea | 51 | |
| fahadmirza | 15:2860c960d2ff | 52 | #ifdef __cplusplus |
| fahadmirza | 15:2860c960d2ff | 53 | extern "C" { |
| fahadmirza | 15:2860c960d2ff | 54 | #endif |
| fahadmirza | 15:2860c960d2ff | 55 | |
| fahadmirza | 5:53302861bfea | 56 | #include "hw.h" |
| fahadmirza | 5:53302861bfea | 57 | #include "debug.h" |
| fahadmirza | 5:53302861bfea | 58 | #include "delay.h" |
| fahadmirza | 5:53302861bfea | 59 | #include "low_power_manager.h" |
| fahadmirza | 5:53302861bfea | 60 | |
| fahadmirza | 5:53302861bfea | 61 | /* Variables -----------------------------------------------------------------*/ |
| fahadmirza | 5:53302861bfea | 62 | //Flag to indicate if the MCU is Initialized |
| fahadmirza | 5:53302861bfea | 63 | static bool McuInitialized = false; |
| fahadmirza | 5:53302861bfea | 64 | |
| fahadmirza | 14:05245fe1a7a0 | 65 | // Mbed specific declaration |
| fahadmirza | 14:05245fe1a7a0 | 66 | AnalogIn temperatureSensor(A0); |
| fahadmirza | 14:05245fe1a7a0 | 67 | DigitalOut nucleoLED(LED1); |
| fahadmirza | 14:05245fe1a7a0 | 68 | DigitalIn slideSwitch(D12); |
| fahadmirza | 14:05245fe1a7a0 | 69 | DigitalOut blueLED(D11); |
| fahadmirza | 14:05245fe1a7a0 | 70 | DigitalOut redLED(D10); |
| fahadmirza | 14:05245fe1a7a0 | 71 | DigitalOut greenLED(D9); |
| fahadmirza | 14:05245fe1a7a0 | 72 | |
| fahadmirza | 5:53302861bfea | 73 | |
| fahadmirza | 22:5b77cf59d630 | 74 | /* Function Declarations -----------------------------------------------------*/ |
| fahadmirza | 22:5b77cf59d630 | 75 | void SystemClock_Config(void); |
| fahadmirza | 22:5b77cf59d630 | 76 | |
| fahadmirza | 22:5b77cf59d630 | 77 | |
| fahadmirza | 22:5b77cf59d630 | 78 | /****************************************************************************** |
| fahadmirza | 22:5b77cf59d630 | 79 | * @Brief : This function initializes the hardware |
| fahadmirza | 22:5b77cf59d630 | 80 | * @Param : None |
| fahadmirza | 22:5b77cf59d630 | 81 | * @Return: None |
| fahadmirza | 22:5b77cf59d630 | 82 | ******************************************************************************/ |
| fahadmirza | 22:5b77cf59d630 | 83 | void HW_Init(void) |
| fahadmirza | 22:5b77cf59d630 | 84 | { |
| fahadmirza | 22:5b77cf59d630 | 85 | if(McuInitialized == false) |
| fahadmirza | 22:5b77cf59d630 | 86 | { |
| fahadmirza | 22:5b77cf59d630 | 87 | // Reset of all peripherals, Initializes the Flash interface and the Systick. |
| fahadmirza | 22:5b77cf59d630 | 88 | HAL_Init(); |
| fahadmirza | 22:5b77cf59d630 | 89 | SystemClock_Config(); |
| fahadmirza | 22:5b77cf59d630 | 90 | Debug_UART_Init(); |
| fahadmirza | 22:5b77cf59d630 | 91 | HW_RTC_Init(); |
| fahadmirza | 22:5b77cf59d630 | 92 | BSP_LED_Init(LED_GREEN);// LED on Nucleo board |
| fahadmirza | 22:5b77cf59d630 | 93 | slideSwitch.mode(PullDown); |
| fahadmirza | 22:5b77cf59d630 | 94 | McuInitialized = true; |
| fahadmirza | 22:5b77cf59d630 | 95 | } |
| fahadmirza | 22:5b77cf59d630 | 96 | } |
| fahadmirza | 5:53302861bfea | 97 | |
| fahadmirza | 5:53302861bfea | 98 | /****************************************************************************** |
| fahadmirza | 15:2860c960d2ff | 99 | * @Brief : System Clock Configuration |
| fahadmirza | 5:53302861bfea | 100 | * The system Clock is configured as follow : |
| fahadmirza | 5:53302861bfea | 101 | * System Clock source = PLL (HSI) |
| fahadmirza | 5:53302861bfea | 102 | * SYSCLK(Hz) = 32000000 |
| fahadmirza | 5:53302861bfea | 103 | * HCLK(Hz) = 32000000 |
| fahadmirza | 5:53302861bfea | 104 | * AHB Prescaler = 1 |
| fahadmirza | 5:53302861bfea | 105 | * APB1 Prescaler = 1 |
| fahadmirza | 5:53302861bfea | 106 | * APB2 Prescaler = 1 |
| fahadmirza | 5:53302861bfea | 107 | * HSI Frequency(Hz) = 16000000 |
| fahadmirza | 5:53302861bfea | 108 | * PLLMUL = 6 |
| fahadmirza | 5:53302861bfea | 109 | * PLLDIV = 3 |
| fahadmirza | 5:53302861bfea | 110 | * Flash Latency(WS) = 1 |
| fahadmirza | 15:2860c960d2ff | 111 | * @Return: None |
| fahadmirza | 15:2860c960d2ff | 112 | * @Note : This function enables all the clock necessary for the demo |
| fahadmirza | 5:53302861bfea | 113 | * including UARTs |
| fahadmirza | 5:53302861bfea | 114 | ******************************************************************************/ |
| fahadmirza | 5:53302861bfea | 115 | void SystemClock_Config(void) |
| fahadmirza | 5:53302861bfea | 116 | { |
| fahadmirza | 5:53302861bfea | 117 | RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; |
| fahadmirza | 5:53302861bfea | 118 | RCC_OscInitTypeDef RCC_OscInitStruct = {0}; |
| fahadmirza | 5:53302861bfea | 119 | |
| fahadmirza | 5:53302861bfea | 120 | // Enable HSI48 Oscillator for RNG analog part |
| fahadmirza | 5:53302861bfea | 121 | RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48; |
| fahadmirza | 5:53302861bfea | 122 | RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; |
| fahadmirza | 5:53302861bfea | 123 | RCC_OscInitStruct.HSI48State = RCC_HSI48_ON; |
| fahadmirza | 5:53302861bfea | 124 | if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) |
| fahadmirza | 5:53302861bfea | 125 | { |
| fahadmirza | 5:53302861bfea | 126 | // Initialization Error |
| fahadmirza | 5:53302861bfea | 127 | Error_Handler(); |
| fahadmirza | 5:53302861bfea | 128 | } |
| fahadmirza | 5:53302861bfea | 129 | |
| fahadmirza | 5:53302861bfea | 130 | // Set Voltage scale1 as MCU will run at 32MHz |
| fahadmirza | 5:53302861bfea | 131 | __HAL_RCC_PWR_CLK_ENABLE(); |
| fahadmirza | 5:53302861bfea | 132 | __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); |
| fahadmirza | 5:53302861bfea | 133 | |
| fahadmirza | 5:53302861bfea | 134 | // Poll VOSF bit of in PWR_CSR. Wait until it is reset to 0 |
| fahadmirza | 5:53302861bfea | 135 | while (__HAL_PWR_GET_FLAG(PWR_FLAG_VOS) != RESET) {}; |
| fahadmirza | 5:53302861bfea | 136 | |
| fahadmirza | 5:53302861bfea | 137 | // Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers |
| fahadmirza | 5:53302861bfea | 138 | RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); |
| fahadmirza | 5:53302861bfea | 139 | RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; |
| fahadmirza | 5:53302861bfea | 140 | RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; |
| fahadmirza | 5:53302861bfea | 141 | RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; |
| fahadmirza | 5:53302861bfea | 142 | RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; |
| fahadmirza | 5:53302861bfea | 143 | if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) |
| fahadmirza | 5:53302861bfea | 144 | { |
| fahadmirza | 5:53302861bfea | 145 | Error_Handler(); |
| fahadmirza | 5:53302861bfea | 146 | } |
| fahadmirza | 5:53302861bfea | 147 | |
| fahadmirza | 5:53302861bfea | 148 | HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); |
| fahadmirza | 5:53302861bfea | 149 | HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); |
| fahadmirza | 5:53302861bfea | 150 | |
| fahadmirza | 5:53302861bfea | 151 | // SysTick_IRQn interrupt configuration |
| fahadmirza | 5:53302861bfea | 152 | HAL_NVIC_SetPriority(SysTick_IRQn, 1, 0); |
| fahadmirza | 5:53302861bfea | 153 | } |
| fahadmirza | 5:53302861bfea | 154 | |
| fahadmirza | 5:53302861bfea | 155 | /****************************************************************************** |
| fahadmirza | 5:53302861bfea | 156 | * @Brief : Initializes the MSP. |
| fahadmirza | 5:53302861bfea | 157 | * @Param : None |
| fahadmirza | 15:2860c960d2ff | 158 | * @Return: None |
| fahadmirza | 5:53302861bfea | 159 | ******************************************************************************/ |
| fahadmirza | 5:53302861bfea | 160 | void HAL_MspInit(void) |
| fahadmirza | 5:53302861bfea | 161 | { |
| fahadmirza | 5:53302861bfea | 162 | __HAL_RCC_PWR_CLK_ENABLE(); |
| fahadmirza | 5:53302861bfea | 163 | |
| fahadmirza | 5:53302861bfea | 164 | // Disable the Power Voltage Detector |
| fahadmirza | 5:53302861bfea | 165 | HAL_PWR_DisablePVD(); |
| fahadmirza | 5:53302861bfea | 166 | |
| fahadmirza | 5:53302861bfea | 167 | // Enables the Ultra Low Power mode |
| fahadmirza | 5:53302861bfea | 168 | HAL_PWREx_EnableUltraLowPower(); |
| fahadmirza | 5:53302861bfea | 169 | |
| fahadmirza | 5:53302861bfea | 170 | __HAL_FLASH_SLEEP_POWERDOWN_ENABLE(); |
| fahadmirza | 5:53302861bfea | 171 | |
| fahadmirza | 5:53302861bfea | 172 | /* In debug mode, e.g. when DBGMCU is activated, Arm core has always clocks |
| fahadmirza | 5:53302861bfea | 173 | * And will not wait that the FLACH is ready to be read. It can miss in this |
| fahadmirza | 5:53302861bfea | 174 | * case the first instruction. To overcome this issue, the flash remain clocked during sleep mode |
| fahadmirza | 5:53302861bfea | 175 | */ |
| fahadmirza | 5:53302861bfea | 176 | DBG( __HAL_FLASH_SLEEP_POWERDOWN_DISABLE(); ); |
| fahadmirza | 22:5b77cf59d630 | 177 | /*Enable fast wakeUp*/ |
| fahadmirza | 22:5b77cf59d630 | 178 | HAL_PWREx_EnableFastWakeUp( ); |
| fahadmirza | 5:53302861bfea | 179 | } |
| fahadmirza | 5:53302861bfea | 180 | |
| fahadmirza | 5:53302861bfea | 181 | |
| fahadmirza | 5:53302861bfea | 182 | #ifdef USE_FULL_ASSERT |
| fahadmirza | 5:53302861bfea | 183 | |
| fahadmirza | 5:53302861bfea | 184 | /****************************************************************************** |
| fahadmirza | 5:53302861bfea | 185 | * @Brief : Reports the name of the source file and the source line number |
| fahadmirza | 5:53302861bfea | 186 | * where the assert_param error has occurred. |
| fahadmirza | 5:53302861bfea | 187 | * @Param : file: pointer to the source file name |
| fahadmirza | 5:53302861bfea | 188 | * line: assert_param error line source number |
| fahadmirza | 15:2860c960d2ff | 189 | * @Return: None |
| fahadmirza | 5:53302861bfea | 190 | ******************************************************************************/ |
| fahadmirza | 5:53302861bfea | 191 | void assert_failed(uint8_t* file, uint32_t line) |
| fahadmirza | 5:53302861bfea | 192 | { |
| fahadmirza | 5:53302861bfea | 193 | /* User can add his own implementation to report the file name and line number, |
| fahadmirza | 5:53302861bfea | 194 | ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ |
| fahadmirza | 5:53302861bfea | 195 | } |
| fahadmirza | 5:53302861bfea | 196 | |
| fahadmirza | 5:53302861bfea | 197 | #endif |
| fahadmirza | 5:53302861bfea | 198 | |
| fahadmirza | 15:2860c960d2ff | 199 | #ifdef __cplusplus |
| fahadmirza | 15:2860c960d2ff | 200 | } |
| fahadmirza | 15:2860c960d2ff | 201 | #endif /* __cplusplus */ |
| fahadmirza | 15:2860c960d2ff | 202 | |
| fahadmirza | 5:53302861bfea | 203 | #endif /* MAIN_H_ */ |
| fahadmirza | 5:53302861bfea | 204 |