Fahad Mirza / Mbed 2 deprecated Nucleo_HXC900

Dependencies:   mbed

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?

UserRevisionLine numberNew 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>&copy; 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