Fahad Mirza / Mbed 2 deprecated Nucleo_HXC900

Dependencies:   mbed

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?

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