Download as pdf or txt
Download as pdf or txt
You are on page 1of 6

main.

c Thursday, March 21, 2024, 4:46 PM

1 /* USER CODE BEGIN Header */


2 /**
3 ******************************************************************************
4 * @file : main.c
5 * @brief : Main program body
6 ******************************************************************************
7 * @attention
8 *
9 * Copyright (c) 2024 STMicroelectronics.
10 * All rights reserved.
11 *
12 * This software is licensed under terms that can be found in the LICENSE file
13 * in the root directory of this software component.
14 * If no LICENSE file comes with this software, it is provided AS-IS.
15 *
16 ******************************************************************************
17 */
18 /* USER CODE END Header */
19 /* Includes ------------------------------------------------------------------*/
20 #include "main.h"
21
22 /* Private includes ----------------------------------------------------------*/
23 /* USER CODE BEGIN Includes */
24
25 /* USER CODE END Includes */
26
27 /* Private typedef -----------------------------------------------------------*/
28 /* USER CODE BEGIN PTD */
29
30 /* USER CODE END PTD */
31
32 /* Private define ------------------------------------------------------------*/
33 /* USER CODE BEGIN PD */
34
35 /* USER CODE END PD */
36
37 /* Private macro -------------------------------------------------------------*/
38 /* USER CODE BEGIN PM */
39
40 /* USER CODE END PM */
41
42 /* Private variables ---------------------------------------------------------*/
43
44 /* USER CODE BEGIN PV */
45
46 /* USER CODE END PV */
47
48 /* Private function prototypes -----------------------------------------------*/
49 void SystemClock_Config(void);
50 void PeriphCommonClock_Config(void);
51 static void MX_GPIO_Init(void);
52 /* USER CODE BEGIN PFP */
53
54 /* USER CODE END PFP */
55
56 /* Private user code ---------------------------------------------------------*/
57 /* USER CODE BEGIN 0 */
58 int SW1_stat=0;
59 int SW2_stat=0;
60 int SW3_stat=0;
61 int SW1c_stat=0;
62 int SW2c_stat=0;
63 int Opt_stat=0;
64

Page 1
main.c Thursday, March 21, 2024, 4:46 PM

65 int i;
66 /* USER CODE END 0 */
67
68 /**
69 * @brief The application entry point.
70 * @retval int
71 */
72 int main(void)
73 {
74
75 /* USER CODE BEGIN 1 */
76
77 /* USER CODE END 1 */
78
79 /* MCU Configuration--------------------------------------------------------*/
80
81 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
82 HAL_Init();
83
84 /* USER CODE BEGIN Init */
85
86 /* USER CODE END Init */
87
88 /* Configure the system clock */
89 SystemClock_Config();
90
91 /* Configure the peripherals common clocks */
92 PeriphCommonClock_Config();
93
94 /* USER CODE BEGIN SysInit */
95
96 /* USER CODE END SysInit */
97
98 /* Initialize all configured peripherals */
99 MX_GPIO_Init();
100 /* USER CODE BEGIN 2 */
101
102 /* USER CODE END 2 */
103
104 /* Infinite loop */
105 /* USER CODE BEGIN WHILE */
106 while (1)
107 {
108 if(Opt_stat==1)
109 {
110 HAL_GPIO_TogglePin(GPIOB,LED1_Pin);
111 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
112 HAL_Delay(100);
113 }
114 if (SW1c_stat>=2)
115 {
116 SW1c_stat=0;
117 for(i = 0; i <= 7; i++)
118 {
119 HAL_GPIO_TogglePin(GPIOB,LED3_Pin);
120 HAL_Delay(100);
121 }
122 }
123 if (SW2c_stat>=2)
124 {
125 SW2c_stat=0;
126 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
127 HAL_Delay(100);
128 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);

Page 2
main.c Thursday, March 21, 2024, 4:46 PM

129 HAL_Delay(100);
130 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
131 HAL_Delay(100);
132 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
133 HAL_Delay(100);
134 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
135 HAL_Delay(100);
136 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
137 HAL_Delay(100);
138
139 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
140 HAL_Delay(200);
141 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
142 HAL_Delay(200);
143 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
144 HAL_Delay(200);
145 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
146 HAL_Delay(200);
147 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
148 HAL_Delay(200);
149 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
150 HAL_Delay(200);
151
152 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
153 HAL_Delay(100);
154 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
155 HAL_Delay(100);
156 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
157 HAL_Delay(100);
158 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
159 HAL_Delay(100);
160 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
161 HAL_Delay(100);
162 HAL_GPIO_TogglePin(GPIOB,LED2_Pin);
163 HAL_Delay(100);
164 }
165 /* USER CODE END WHILE */
166
167 /* USER CODE BEGIN 3 */
168 }
169 /* USER CODE END 3 */
170 }
171
172 /**
173 * @brief System Clock Configuration
174 * @retval None
175 */
176 void SystemClock_Config(void)
177 {
178 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
179 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
180
181 /** Configure the main internal regulator output voltage
182 */
183 __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
184
185 /** Initializes the RCC Oscillators according to the specified parameters
186 * in the RCC_OscInitTypeDef structure.
187 */
188 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_MSI;
189 RCC_OscInitStruct.HSIState = RCC_HSI_ON;
190 RCC_OscInitStruct.MSIState = RCC_MSI_ON;
191 RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
192 RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT;

Page 3
main.c Thursday, March 21, 2024, 4:46 PM

193 RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6;


194 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
195 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
196 {
197 Error_Handler();
198 }
199
200 /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers
201 */
202 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK4|RCC_CLOCKTYPE_HCLK2
203 |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
204 |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
205 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
206 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
207 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
208 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
209 RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;
210 RCC_ClkInitStruct.AHBCLK4Divider = RCC_SYSCLK_DIV1;
211
212 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
213 {
214 Error_Handler();
215 }
216 }
217
218 /**
219 * @brief Peripherals Common Clock Configuration
220 * @retval None
221 */
222 void PeriphCommonClock_Config(void)
223 {
224 RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
225
226 /** Initializes the peripherals clock
227 */
228 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SMPS;
229 PeriphClkInitStruct.SmpsClockSelection = RCC_SMPSCLKSOURCE_HSI;
230 PeriphClkInitStruct.SmpsDivSelection = RCC_SMPSCLKDIV_RANGE1;
231
232 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
233 {
234 Error_Handler();
235 }
236 /* USER CODE BEGIN Smps */
237
238 /* USER CODE END Smps */
239 }
240
241 /**
242 * @brief GPIO Initialization Function
243 * @param None
244 * @retval None
245 */
246 static void MX_GPIO_Init(void)
247 {
248 GPIO_InitTypeDef GPIO_InitStruct = {0};
249 /* USER CODE BEGIN MX_GPIO_Init_1 */
250 /* USER CODE END MX_GPIO_Init_1 */
251
252 /* GPIO Ports Clock Enable */
253 __HAL_RCC_GPIOC_CLK_ENABLE();
254 __HAL_RCC_GPIOB_CLK_ENABLE();
255 __HAL_RCC_GPIOD_CLK_ENABLE();
256

Page 4
main.c Thursday, March 21, 2024, 4:46 PM

257 /*Configure GPIO pin Output Level */


258 HAL_GPIO_WritePin(GPIOB, LED2_Pin|LED3_Pin|LED1_Pin, GPIO_PIN_RESET);
259
260 /*Configure GPIO pin : SW1_Pin */
261 GPIO_InitStruct.Pin = SW1_Pin;
262 GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
263 GPIO_InitStruct.Pull = GPIO_PULLUP;
264 HAL_GPIO_Init(SW1_GPIO_Port, &GPIO_InitStruct);
265
266 /*Configure GPIO pins : LED2_Pin LED3_Pin LED1_Pin */
267 GPIO_InitStruct.Pin = LED2_Pin|LED3_Pin|LED1_Pin;
268 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
269 GPIO_InitStruct.Pull = GPIO_NOPULL;
270 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
271 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
272
273 /*Configure GPIO pins : SW2_Pin SW3_Pin */
274 GPIO_InitStruct.Pin = SW2_Pin|SW3_Pin;
275 GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
276 GPIO_InitStruct.Pull = GPIO_PULLUP;
277 HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
278
279 /* EXTI interrupt init*/
280 HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
281 HAL_NVIC_EnableIRQ(EXTI0_IRQn);
282
283 HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0);
284 HAL_NVIC_EnableIRQ(EXTI1_IRQn);
285
286 HAL_NVIC_SetPriority(EXTI4_IRQn, 0, 0);
287 HAL_NVIC_EnableIRQ(EXTI4_IRQn);
288
289 /* USER CODE BEGIN MX_GPIO_Init_2 */
290 /* USER CODE END MX_GPIO_Init_2 */
291 }
292
293 /* USER CODE BEGIN 4 */
294 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
295 {
296 if(GPIO_Pin==SW1_Pin)
297 {
298 SW1_stat=1;
299 SW1c_stat++;
300 }
301 if(GPIO_Pin==SW2_Pin)
302 {
303 if(SW1_stat==1)
304 {
305 Opt_stat=1;
306 }
307 SW2c_stat++;
308 SW1c_stat=0;
309 SW1_stat=0;
310 SW2_stat=1;
311 }
312 if(GPIO_Pin==SW3_Pin)
313 {
314 SW1c_stat=0;
315 SW2c_stat=0;
316 SW3_stat=1;
317 HAL_GPIO_WritePin(GPIOB, LED2_Pin|LED3_Pin|LED1_Pin, GPIO_PIN_RESET);
318 Opt_stat=0;
319 }
320 }

Page 5
main.c Thursday, March 21, 2024, 4:46 PM

321 /* USER CODE END 4 */


322
323 /**
324 * @brief This function is executed in case of error occurrence.
325 * @retval None
326 */
327 void Error_Handler(void)
328 {
329 /* USER CODE BEGIN Error_Handler_Debug */
330 /* User can add his own implementation to report the HAL error return state */
331 __disable_irq();
332 while (1)
333 {
334 }
335 /* USER CODE END Error_Handler_Debug */
336 }
337
338 #ifdef USE_FULL_ASSERT
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 #endif /* USE_FULL_ASSERT */
354

Page 6

You might also like