Fahad Mirza / Mbed 2 deprecated Nucleo_HXC900

Dependencies:   mbed

Committer:
fahadmirza
Date:
Thu Jul 12 00:50:48 2018 +0000
Revision:
0:a0c5877bd360
Child:
4:511677d804ac
Porting complete!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fahadmirza 0:a0c5877bd360 1 /*
fahadmirza 0:a0c5877bd360 2 _ _ _____ _______
fahadmirza 0:a0c5877bd360 3 | | | | |_ _| |__ __|
fahadmirza 0:a0c5877bd360 4 | |__| | __ ___ __ | | ___ | |
fahadmirza 0:a0c5877bd360 5 | __ |/ _` \ \/ / | | / _ \| |
fahadmirza 0:a0c5877bd360 6 | | | | (_| |> < _| || (_) | |
fahadmirza 0:a0c5877bd360 7 |_| |_|\__,_/_/\_\_____\___/|_|
fahadmirza 0:a0c5877bd360 8 (C)2017 HaxIoT
fahadmirza 0:a0c5877bd360 9
fahadmirza 0:a0c5877bd360 10 Description: contains hardware configuration Macros and Constants
fahadmirza 0:a0c5877bd360 11 License: Revised BSD License, see LICENSE.TXT file include in the project
fahadmirza 0:a0c5877bd360 12 */
fahadmirza 0:a0c5877bd360 13 /*******************************************************************************
fahadmirza 0:a0c5877bd360 14 * @File Name : main.h
fahadmirza 0:a0c5877bd360 15 * @Author : Fahad Mirza
fahadmirza 0:a0c5877bd360 16 * @Created : 22 January, 2018
fahadmirza 0:a0c5877bd360 17 * @Modified : 04 April, 2018
fahadmirza 0:a0c5877bd360 18 * @Description : Header file for main.c
fahadmirza 0:a0c5877bd360 19 ********************************************************************************/
fahadmirza 0:a0c5877bd360 20
fahadmirza 0:a0c5877bd360 21 #ifndef MAIN_H_
fahadmirza 0:a0c5877bd360 22 #define MAIN_H_
fahadmirza 0:a0c5877bd360 23
fahadmirza 0:a0c5877bd360 24 #include "hw.h"
fahadmirza 0:a0c5877bd360 25 #include "debug.h"
fahadmirza 0:a0c5877bd360 26 #include "delay.h"
fahadmirza 0:a0c5877bd360 27 #include "low_power_manager.h"
fahadmirza 0:a0c5877bd360 28
fahadmirza 0:a0c5877bd360 29 /* Macros --------------------------------------------------------------------*/
fahadmirza 0:a0c5877bd360 30 // Uplink packet acknowledgment configuration
fahadmirza 0:a0c5877bd360 31 #define UNCONFIRMED 0
fahadmirza 0:a0c5877bd360 32 #define CONFIRMED 1
fahadmirza 0:a0c5877bd360 33
fahadmirza 0:a0c5877bd360 34 #define ENABLE_FAST_WAKEUP
fahadmirza 0:a0c5877bd360 35
fahadmirza 0:a0c5877bd360 36 /* Variables -----------------------------------------------------------------*/
fahadmirza 0:a0c5877bd360 37 //Flag to indicate if the MCU is Initialized
fahadmirza 0:a0c5877bd360 38 static bool McuInitialized = false;
fahadmirza 0:a0c5877bd360 39
fahadmirza 0:a0c5877bd360 40
fahadmirza 0:a0c5877bd360 41
fahadmirza 0:a0c5877bd360 42 /******************************************************************************
fahadmirza 0:a0c5877bd360 43 * @brief : System Clock Configuration
fahadmirza 0:a0c5877bd360 44 * The system Clock is configured as follow :
fahadmirza 0:a0c5877bd360 45 * System Clock source = PLL (HSI)
fahadmirza 0:a0c5877bd360 46 * SYSCLK(Hz) = 32000000
fahadmirza 0:a0c5877bd360 47 * HCLK(Hz) = 32000000
fahadmirza 0:a0c5877bd360 48 * AHB Prescaler = 1
fahadmirza 0:a0c5877bd360 49 * APB1 Prescaler = 1
fahadmirza 0:a0c5877bd360 50 * APB2 Prescaler = 1
fahadmirza 0:a0c5877bd360 51 * HSI Frequency(Hz) = 16000000
fahadmirza 0:a0c5877bd360 52 * PLLMUL = 6
fahadmirza 0:a0c5877bd360 53 * PLLDIV = 3
fahadmirza 0:a0c5877bd360 54 * Flash Latency(WS) = 1
fahadmirza 0:a0c5877bd360 55 * @retval: None
fahadmirza 0:a0c5877bd360 56 * @note : This function enables all the clock necessary for the demo
fahadmirza 0:a0c5877bd360 57 * including UARTs
fahadmirza 0:a0c5877bd360 58 ******************************************************************************/
fahadmirza 0:a0c5877bd360 59 void SystemClock_Config(void)
fahadmirza 0:a0c5877bd360 60 {
fahadmirza 0:a0c5877bd360 61 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
fahadmirza 0:a0c5877bd360 62 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
fahadmirza 0:a0c5877bd360 63 RCC_PeriphCLKInitTypeDef PeriphClkInit;
fahadmirza 0:a0c5877bd360 64
fahadmirza 0:a0c5877bd360 65 // Enable HSI48 Oscillator for RNG analog part
fahadmirza 0:a0c5877bd360 66 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48;
fahadmirza 0:a0c5877bd360 67 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
fahadmirza 0:a0c5877bd360 68 RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
fahadmirza 0:a0c5877bd360 69 if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
fahadmirza 0:a0c5877bd360 70 {
fahadmirza 0:a0c5877bd360 71 // Initialization Error
fahadmirza 0:a0c5877bd360 72 Error_Handler();
fahadmirza 0:a0c5877bd360 73 }
fahadmirza 0:a0c5877bd360 74
fahadmirza 0:a0c5877bd360 75 // // Enable HSI Oscillator and Activate PLL with HSI as source
fahadmirza 0:a0c5877bd360 76 // RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
fahadmirza 0:a0c5877bd360 77 // RCC_OscInitStruct.HSEState = RCC_HSE_OFF;
fahadmirza 0:a0c5877bd360 78 // RCC_OscInitStruct.HSIState = RCC_HSI_ON;
fahadmirza 0:a0c5877bd360 79 // RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
fahadmirza 0:a0c5877bd360 80 // RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
fahadmirza 0:a0c5877bd360 81 // RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
fahadmirza 0:a0c5877bd360 82 // RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_6;
fahadmirza 0:a0c5877bd360 83 // RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_3;
fahadmirza 0:a0c5877bd360 84 //
fahadmirza 0:a0c5877bd360 85 // if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
fahadmirza 0:a0c5877bd360 86 // {
fahadmirza 0:a0c5877bd360 87 // Error_Handler();
fahadmirza 0:a0c5877bd360 88 // }
fahadmirza 0:a0c5877bd360 89
fahadmirza 0:a0c5877bd360 90 // Set Voltage scale1 as MCU will run at 32MHz
fahadmirza 0:a0c5877bd360 91 __HAL_RCC_PWR_CLK_ENABLE();
fahadmirza 0:a0c5877bd360 92 __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
fahadmirza 0:a0c5877bd360 93
fahadmirza 0:a0c5877bd360 94 // Poll VOSF bit of in PWR_CSR. Wait until it is reset to 0
fahadmirza 0:a0c5877bd360 95 while (__HAL_PWR_GET_FLAG(PWR_FLAG_VOS) != RESET) {};
fahadmirza 0:a0c5877bd360 96
fahadmirza 0:a0c5877bd360 97 // Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers
fahadmirza 0:a0c5877bd360 98 RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
fahadmirza 0:a0c5877bd360 99 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
fahadmirza 0:a0c5877bd360 100 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
fahadmirza 0:a0c5877bd360 101 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
fahadmirza 0:a0c5877bd360 102 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
fahadmirza 0:a0c5877bd360 103 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
fahadmirza 0:a0c5877bd360 104 {
fahadmirza 0:a0c5877bd360 105 Error_Handler();
fahadmirza 0:a0c5877bd360 106 }
fahadmirza 0:a0c5877bd360 107
fahadmirza 0:a0c5877bd360 108
fahadmirza 0:a0c5877bd360 109 // // Select clock for both UART1 and UART2
fahadmirza 0:a0c5877bd360 110 // PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2;
fahadmirza 0:a0c5877bd360 111 // PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_HSI;
fahadmirza 0:a0c5877bd360 112 // HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
fahadmirza 0:a0c5877bd360 113 //
fahadmirza 0:a0c5877bd360 114 // PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;
fahadmirza 0:a0c5877bd360 115 // PeriphClkInit.Usart2ClockSelection = RCC_USART1CLKSOURCE_HSI;
fahadmirza 0:a0c5877bd360 116 // HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
fahadmirza 0:a0c5877bd360 117
fahadmirza 0:a0c5877bd360 118 HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
fahadmirza 0:a0c5877bd360 119 HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
fahadmirza 0:a0c5877bd360 120
fahadmirza 0:a0c5877bd360 121 // SysTick_IRQn interrupt configuration
fahadmirza 0:a0c5877bd360 122 HAL_NVIC_SetPriority(SysTick_IRQn, 1, 0);
fahadmirza 0:a0c5877bd360 123 }
fahadmirza 0:a0c5877bd360 124
fahadmirza 0:a0c5877bd360 125 /******************************************************************************
fahadmirza 0:a0c5877bd360 126 * @Brief : Set all pin as analog
fahadmirza 0:a0c5877bd360 127 * @Param : none
fahadmirza 0:a0c5877bd360 128 * @return: none
fahadmirza 0:a0c5877bd360 129 ******************************************************************************/
fahadmirza 0:a0c5877bd360 130 void HW_GpioInit(void)
fahadmirza 0:a0c5877bd360 131 {
fahadmirza 0:a0c5877bd360 132 GPIO_InitTypeDef GPIO_InitStruct;
fahadmirza 0:a0c5877bd360 133
fahadmirza 0:a0c5877bd360 134 // STM32L0 Gpios are all configured as analog input at Reset
fahadmirza 0:a0c5877bd360 135 __HAL_RCC_GPIOA_CLK_ENABLE();
fahadmirza 0:a0c5877bd360 136 __HAL_RCC_GPIOB_CLK_ENABLE();
fahadmirza 0:a0c5877bd360 137 __HAL_RCC_GPIOC_CLK_ENABLE();
fahadmirza 0:a0c5877bd360 138
fahadmirza 0:a0c5877bd360 139 /*GPIOC*/
fahadmirza 0:a0c5877bd360 140 GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
fahadmirza 0:a0c5877bd360 141 |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7
fahadmirza 0:a0c5877bd360 142 |GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_12;
fahadmirza 0:a0c5877bd360 143 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
fahadmirza 0:a0c5877bd360 144 GPIO_InitStruct.Pull = GPIO_NOPULL;
fahadmirza 0:a0c5877bd360 145 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
fahadmirza 0:a0c5877bd360 146
fahadmirza 0:a0c5877bd360 147 /*GPIOA*/
fahadmirza 0:a0c5877bd360 148 GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_6
fahadmirza 0:a0c5877bd360 149 |GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10
fahadmirza 0:a0c5877bd360 150 |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_15;
fahadmirza 0:a0c5877bd360 151
fahadmirza 0:a0c5877bd360 152 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
fahadmirza 0:a0c5877bd360 153
fahadmirza 0:a0c5877bd360 154 /*GPIOB*/
fahadmirza 0:a0c5877bd360 155 GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_10
fahadmirza 0:a0c5877bd360 156 |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14
fahadmirza 0:a0c5877bd360 157 |GPIO_PIN_15|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5
fahadmirza 0:a0c5877bd360 158 |GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
fahadmirza 0:a0c5877bd360 159
fahadmirza 0:a0c5877bd360 160 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
fahadmirza 0:a0c5877bd360 161
fahadmirza 0:a0c5877bd360 162 __HAL_RCC_GPIOA_CLK_DISABLE();
fahadmirza 0:a0c5877bd360 163 __HAL_RCC_GPIOB_CLK_DISABLE();
fahadmirza 0:a0c5877bd360 164 __HAL_RCC_GPIOC_CLK_DISABLE();
fahadmirza 0:a0c5877bd360 165 }
fahadmirza 0:a0c5877bd360 166
fahadmirza 0:a0c5877bd360 167 /******************************************************************************
fahadmirza 0:a0c5877bd360 168 * @Brief : This function initializes the hardware
fahadmirza 0:a0c5877bd360 169 * @Param : None
fahadmirza 0:a0c5877bd360 170 * @Retval: None
fahadmirza 0:a0c5877bd360 171 ******************************************************************************/
fahadmirza 0:a0c5877bd360 172 void HW_Init(void)
fahadmirza 0:a0c5877bd360 173 {
fahadmirza 0:a0c5877bd360 174 if(McuInitialized == false)
fahadmirza 0:a0c5877bd360 175 {
fahadmirza 0:a0c5877bd360 176 // Reset of all peripherals, Initializes the Flash interface and the Systick.
fahadmirza 0:a0c5877bd360 177 HAL_Init();
fahadmirza 0:a0c5877bd360 178 SystemClock_Config();
fahadmirza 0:a0c5877bd360 179 HW_GpioInit();
fahadmirza 0:a0c5877bd360 180 Debug_UART_Init();
fahadmirza 0:a0c5877bd360 181
fahadmirza 0:a0c5877bd360 182 #if defined( USE_BOOTLOADER )
fahadmirza 0:a0c5877bd360 183 /* Set the Vector Table base location at 0x3000 */
fahadmirza 0:a0c5877bd360 184 NVIC_SetVectorTable( NVIC_VectTab_FLASH, 0x3000 );
fahadmirza 0:a0c5877bd360 185 #endif
fahadmirza 0:a0c5877bd360 186
fahadmirza 0:a0c5877bd360 187 HW_RTC_Init();
fahadmirza 0:a0c5877bd360 188
fahadmirza 0:a0c5877bd360 189 // LED on Nucleo board
fahadmirza 0:a0c5877bd360 190 BSP_LED_Init(LED_GREEN);
fahadmirza 0:a0c5877bd360 191 // Todo: Add UART initialization here
fahadmirza 0:a0c5877bd360 192 McuInitialized = true;
fahadmirza 0:a0c5877bd360 193 }
fahadmirza 0:a0c5877bd360 194 }
fahadmirza 0:a0c5877bd360 195
fahadmirza 0:a0c5877bd360 196 /******************************************************************************
fahadmirza 0:a0c5877bd360 197 * @Brief : Initializes the MSP.
fahadmirza 0:a0c5877bd360 198 * @Param : None
fahadmirza 0:a0c5877bd360 199 * @retval: None
fahadmirza 0:a0c5877bd360 200 ******************************************************************************/
fahadmirza 0:a0c5877bd360 201 void HAL_MspInit(void)
fahadmirza 0:a0c5877bd360 202 {
fahadmirza 0:a0c5877bd360 203 __HAL_RCC_PWR_CLK_ENABLE();
fahadmirza 0:a0c5877bd360 204
fahadmirza 0:a0c5877bd360 205 // Disable the Power Voltage Detector
fahadmirza 0:a0c5877bd360 206 HAL_PWR_DisablePVD();
fahadmirza 0:a0c5877bd360 207
fahadmirza 0:a0c5877bd360 208 // Enables the Ultra Low Power mode
fahadmirza 0:a0c5877bd360 209 HAL_PWREx_EnableUltraLowPower();
fahadmirza 0:a0c5877bd360 210
fahadmirza 0:a0c5877bd360 211 __HAL_FLASH_SLEEP_POWERDOWN_ENABLE();
fahadmirza 0:a0c5877bd360 212
fahadmirza 0:a0c5877bd360 213 /* In debug mode, e.g. when DBGMCU is activated, Arm core has always clocks
fahadmirza 0:a0c5877bd360 214 * And will not wait that the FLACH is ready to be read. It can miss in this
fahadmirza 0:a0c5877bd360 215 * case the first instruction. To overcome this issue, the flash remain clocked during sleep mode
fahadmirza 0:a0c5877bd360 216 */
fahadmirza 0:a0c5877bd360 217 DBG( __HAL_FLASH_SLEEP_POWERDOWN_DISABLE(); );
fahadmirza 0:a0c5877bd360 218
fahadmirza 0:a0c5877bd360 219 #ifdef ENABLE_FAST_WAKEUP
fahadmirza 0:a0c5877bd360 220 /*Enable fast wakeUp*/
fahadmirza 0:a0c5877bd360 221 HAL_PWREx_EnableFastWakeUp( );
fahadmirza 0:a0c5877bd360 222 #else
fahadmirza 0:a0c5877bd360 223 HAL_PWREx_DisableFastWakeUp( );
fahadmirza 0:a0c5877bd360 224 #endif
fahadmirza 0:a0c5877bd360 225 }
fahadmirza 0:a0c5877bd360 226
fahadmirza 0:a0c5877bd360 227
fahadmirza 0:a0c5877bd360 228 #ifdef USE_FULL_ASSERT
fahadmirza 0:a0c5877bd360 229
fahadmirza 0:a0c5877bd360 230 /******************************************************************************
fahadmirza 0:a0c5877bd360 231 * @Brief : Reports the name of the source file and the source line number
fahadmirza 0:a0c5877bd360 232 * where the assert_param error has occurred.
fahadmirza 0:a0c5877bd360 233 * @Param : file: pointer to the source file name
fahadmirza 0:a0c5877bd360 234 * line: assert_param error line source number
fahadmirza 0:a0c5877bd360 235 * @Retval: None
fahadmirza 0:a0c5877bd360 236 ******************************************************************************/
fahadmirza 0:a0c5877bd360 237 void assert_failed(uint8_t* file, uint32_t line)
fahadmirza 0:a0c5877bd360 238 {
fahadmirza 0:a0c5877bd360 239 /* User can add his own implementation to report the file name and line number,
fahadmirza 0:a0c5877bd360 240 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
fahadmirza 0:a0c5877bd360 241 }
fahadmirza 0:a0c5877bd360 242
fahadmirza 0:a0c5877bd360 243 #endif
fahadmirza 0:a0c5877bd360 244
fahadmirza 0:a0c5877bd360 245 #endif /* MAIN_H_ */
fahadmirza 0:a0c5877bd360 246