1 | /* USER CODE BEGIN Header */
|
2 | /**
|
3 | ******************************************************************************
|
4 | * @file : main.c
|
5 | * @brief : Main program body
|
6 | ******************************************************************************
|
7 | ** This notice applies to any and all portions of this file
|
8 | * that are not between comment pairs USER CODE BEGIN and
|
9 | * USER CODE END. Other portions of this file, whether
|
10 | * inserted by the user or by software development tools
|
11 | * are owned by their respective copyright owners.
|
12 | *
|
13 | * COPYRIGHT(c) 2019 STMicroelectronics
|
14 | *
|
15 | * Redistribution and use in source and binary forms, with or without modification,
|
16 | * are permitted provided that the following conditions are met:
|
17 | * 1. Redistributions of source code must retain the above copyright notice,
|
18 | * this list of conditions and the following disclaimer.
|
19 | * 2. Redistributions in binary form must reproduce the above copyright notice,
|
20 | * this list of conditions and the following disclaimer in the documentation
|
21 | * and/or other materials provided with the distribution.
|
22 | * 3. Neither the name of STMicroelectronics nor the names of its contributors
|
23 | * may be used to endorse or promote products derived from this software
|
24 | * without specific prior written permission.
|
25 | *
|
26 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
27 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
28 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
29 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
30 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
31 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
32 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
33 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
34 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
35 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
36 | *
|
37 | ******************************************************************************
|
38 | */
|
39 | /* USER CODE END Header */
|
40 |
|
41 | /* Includes ------------------------------------------------------------------*/
|
42 | #include "main.h"
|
43 |
|
44 | /* Private includes ----------------------------------------------------------*/
|
45 | /* USER CODE BEGIN Includes */
|
46 | #include "PCA9685.h"
|
47 | #include "MCP23S17.h"
|
48 | #include "nextion.h"
|
49 | #include "pwm.h"
|
50 | /* USER CODE END Includes */
|
51 |
|
52 | /* Private typedef -----------------------------------------------------------*/
|
53 | /* USER CODE BEGIN PTD */
|
54 |
|
55 | /* USER CODE END PTD */
|
56 |
|
57 | /* Private define ------------------------------------------------------------*/
|
58 | /* USER CODE BEGIN PD */
|
59 |
|
60 | /* USER CODE END PD */
|
61 |
|
62 | /* Private macro -------------------------------------------------------------*/
|
63 | /* USER CODE BEGIN PM */
|
64 |
|
65 | /* USER CODE END PM */
|
66 |
|
67 | /* Private variables ---------------------------------------------------------*/
|
68 | ADC_HandleTypeDef hadc1;
|
69 | ADC_HandleTypeDef hadc2;
|
70 |
|
71 | CAN_HandleTypeDef hcan;
|
72 |
|
73 | I2C_HandleTypeDef hi2c1;
|
74 |
|
75 | SPI_HandleTypeDef hspi1;
|
76 |
|
77 | TIM_HandleTypeDef htim3;
|
78 |
|
79 | UART_HandleTypeDef huart1;
|
80 | UART_HandleTypeDef huart2;
|
81 | UART_HandleTypeDef huart3;
|
82 |
|
83 | /* USER CODE BEGIN PV */
|
84 |
|
85 | /* USER CODE END PV */
|
86 |
|
87 | /* Private function prototypes -----------------------------------------------*/
|
88 | void SystemClock_Config(void);
|
89 | static void MX_GPIO_Init(void);
|
90 | static void MX_ADC1_Init(void);
|
91 | static void MX_ADC2_Init(void);
|
92 | static void MX_I2C1_Init(void);
|
93 | static void MX_SPI1_Init(void);
|
94 | static void MX_USART1_UART_Init(void);
|
95 | static void MX_USART2_UART_Init(void);
|
96 | static void MX_USART3_UART_Init(void);
|
97 | static void MX_CAN_Init(void);
|
98 | static void MX_TIM3_Init(void);
|
99 | /* USER CODE BEGIN PFP */
|
100 |
|
101 | /* USER CODE END PFP */
|
102 |
|
103 | /* Private user code ---------------------------------------------------------*/
|
104 | /* USER CODE BEGIN 0 */
|
105 |
|
106 | /* USER CODE END 0 */
|
107 |
|
108 | /**
|
109 | * @brief The application entry point.
|
110 | * @retval int
|
111 | */
|
112 | int main(void)
|
113 | {
|
114 | /* USER CODE BEGIN 1 */
|
115 |
|
116 | /* USER CODE END 1 */
|
117 |
|
118 | /* MCU Configuration--------------------------------------------------------*/
|
119 |
|
120 | /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
121 | HAL_Init();
|
122 |
|
123 | /* USER CODE BEGIN Init */
|
124 |
|
125 | /* USER CODE END Init */
|
126 |
|
127 | /* Configure the system clock */
|
128 | SystemClock_Config();
|
129 |
|
130 | /* USER CODE BEGIN SysInit */
|
131 |
|
132 | /* USER CODE END SysInit */
|
133 |
|
134 | /* Initialize all configured peripherals */
|
135 | MX_GPIO_Init();
|
136 | MX_ADC1_Init();
|
137 | MX_ADC2_Init();
|
138 | MX_I2C1_Init();
|
139 | MX_SPI1_Init();
|
140 | MX_USART1_UART_Init();
|
141 | MX_USART2_UART_Init();
|
142 | MX_USART3_UART_Init();
|
143 | MX_CAN_Init();
|
144 | MX_TIM3_Init();
|
145 | /* USER CODE BEGIN 2 */
|
146 | // HAL_GPIO_WritePin(GPIOA,CS_EXP_Pin,1);
|
147 |
|
148 | /* USER CODE END 2 */
|
149 |
|
150 | /* Infinite loop */
|
151 | /* USER CODE BEGIN WHILE */
|
152 | while (1)
|
153 | {
|
154 | uint8_t eins = 0xAA;
|
155 | HAL_GPIO_WritePin(GPIOA,CS_EXP_Pin,GPIO_PIN_RESET);
|
156 | HAL_SPI_Transmit(&hspi1, &eins, 1, 1);
|
157 | HAL_GPIO_WritePin(GPIOA,CS_EXP_Pin,GPIO_PIN_SET);
|
158 |
|
159 | HAL_Delay(1);
|
160 | /* USER CODE END WHILE */
|
161 |
|
162 | /* USER CODE BEGIN 3 */
|
163 | }
|
164 | /* USER CODE END 3 */
|
165 | }
|
166 |
|
167 | /**
|
168 | * @brief System Clock Configuration
|
169 | * @retval None
|
170 | */
|
171 | void SystemClock_Config(void)
|
172 | {
|
173 | RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
174 | RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
175 | RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
176 |
|
177 | /** Initializes the CPU, AHB and APB busses clocks
|
178 | */
|
179 | RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
180 | RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
181 | RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
|
182 | if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
183 | {
|
184 | Error_Handler();
|
185 | }
|
186 | /** Initializes the CPU, AHB and APB busses clocks
|
187 | */
|
188 | RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
189 | |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
190 | RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSE;
|
191 | RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
192 | RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
|
193 | RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
194 |
|
195 | if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
|
196 | {
|
197 | Error_Handler();
|
198 | }
|
199 | PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
|
200 | PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;
|
201 | if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
202 | {
|
203 | Error_Handler();
|
204 | }
|
205 | }
|
206 |
|
207 | /**
|
208 | * @brief ADC1 Initialization Function
|
209 | * @param None
|
210 | * @retval None
|
211 | */
|
212 | static void MX_ADC1_Init(void)
|
213 | {
|
214 |
|
215 | /* USER CODE BEGIN ADC1_Init 0 */
|
216 |
|
217 | /* USER CODE END ADC1_Init 0 */
|
218 |
|
219 | ADC_ChannelConfTypeDef sConfig = {0};
|
220 |
|
221 | /* USER CODE BEGIN ADC1_Init 1 */
|
222 |
|
223 | /* USER CODE END ADC1_Init 1 */
|
224 | /** Common config
|
225 | */
|
226 | hadc1.Instance = ADC1;
|
227 | hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
|
228 | hadc1.Init.ContinuousConvMode = DISABLE;
|
229 | hadc1.Init.DiscontinuousConvMode = DISABLE;
|
230 | hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
231 | hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
232 | hadc1.Init.NbrOfConversion = 1;
|
233 | if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
234 | {
|
235 | Error_Handler();
|
236 | }
|
237 | /** Configure Regular Channel
|
238 | */
|
239 | sConfig.Channel = ADC_CHANNEL_0;
|
240 | sConfig.Rank = ADC_REGULAR_RANK_1;
|
241 | sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
|
242 | if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
243 | {
|
244 | Error_Handler();
|
245 | }
|
246 | /* USER CODE BEGIN ADC1_Init 2 */
|
247 |
|
248 | /* USER CODE END ADC1_Init 2 */
|
249 |
|
250 | }
|
251 |
|
252 | /**
|
253 | * @brief ADC2 Initialization Function
|
254 | * @param None
|
255 | * @retval None
|
256 | */
|
257 | static void MX_ADC2_Init(void)
|
258 | {
|
259 |
|
260 | /* USER CODE BEGIN ADC2_Init 0 */
|
261 |
|
262 | /* USER CODE END ADC2_Init 0 */
|
263 |
|
264 | ADC_ChannelConfTypeDef sConfig = {0};
|
265 |
|
266 | /* USER CODE BEGIN ADC2_Init 1 */
|
267 |
|
268 | /* USER CODE END ADC2_Init 1 */
|
269 | /** Common config
|
270 | */
|
271 | hadc2.Instance = ADC2;
|
272 | hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE;
|
273 | hadc2.Init.ContinuousConvMode = DISABLE;
|
274 | hadc2.Init.DiscontinuousConvMode = DISABLE;
|
275 | hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
276 | hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
277 | hadc2.Init.NbrOfConversion = 1;
|
278 | if (HAL_ADC_Init(&hadc2) != HAL_OK)
|
279 | {
|
280 | Error_Handler();
|
281 | }
|
282 | /** Configure Regular Channel
|
283 | */
|
284 | sConfig.Channel = ADC_CHANNEL_1;
|
285 | sConfig.Rank = ADC_REGULAR_RANK_1;
|
286 | sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
|
287 | if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
|
288 | {
|
289 | Error_Handler();
|
290 | }
|
291 | /* USER CODE BEGIN ADC2_Init 2 */
|
292 |
|
293 | /* USER CODE END ADC2_Init 2 */
|
294 |
|
295 | }
|
296 |
|
297 | /**
|
298 | * @brief CAN Initialization Function
|
299 | * @param None
|
300 | * @retval None
|
301 | */
|
302 | static void MX_CAN_Init(void)
|
303 | {
|
304 |
|
305 | /* USER CODE BEGIN CAN_Init 0 */
|
306 |
|
307 | /* USER CODE END CAN_Init 0 */
|
308 |
|
309 | /* USER CODE BEGIN CAN_Init 1 */
|
310 |
|
311 | /* USER CODE END CAN_Init 1 */
|
312 | hcan.Instance = CAN1;
|
313 | hcan.Init.Prescaler = 16;
|
314 | hcan.Init.Mode = CAN_MODE_NORMAL;
|
315 | hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;
|
316 | hcan.Init.TimeSeg1 = CAN_BS1_1TQ;
|
317 | hcan.Init.TimeSeg2 = CAN_BS2_1TQ;
|
318 | hcan.Init.TimeTriggeredMode = DISABLE;
|
319 | hcan.Init.AutoBusOff = DISABLE;
|
320 | hcan.Init.AutoWakeUp = DISABLE;
|
321 | hcan.Init.AutoRetransmission = DISABLE;
|
322 | hcan.Init.ReceiveFifoLocked = DISABLE;
|
323 | hcan.Init.TransmitFifoPriority = DISABLE;
|
324 | if (HAL_CAN_Init(&hcan) != HAL_OK)
|
325 | {
|
326 | Error_Handler();
|
327 | }
|
328 | /* USER CODE BEGIN CAN_Init 2 */
|
329 |
|
330 | /* USER CODE END CAN_Init 2 */
|
331 |
|
332 | }
|
333 |
|
334 | /**
|
335 | * @brief I2C1 Initialization Function
|
336 | * @param None
|
337 | * @retval None
|
338 | */
|
339 | static void MX_I2C1_Init(void)
|
340 | {
|
341 |
|
342 | /* USER CODE BEGIN I2C1_Init 0 */
|
343 |
|
344 | /* USER CODE END I2C1_Init 0 */
|
345 |
|
346 | /* USER CODE BEGIN I2C1_Init 1 */
|
347 |
|
348 | /* USER CODE END I2C1_Init 1 */
|
349 | hi2c1.Instance = I2C1;
|
350 | hi2c1.Init.ClockSpeed = 100000;
|
351 | hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
|
352 | hi2c1.Init.OwnAddress1 = 0;
|
353 | hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
|
354 | hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
|
355 | hi2c1.Init.OwnAddress2 = 0;
|
356 | hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
|
357 | hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
|
358 | if (HAL_I2C_Init(&hi2c1) != HAL_OK)
|
359 | {
|
360 | Error_Handler();
|
361 | }
|
362 | /* USER CODE BEGIN I2C1_Init 2 */
|
363 |
|
364 | /* USER CODE END I2C1_Init 2 */
|
365 |
|
366 | }
|
367 |
|
368 | /**
|
369 | * @brief SPI1 Initialization Function
|
370 | * @param None
|
371 | * @retval None
|
372 | */
|
373 | static void MX_SPI1_Init(void)
|
374 | {
|
375 |
|
376 | /* USER CODE BEGIN SPI1_Init 0 */
|
377 |
|
378 | /* USER CODE END SPI1_Init 0 */
|
379 |
|
380 | /* USER CODE BEGIN SPI1_Init 1 */
|
381 |
|
382 | /* USER CODE END SPI1_Init 1 */
|
383 | /* SPI1 parameter configuration*/
|
384 | hspi1.Instance = SPI1;
|
385 | hspi1.Init.Mode = SPI_MODE_MASTER;
|
386 | hspi1.Init.Direction = SPI_DIRECTION_2LINES;
|
387 | hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
|
388 | hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
|
389 | hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
|
390 | hspi1.Init.NSS = SPI_NSS_SOFT;
|
391 | hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
|
392 | hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
393 | hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
|
394 | hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
395 | hspi1.Init.CRCPolynomial = 10;
|
396 | if (HAL_SPI_Init(&hspi1) != HAL_OK)
|
397 | {
|
398 | Error_Handler();
|
399 | }
|
400 | /* USER CODE BEGIN SPI1_Init 2 */
|
401 |
|
402 | /* USER CODE END SPI1_Init 2 */
|
403 |
|
404 | }
|
405 |
|
406 | /**
|
407 | * @brief TIM3 Initialization Function
|
408 | * @param None
|
409 | * @retval None
|
410 | */
|
411 | static void MX_TIM3_Init(void)
|
412 | {
|
413 |
|
414 | /* USER CODE BEGIN TIM3_Init 0 */
|
415 |
|
416 | /* USER CODE END TIM3_Init 0 */
|
417 |
|
418 | TIM_MasterConfigTypeDef sMasterConfig = {0};
|
419 | TIM_OC_InitTypeDef sConfigOC = {0};
|
420 |
|
421 | /* USER CODE BEGIN TIM3_Init 1 */
|
422 |
|
423 | /* USER CODE END TIM3_Init 1 */
|
424 | htim3.Instance = TIM3;
|
425 | htim3.Init.Prescaler = 100;
|
426 | htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
|
427 | htim3.Init.Period = 0;
|
428 | htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
429 | htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
430 | if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
|
431 | {
|
432 | Error_Handler();
|
433 | }
|
434 | sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
435 | sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
436 | if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
|
437 | {
|
438 | Error_Handler();
|
439 | }
|
440 | sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
441 | sConfigOC.Pulse = 0;
|
442 | sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
443 | sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
444 | if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
445 | {
|
446 | Error_Handler();
|
447 | }
|
448 | /* USER CODE BEGIN TIM3_Init 2 */
|
449 |
|
450 | /* USER CODE END TIM3_Init 2 */
|
451 | HAL_TIM_MspPostInit(&htim3);
|
452 |
|
453 | }
|
454 |
|
455 | /**
|
456 | * @brief USART1 Initialization Function
|
457 | * @param None
|
458 | * @retval None
|
459 | */
|
460 | static void MX_USART1_UART_Init(void)
|
461 | {
|
462 |
|
463 | /* USER CODE BEGIN USART1_Init 0 */
|
464 |
|
465 | /* USER CODE END USART1_Init 0 */
|
466 |
|
467 | /* USER CODE BEGIN USART1_Init 1 */
|
468 |
|
469 | /* USER CODE END USART1_Init 1 */
|
470 | huart1.Instance = USART1;
|
471 | huart1.Init.BaudRate = 9600;
|
472 | huart1.Init.WordLength = UART_WORDLENGTH_8B;
|
473 | huart1.Init.StopBits = UART_STOPBITS_1;
|
474 | huart1.Init.Parity = UART_PARITY_NONE;
|
475 | huart1.Init.Mode = UART_MODE_TX_RX;
|
476 | huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
477 | huart1.Init.OverSampling = UART_OVERSAMPLING_16;
|
478 | if (HAL_UART_Init(&huart1) != HAL_OK)
|
479 | {
|
480 | Error_Handler();
|
481 | }
|
482 | /* USER CODE BEGIN USART1_Init 2 */
|
483 |
|
484 | /* USER CODE END USART1_Init 2 */
|
485 |
|
486 | }
|
487 |
|
488 | /**
|
489 | * @brief USART2 Initialization Function
|
490 | * @param None
|
491 | * @retval None
|
492 | */
|
493 | static void MX_USART2_UART_Init(void)
|
494 | {
|
495 |
|
496 | /* USER CODE BEGIN USART2_Init 0 */
|
497 |
|
498 | /* USER CODE END USART2_Init 0 */
|
499 |
|
500 | /* USER CODE BEGIN USART2_Init 1 */
|
501 |
|
502 | /* USER CODE END USART2_Init 1 */
|
503 | huart2.Instance = USART2;
|
504 | huart2.Init.BaudRate = 115200;
|
505 | huart2.Init.WordLength = UART_WORDLENGTH_8B;
|
506 | huart2.Init.StopBits = UART_STOPBITS_1;
|
507 | huart2.Init.Parity = UART_PARITY_NONE;
|
508 | huart2.Init.Mode = UART_MODE_TX_RX;
|
509 | huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
510 | huart2.Init.OverSampling = UART_OVERSAMPLING_16;
|
511 | if (HAL_UART_Init(&huart2) != HAL_OK)
|
512 | {
|
513 | Error_Handler();
|
514 | }
|
515 | /* USER CODE BEGIN USART2_Init 2 */
|
516 |
|
517 | /* USER CODE END USART2_Init 2 */
|
518 |
|
519 | }
|
520 |
|
521 | /**
|
522 | * @brief USART3 Initialization Function
|
523 | * @param None
|
524 | * @retval None
|
525 | */
|
526 | static void MX_USART3_UART_Init(void)
|
527 | {
|
528 |
|
529 | /* USER CODE BEGIN USART3_Init 0 */
|
530 |
|
531 | /* USER CODE END USART3_Init 0 */
|
532 |
|
533 | /* USER CODE BEGIN USART3_Init 1 */
|
534 |
|
535 | /* USER CODE END USART3_Init 1 */
|
536 | huart3.Instance = USART3;
|
537 | huart3.Init.BaudRate = 115200;
|
538 | huart3.Init.WordLength = UART_WORDLENGTH_8B;
|
539 | huart3.Init.StopBits = UART_STOPBITS_1;
|
540 | huart3.Init.Parity = UART_PARITY_NONE;
|
541 | huart3.Init.Mode = UART_MODE_TX_RX;
|
542 | huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
543 | huart3.Init.OverSampling = UART_OVERSAMPLING_16;
|
544 | if (HAL_UART_Init(&huart3) != HAL_OK)
|
545 | {
|
546 | Error_Handler();
|
547 | }
|
548 | /* USER CODE BEGIN USART3_Init 2 */
|
549 |
|
550 | /* USER CODE END USART3_Init 2 */
|
551 |
|
552 | }
|
553 |
|
554 | /**
|
555 | * @brief GPIO Initialization Function
|
556 | * @param None
|
557 | * @retval None
|
558 | */
|
559 | static void MX_GPIO_Init(void)
|
560 | {
|
561 | GPIO_InitTypeDef GPIO_InitStruct = {0};
|
562 |
|
563 | /* GPIO Ports Clock Enable */
|
564 | __HAL_RCC_GPIOC_CLK_ENABLE();
|
565 | __HAL_RCC_GPIOD_CLK_ENABLE();
|
566 | __HAL_RCC_GPIOA_CLK_ENABLE();
|
567 | __HAL_RCC_GPIOB_CLK_ENABLE();
|
568 |
|
569 | /*Configure GPIO pin Output Level */
|
570 | HAL_GPIO_WritePin(GPIOB, WAKE_SW_Pin|CS_RFID_Pin|T_LED_Pin|SLEEP_Pin, GPIO_PIN_RESET);
|
571 |
|
572 | /*Configure GPIO pin Output Level */
|
573 | HAL_GPIO_WritePin(GPIOA, PWRKEY_Pin|GPIO_PIN_11|SWIDO_Pin|CS_EXP_Pin, GPIO_PIN_RESET);
|
574 |
|
575 | /*Configure GPIO pin : BT_CMD_Pin */
|
576 | GPIO_InitStruct.Pin = BT_CMD_Pin;
|
577 | GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
578 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
579 | HAL_GPIO_Init(BT_CMD_GPIO_Port, &GPIO_InitStruct);
|
580 |
|
581 | /*Configure GPIO pins : BT_IO1_Pin T_BUTTON_Pin */
|
582 | GPIO_InitStruct.Pin = BT_IO1_Pin|T_BUTTON_Pin;
|
583 | GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
584 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
585 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
586 |
|
587 | /*Configure GPIO pins : WAKE_SW_Pin CS_RFID_Pin T_LED_Pin SLEEP_Pin */
|
588 | GPIO_InitStruct.Pin = WAKE_SW_Pin|CS_RFID_Pin|T_LED_Pin|SLEEP_Pin;
|
589 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
590 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
591 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
592 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
593 |
|
594 | /*Configure GPIO pins : PWRKEY_Pin PA11 SWIDO_Pin CS_EXP_Pin */
|
595 | GPIO_InitStruct.Pin = PWRKEY_Pin|GPIO_PIN_11|SWIDO_Pin|CS_EXP_Pin;
|
596 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
597 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
598 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
599 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
600 |
|
601 | }
|
602 |
|
603 | /* USER CODE BEGIN 4 */
|
604 |
|
605 | /* USER CODE END 4 */
|
606 |
|
607 | /**
|
608 | * @brief This function is executed in case of error occurrence.
|
609 | * @retval None
|
610 | */
|
611 | void Error_Handler(void)
|
612 | {
|
613 | /* USER CODE BEGIN Error_Handler_Debug */
|
614 | /* User can add his own implementation to report the HAL error return state */
|
615 |
|
616 | /* USER CODE END Error_Handler_Debug */
|
617 | }
|
618 |
|
619 | #ifdef USE_FULL_ASSERT
|
620 | /**
|
621 | * @brief Reports the name of the source file and the source line number
|
622 | * where the assert_param error has occurred.
|
623 | * @param file: pointer to the source file name
|
624 | * @param line: assert_param error line source number
|
625 | * @retval None
|
626 | */
|
627 | void assert_failed(uint8_t *file, uint32_t line)
|
628 | {
|
629 | /* USER CODE BEGIN 6 */
|
630 | /* User can add his own implementation to report the file name and line number,
|
631 | tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
|
632 | /* USER CODE END 6 */
|
633 | }
|
634 | #endif /* USE_FULL_ASSERT */
|
635 |
|
636 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|