using stm32cube to generate startup code

Dependencies:   mbed-src

Committer:
homayoun
Date:
Mon Aug 25 15:09:19 2014 +0000
Revision:
0:8a83ba215cd0
Using stm32cube generated code, and mbed-src library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
homayoun 0:8a83ba215cd0 1 /**
homayoun 0:8a83ba215cd0 2 ******************************************************************************
homayoun 0:8a83ba215cd0 3 * File Name : main.c
homayoun 0:8a83ba215cd0 4 * Date : 21/08/2014 07:33:41
homayoun 0:8a83ba215cd0 5 * Description : Main program body
homayoun 0:8a83ba215cd0 6 ******************************************************************************
homayoun 0:8a83ba215cd0 7 *
homayoun 0:8a83ba215cd0 8 * COPYRIGHT(c) 2014 STMicroelectronics
homayoun 0:8a83ba215cd0 9 *
homayoun 0:8a83ba215cd0 10 * Redistribution and use in source and binary forms, with or without modification,
homayoun 0:8a83ba215cd0 11 * are permitted provided that the following conditions are met:
homayoun 0:8a83ba215cd0 12 * 1. Redistributions of source code must retain the above copyright notice,
homayoun 0:8a83ba215cd0 13 * this list of conditions and the following disclaimer.
homayoun 0:8a83ba215cd0 14 * 2. Redistributions in binary form must reproduce the above copyright notice,
homayoun 0:8a83ba215cd0 15 * this list of conditions and the following disclaimer in the documentation
homayoun 0:8a83ba215cd0 16 * and/or other materials provided with the distribution.
homayoun 0:8a83ba215cd0 17 * 3. Neither the name of STMicroelectronics nor the names of its contributors
homayoun 0:8a83ba215cd0 18 * may be used to endorse or promote products derived from this software
homayoun 0:8a83ba215cd0 19 * without specific prior written permission.
homayoun 0:8a83ba215cd0 20 *
homayoun 0:8a83ba215cd0 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
homayoun 0:8a83ba215cd0 22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
homayoun 0:8a83ba215cd0 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
homayoun 0:8a83ba215cd0 24 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
homayoun 0:8a83ba215cd0 25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
homayoun 0:8a83ba215cd0 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
homayoun 0:8a83ba215cd0 27 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
homayoun 0:8a83ba215cd0 28 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
homayoun 0:8a83ba215cd0 29 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
homayoun 0:8a83ba215cd0 30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
homayoun 0:8a83ba215cd0 31 *
homayoun 0:8a83ba215cd0 32 ******************************************************************************
homayoun 0:8a83ba215cd0 33 */
homayoun 0:8a83ba215cd0 34
homayoun 0:8a83ba215cd0 35 /* Includes ------------------------------------------------------------------*/
homayoun 0:8a83ba215cd0 36 #include "stm32f4xx_hal.h"
homayoun 0:8a83ba215cd0 37
homayoun 0:8a83ba215cd0 38 /* Private variables ---------------------------------------------------------*/
homayoun 0:8a83ba215cd0 39 ADC_HandleTypeDef hadc1;
homayoun 0:8a83ba215cd0 40
homayoun 0:8a83ba215cd0 41 UART_HandleTypeDef huart2;
homayoun 0:8a83ba215cd0 42
homayoun 0:8a83ba215cd0 43 /* USER CODE BEGIN 0 */
homayoun 0:8a83ba215cd0 44
homayoun 0:8a83ba215cd0 45 #include "mbed.h"
homayoun 0:8a83ba215cd0 46 AnalogIn analog_value(A0);
homayoun 0:8a83ba215cd0 47
homayoun 0:8a83ba215cd0 48 DigitalOut myled(LED1);
homayoun 0:8a83ba215cd0 49
homayoun 0:8a83ba215cd0 50 // Calculate the corresponding acquisition measure for a given value in mV
homayoun 0:8a83ba215cd0 51 #define MV(x) ((0xFFF*x)/3300)
homayoun 0:8a83ba215cd0 52
homayoun 0:8a83ba215cd0 53 /* USER CODE END 0 */
homayoun 0:8a83ba215cd0 54
homayoun 0:8a83ba215cd0 55 /* Private function prototypes -----------------------------------------------*/
homayoun 0:8a83ba215cd0 56 void SystemClock_Config(void);
homayoun 0:8a83ba215cd0 57 static void MX_GPIO_Init(void);
homayoun 0:8a83ba215cd0 58 static void MX_ADC1_Init(void);
homayoun 0:8a83ba215cd0 59 static void MX_USART2_UART_Init(void);
homayoun 0:8a83ba215cd0 60
homayoun 0:8a83ba215cd0 61 int main(void)
homayoun 0:8a83ba215cd0 62 {
homayoun 0:8a83ba215cd0 63
homayoun 0:8a83ba215cd0 64 /* USER CODE BEGIN 1 */
homayoun 0:8a83ba215cd0 65
homayoun 0:8a83ba215cd0 66 /* USER CODE END 1 */
homayoun 0:8a83ba215cd0 67
homayoun 0:8a83ba215cd0 68 /* MCU Configuration----------------------------------------------------------*/
homayoun 0:8a83ba215cd0 69
homayoun 0:8a83ba215cd0 70 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
homayoun 0:8a83ba215cd0 71 HAL_Init();
homayoun 0:8a83ba215cd0 72
homayoun 0:8a83ba215cd0 73 /* Configure the system clock */
homayoun 0:8a83ba215cd0 74 SystemClock_Config();
homayoun 0:8a83ba215cd0 75
homayoun 0:8a83ba215cd0 76 /* System interrupt init*/
homayoun 0:8a83ba215cd0 77 /* Sets the priority grouping field */
homayoun 0:8a83ba215cd0 78 HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
homayoun 0:8a83ba215cd0 79 HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
homayoun 0:8a83ba215cd0 80
homayoun 0:8a83ba215cd0 81 /* Initialize all configured peripherals */
homayoun 0:8a83ba215cd0 82 MX_GPIO_Init();
homayoun 0:8a83ba215cd0 83 MX_ADC1_Init();
homayoun 0:8a83ba215cd0 84 MX_USART2_UART_Init();
homayoun 0:8a83ba215cd0 85
homayoun 0:8a83ba215cd0 86 /* USER CODE BEGIN 2 */
homayoun 0:8a83ba215cd0 87
homayoun 0:8a83ba215cd0 88 /* USER CODE END 2 */
homayoun 0:8a83ba215cd0 89
homayoun 0:8a83ba215cd0 90 /* USER CODE BEGIN 3 */
homayoun 0:8a83ba215cd0 91 /* Infinite loop */
homayoun 0:8a83ba215cd0 92 while (1) {
homayoun 0:8a83ba215cd0 93 uint16_t meas = analog_value.read_u16(); // Converts and read the analog input value
homayoun 0:8a83ba215cd0 94 if (meas > MV(1000)) { // If the value is greater than 1000 mV toggle the LED
homayoun 0:8a83ba215cd0 95 myled = !myled;
homayoun 0:8a83ba215cd0 96 }
homayoun 0:8a83ba215cd0 97 wait(1); // 200 ms
homayoun 0:8a83ba215cd0 98 }
homayoun 0:8a83ba215cd0 99 /* USER CODE END 3 */
homayoun 0:8a83ba215cd0 100
homayoun 0:8a83ba215cd0 101 }
homayoun 0:8a83ba215cd0 102
homayoun 0:8a83ba215cd0 103 /** System Clock Configuration
homayoun 0:8a83ba215cd0 104 */
homayoun 0:8a83ba215cd0 105 void SystemClock_Config(void)
homayoun 0:8a83ba215cd0 106 {
homayoun 0:8a83ba215cd0 107
homayoun 0:8a83ba215cd0 108 RCC_ClkInitTypeDef RCC_ClkInitStruct;
homayoun 0:8a83ba215cd0 109 RCC_OscInitTypeDef RCC_OscInitStruct;
homayoun 0:8a83ba215cd0 110
homayoun 0:8a83ba215cd0 111 __PWR_CLK_ENABLE();
homayoun 0:8a83ba215cd0 112
homayoun 0:8a83ba215cd0 113 __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);
homayoun 0:8a83ba215cd0 114
homayoun 0:8a83ba215cd0 115 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
homayoun 0:8a83ba215cd0 116 RCC_OscInitStruct.HSIState = RCC_HSI_ON;
homayoun 0:8a83ba215cd0 117 RCC_OscInitStruct.HSICalibrationValue = 6;
homayoun 0:8a83ba215cd0 118 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
homayoun 0:8a83ba215cd0 119 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
homayoun 0:8a83ba215cd0 120 RCC_OscInitStruct.PLL.PLLM = 16;
homayoun 0:8a83ba215cd0 121 RCC_OscInitStruct.PLL.PLLN = 336;
homayoun 0:8a83ba215cd0 122 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
homayoun 0:8a83ba215cd0 123 RCC_OscInitStruct.PLL.PLLQ = 7;
homayoun 0:8a83ba215cd0 124 HAL_RCC_OscConfig(&RCC_OscInitStruct);
homayoun 0:8a83ba215cd0 125
homayoun 0:8a83ba215cd0 126 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1;
homayoun 0:8a83ba215cd0 127 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
homayoun 0:8a83ba215cd0 128 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
homayoun 0:8a83ba215cd0 129 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
homayoun 0:8a83ba215cd0 130 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
homayoun 0:8a83ba215cd0 131 HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
homayoun 0:8a83ba215cd0 132
homayoun 0:8a83ba215cd0 133 }
homayoun 0:8a83ba215cd0 134
homayoun 0:8a83ba215cd0 135 /* ADC1 init function */
homayoun 0:8a83ba215cd0 136 void MX_ADC1_Init(void)
homayoun 0:8a83ba215cd0 137 {
homayoun 0:8a83ba215cd0 138
homayoun 0:8a83ba215cd0 139 ADC_ChannelConfTypeDef sConfig;
homayoun 0:8a83ba215cd0 140
homayoun 0:8a83ba215cd0 141 /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
homayoun 0:8a83ba215cd0 142 */
homayoun 0:8a83ba215cd0 143 hadc1.Instance = ADC1;
homayoun 0:8a83ba215cd0 144 hadc1.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2;
homayoun 0:8a83ba215cd0 145 hadc1.Init.Resolution = ADC_RESOLUTION12b;
homayoun 0:8a83ba215cd0 146 hadc1.Init.ScanConvMode = DISABLE;
homayoun 0:8a83ba215cd0 147 hadc1.Init.ContinuousConvMode = DISABLE;
homayoun 0:8a83ba215cd0 148 hadc1.Init.DiscontinuousConvMode = DISABLE;
homayoun 0:8a83ba215cd0 149 hadc1.Init.NbrOfDiscConversion = 1;
homayoun 0:8a83ba215cd0 150 hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
homayoun 0:8a83ba215cd0 151 hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
homayoun 0:8a83ba215cd0 152 hadc1.Init.NbrOfConversion = 1;
homayoun 0:8a83ba215cd0 153 hadc1.Init.DMAContinuousRequests = DISABLE;
homayoun 0:8a83ba215cd0 154 hadc1.Init.EOCSelection = EOC_SINGLE_CONV;
homayoun 0:8a83ba215cd0 155 HAL_ADC_Init(&hadc1);
homayoun 0:8a83ba215cd0 156
homayoun 0:8a83ba215cd0 157 /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
homayoun 0:8a83ba215cd0 158 */
homayoun 0:8a83ba215cd0 159 sConfig.Channel = ADC_CHANNEL_0;
homayoun 0:8a83ba215cd0 160 sConfig.Rank = 1;
homayoun 0:8a83ba215cd0 161 sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
homayoun 0:8a83ba215cd0 162 HAL_ADC_ConfigChannel(&hadc1, &sConfig);
homayoun 0:8a83ba215cd0 163
homayoun 0:8a83ba215cd0 164 }
homayoun 0:8a83ba215cd0 165
homayoun 0:8a83ba215cd0 166 /* USART2 init function */
homayoun 0:8a83ba215cd0 167 void MX_USART2_UART_Init(void)
homayoun 0:8a83ba215cd0 168 {
homayoun 0:8a83ba215cd0 169
homayoun 0:8a83ba215cd0 170 huart2.Instance = USART2;
homayoun 0:8a83ba215cd0 171 huart2.Init.BaudRate = 115200;
homayoun 0:8a83ba215cd0 172 huart2.Init.WordLength = UART_WORDLENGTH_8B;
homayoun 0:8a83ba215cd0 173 huart2.Init.StopBits = UART_STOPBITS_1;
homayoun 0:8a83ba215cd0 174 huart2.Init.Parity = UART_PARITY_NONE;
homayoun 0:8a83ba215cd0 175 huart2.Init.Mode = UART_MODE_TX_RX;
homayoun 0:8a83ba215cd0 176 huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
homayoun 0:8a83ba215cd0 177 huart2.Init.OverSampling = UART_OVERSAMPLING_16;
homayoun 0:8a83ba215cd0 178 HAL_UART_Init(&huart2);
homayoun 0:8a83ba215cd0 179
homayoun 0:8a83ba215cd0 180 }
homayoun 0:8a83ba215cd0 181
homayoun 0:8a83ba215cd0 182 /** Configure pins as
homayoun 0:8a83ba215cd0 183 * Analog
homayoun 0:8a83ba215cd0 184 * Input
homayoun 0:8a83ba215cd0 185 * Output
homayoun 0:8a83ba215cd0 186 * EVENT_OUT
homayoun 0:8a83ba215cd0 187 * EXTI
homayoun 0:8a83ba215cd0 188 */
homayoun 0:8a83ba215cd0 189 void MX_GPIO_Init(void)
homayoun 0:8a83ba215cd0 190 {
homayoun 0:8a83ba215cd0 191
homayoun 0:8a83ba215cd0 192 GPIO_InitTypeDef GPIO_InitStruct;
homayoun 0:8a83ba215cd0 193
homayoun 0:8a83ba215cd0 194 /* GPIO Ports Clock Enable */
homayoun 0:8a83ba215cd0 195 __GPIOC_CLK_ENABLE();
homayoun 0:8a83ba215cd0 196 __GPIOH_CLK_ENABLE();
homayoun 0:8a83ba215cd0 197 __GPIOA_CLK_ENABLE();
homayoun 0:8a83ba215cd0 198 __GPIOB_CLK_ENABLE();
homayoun 0:8a83ba215cd0 199
homayoun 0:8a83ba215cd0 200 /*Configure GPIO pin : PC13 */
homayoun 0:8a83ba215cd0 201 GPIO_InitStruct.Pin = GPIO_PIN_13;
homayoun 0:8a83ba215cd0 202 GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING;
homayoun 0:8a83ba215cd0 203 GPIO_InitStruct.Pull = GPIO_NOPULL;
homayoun 0:8a83ba215cd0 204 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
homayoun 0:8a83ba215cd0 205
homayoun 0:8a83ba215cd0 206 /*Configure GPIO pin : PA5 */
homayoun 0:8a83ba215cd0 207 GPIO_InitStruct.Pin = GPIO_PIN_5;
homayoun 0:8a83ba215cd0 208 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
homayoun 0:8a83ba215cd0 209 GPIO_InitStruct.Pull = GPIO_NOPULL;
homayoun 0:8a83ba215cd0 210 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
homayoun 0:8a83ba215cd0 211 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
homayoun 0:8a83ba215cd0 212
homayoun 0:8a83ba215cd0 213 }
homayoun 0:8a83ba215cd0 214
homayoun 0:8a83ba215cd0 215 /* USER CODE BEGIN 4 */
homayoun 0:8a83ba215cd0 216
homayoun 0:8a83ba215cd0 217 /* USER CODE END 4 */
homayoun 0:8a83ba215cd0 218
homayoun 0:8a83ba215cd0 219 #ifdef USE_FULL_ASSERT
homayoun 0:8a83ba215cd0 220
homayoun 0:8a83ba215cd0 221 /**
homayoun 0:8a83ba215cd0 222 * @brief Reports the name of the source file and the source line number
homayoun 0:8a83ba215cd0 223 * where the assert_param error has occurred.
homayoun 0:8a83ba215cd0 224 * @param file: pointer to the source file name
homayoun 0:8a83ba215cd0 225 * @param line: assert_param error line source number
homayoun 0:8a83ba215cd0 226 * @retval None
homayoun 0:8a83ba215cd0 227 */
homayoun 0:8a83ba215cd0 228 void assert_failed(uint8_t* file, uint32_t line)
homayoun 0:8a83ba215cd0 229 {
homayoun 0:8a83ba215cd0 230 /* USER CODE BEGIN 6 */
homayoun 0:8a83ba215cd0 231 /* User can add his own implementation to report the file name and line number,
homayoun 0:8a83ba215cd0 232 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
homayoun 0:8a83ba215cd0 233 /* USER CODE END 6 */
homayoun 0:8a83ba215cd0 234
homayoun 0:8a83ba215cd0 235 }
homayoun 0:8a83ba215cd0 236
homayoun 0:8a83ba215cd0 237 #endif
homayoun 0:8a83ba215cd0 238
homayoun 0:8a83ba215cd0 239 /**
homayoun 0:8a83ba215cd0 240 * @}
homayoun 0:8a83ba215cd0 241 */
homayoun 0:8a83ba215cd0 242
homayoun 0:8a83ba215cd0 243 /**
homayoun 0:8a83ba215cd0 244 * @}
homayoun 0:8a83ba215cd0 245 */
homayoun 0:8a83ba215cd0 246
homayoun 0:8a83ba215cd0 247 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/