1 | /**
|
2 | ******************************************************************************
|
3 | * File Name : main.c
|
4 | * Description : Main program body
|
5 | ******************************************************************************
|
6 | *
|
7 | * COPYRIGHT(c) 2017 STMicroelectronics
|
8 | *
|
9 | * Redistribution and use in source and binary forms, with or without modification,
|
10 | * are permitted provided that the following conditions are met:
|
11 | * 1. Redistributions of source code must retain the above copyright notice,
|
12 | * this list of conditions and the following disclaimer.
|
13 | * 2. Redistributions in binary form must reproduce the above copyright notice,
|
14 | * this list of conditions and the following disclaimer in the documentation
|
15 | * and/or other materials provided with the distribution.
|
16 | * 3. Neither the name of STMicroelectronics nor the names of its contributors
|
17 | * may be used to endorse or promote products derived from this software
|
18 | * without specific prior written permission.
|
19 | *
|
20 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
21 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
22 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
23 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
24 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
25 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
26 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
27 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
28 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
29 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30 | *
|
31 | ******************************************************************************
|
32 | */
|
33 | /* Includes ------------------------------------------------------------------*/
|
34 | #include "main.h"
|
35 | #include "stm32l4xx_hal.h"
|
36 |
|
37 | /* USER CODE BEGIN Includes */
|
38 |
|
39 |
|
40 | /* USER CODE END Includes */
|
41 |
|
42 | /* Private variables ---------------------------------------------------------*/
|
43 | TIM_HandleTypeDef htim1;
|
44 |
|
45 | /* USER CODE BEGIN PV */
|
46 | /* Private variables ---------------------------------------------------------*/
|
47 |
|
48 | /* USER CODE END PV */
|
49 |
|
50 | /* Private function prototypes -----------------------------------------------*/
|
51 | void SystemClock_Config(void);
|
52 | void Error_Handler(void);
|
53 | static void MX_GPIO_Init(void);
|
54 | static void MX_TIM1_Init(void);
|
55 | void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
|
56 |
|
57 |
|
58 | /* USER CODE BEGIN PFP */
|
59 | /* Private function prototypes -----------------------------------------------*/
|
60 |
|
61 | void User_Init_EXTI(void);
|
62 |
|
63 | /* USER CODE END PFP */
|
64 |
|
65 | /* USER CODE BEGIN 0 */
|
66 |
|
67 |
|
68 | void User_Init_EXTI(void)
|
69 | {
|
70 |
|
71 | EXTI->IMR1 = EXTI_IMR1_IM12; /* Enable the Interrupt request from EXTI_line_12 */
|
72 | EXTI->RTSR1 = EXTI_RTSR1_RT12; /* Enable a rising trigger EXTI line 12 Interrupt */
|
73 |
|
74 | SYSCFG->EXTICR[3] = SYSCFG_EXTICR4_EXTI12_PC; /* Mapping the EXTI line to Port C */
|
75 |
|
76 | /*Configure NVIC for EXTI15_10_IRQn */
|
77 | NVIC_EnableIRQ(EXTI15_10_IRQn);
|
78 | NVIC_SetPriority(EXTI15_10_IRQn,0);
|
79 | }
|
80 |
|
81 | /* USER CODE END 0 */
|
82 |
|
83 | int main(void)
|
84 | {
|
85 |
|
86 | /* USER CODE BEGIN 1 */
|
87 |
|
88 | /* USER CODE END 1 */
|
89 |
|
90 | /* MCU Configuration----------------------------------------------------------*/
|
91 |
|
92 | /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
93 | HAL_Init();
|
94 |
|
95 | /* Configure the system clock */
|
96 | SystemClock_Config();
|
97 |
|
98 | /* Initialize all configured peripherals */
|
99 | MX_GPIO_Init();
|
100 | MX_TIM1_Init();
|
101 |
|
102 | /* USER CODE BEGIN 2 */
|
103 |
|
104 | User_Init_EXTI();
|
105 |
|
106 | /* USER CODE END 2 */
|
107 |
|
108 | /* Infinite loop */
|
109 | /* USER CODE BEGIN WHILE */
|
110 | while (1)
|
111 | {
|
112 |
|
113 |
|
114 |
|
115 | /* USER CODE END WHILE */
|
116 |
|
117 | /* USER CODE BEGIN 3 */
|
118 |
|
119 | }
|
120 | /* USER CODE END 3 */
|
121 |
|
122 | }
|
123 |
|
124 | /** System Clock Configuration
|
125 | */
|
126 | void SystemClock_Config(void)
|
127 | {
|
128 |
|
129 | RCC_OscInitTypeDef RCC_OscInitStruct;
|
130 | RCC_ClkInitTypeDef RCC_ClkInitStruct;
|
131 |
|
132 | /**Initializes the CPU, AHB and APB busses clocks
|
133 | */
|
134 | RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
|
135 | RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
136 | RCC_OscInitStruct.HSICalibrationValue = 16;
|
137 | RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
138 | RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
|
139 | RCC_OscInitStruct.PLL.PLLM = 1;
|
140 | RCC_OscInitStruct.PLL.PLLN = 10;
|
141 | RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
|
142 | RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
|
143 | RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
|
144 | if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
145 | {
|
146 | Error_Handler();
|
147 | }
|
148 |
|
149 | /**Initializes the CPU, AHB and APB busses clocks
|
150 | */
|
151 | RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
152 | |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
153 | RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
154 | RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
155 | RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
|
156 | RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
157 |
|
158 | if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
|
159 | {
|
160 | Error_Handler();
|
161 | }
|
162 |
|
163 | /**Configure the main internal regulator output voltage
|
164 | */
|
165 | if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK)
|
166 | {
|
167 | Error_Handler();
|
168 | }
|
169 |
|
170 | /**Configure the Systick interrupt time
|
171 | */
|
172 | HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
|
173 |
|
174 | /**Configure the Systick
|
175 | */
|
176 | HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
|
177 |
|
178 | /* SysTick_IRQn interrupt configuration */
|
179 | HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
|
180 | }
|
181 |
|
182 | /* TIM1 init function */
|
183 | static void MX_TIM1_Init(void)
|
184 | {
|
185 |
|
186 | TIM_SlaveConfigTypeDef sSlaveConfig;
|
187 | TIM_MasterConfigTypeDef sMasterConfig;
|
188 | TIM_OC_InitTypeDef sConfigOC;
|
189 | TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;
|
190 |
|
191 | htim1.Instance = TIM1;
|
192 | htim1.Init.Prescaler = 1;
|
193 | htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
|
194 | htim1.Init.Period = 8;
|
195 | htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
196 | htim1.Init.RepetitionCounter = 255;
|
197 | if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
|
198 | {
|
199 | Error_Handler();
|
200 | }
|
201 |
|
202 | if (HAL_TIM_OC_Init(&htim1) != HAL_OK)
|
203 | {
|
204 | Error_Handler();
|
205 | }
|
206 |
|
207 | sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER;
|
208 | sSlaveConfig.InputTrigger = TIM_TS_ETRF;
|
209 | sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_NONINVERTED;
|
210 | sSlaveConfig.TriggerPrescaler = TIM_TRIGGERPRESCALER_DIV1;
|
211 | sSlaveConfig.TriggerFilter = 0;
|
212 | if (HAL_TIM_SlaveConfigSynchronization(&htim1, &sSlaveConfig) != HAL_OK)
|
213 | {
|
214 | Error_Handler();
|
215 | }
|
216 |
|
217 | sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
218 | sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
|
219 | sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
220 | if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
|
221 | {
|
222 | Error_Handler();
|
223 | }
|
224 |
|
225 | sConfigOC.OCMode = TIM_OCMODE_TIMING;
|
226 | sConfigOC.Pulse = 0;
|
227 | sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
228 | sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
|
229 | sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
230 | sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
|
231 | sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
|
232 | if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
233 | {
|
234 | Error_Handler();
|
235 | }
|
236 |
|
237 | if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
238 | {
|
239 | Error_Handler();
|
240 | }
|
241 |
|
242 | if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
243 | {
|
244 | Error_Handler();
|
245 | }
|
246 |
|
247 | if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
248 | {
|
249 | Error_Handler();
|
250 | }
|
251 |
|
252 | sConfigOC.Pulse = 8;
|
253 | if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_5) != HAL_OK)
|
254 | {
|
255 | Error_Handler();
|
256 | }
|
257 |
|
258 | sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
|
259 | sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
|
260 | sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
|
261 | sBreakDeadTimeConfig.DeadTime = 0;
|
262 | sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
|
263 | sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
|
264 | sBreakDeadTimeConfig.BreakFilter = 0;
|
265 | sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
|
266 | sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
|
267 | sBreakDeadTimeConfig.Break2Filter = 0;
|
268 | sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
|
269 | if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
|
270 | {
|
271 | Error_Handler();
|
272 | }
|
273 |
|
274 | HAL_TIM_MspPostInit(&htim1);
|
275 |
|
276 | }
|
277 |
|
278 | /** Configure pins as
|
279 | * Analog
|
280 | * Input
|
281 | * Output
|
282 | * EVENT_OUT
|
283 | * EXTI
|
284 | */
|
285 | static void MX_GPIO_Init(void)
|
286 | {
|
287 |
|
288 | GPIO_InitTypeDef GPIO_InitStruct;
|
289 |
|
290 | /* GPIO Ports Clock Enable */
|
291 | __HAL_RCC_GPIOC_CLK_ENABLE();
|
292 | __HAL_RCC_GPIOA_CLK_ENABLE();
|
293 |
|
294 | /*Configure GPIO pin Output Level */
|
295 | HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0|GPIO_PIN_5, GPIO_PIN_RESET);
|
296 |
|
297 | /*Configure GPIO pin : PC13 */
|
298 | GPIO_InitStruct.Pin = GPIO_PIN_13;
|
299 | GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
300 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
301 | HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
302 |
|
303 | /*Configure GPIO pins : PA0 PA5 */
|
304 | GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_5;
|
305 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
306 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
307 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
308 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
309 |
|
310 | /*Configure GPIO pin : PC12 */
|
311 | GPIO_InitStruct.Pin = GPIO_PIN_12;
|
312 | GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
|
313 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
314 | HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
315 |
|
316 | }
|
317 |
|
318 | /* USER CODE BEGIN 4 */
|
319 |
|
320 | /* USER CODE END 4 */
|
321 |
|
322 | /**
|
323 | * @brief This function is executed in case of error occurrence.
|
324 | * @param None
|
325 | * @retval None
|
326 | */
|
327 | void Error_Handler(void)
|
328 | {
|
329 | /* USER CODE BEGIN Error_Handler */
|
330 | /* User can add his own implementation to report the HAL error return state */
|
331 | while(1)
|
332 | {
|
333 | }
|
334 | /* USER CODE END Error_Handler */
|
335 | }
|
336 |
|
337 | #ifdef USE_FULL_ASSERT
|
338 |
|
339 | /**
|
340 | * @brief Reports the name of the source file and the source line number
|
341 | * where the assert_param error has occurred.
|
342 | * @param file: pointer to the source file name
|
343 | * @param line: assert_param error line source number
|
344 | * @retval None
|
345 | */
|
346 | void assert_failed(uint8_t* file, uint32_t line)
|
347 | {
|
348 | /* USER CODE BEGIN 6 */
|
349 | /* User can add his own implementation to report the file name and line number,
|
350 | ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
|
351 | /* USER CODE END 6 */
|
352 |
|
353 | }
|
354 |
|
355 | #endif
|
356 |
|
357 | /**
|
358 | * @}
|
359 | */
|
360 |
|
361 | /**
|
362 | * @}
|
363 | */
|
364 |
|
365 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|