Subversion Repositories DashDisplay

Rev

Rev 50 | Rev 53 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 50 Rev 52
Line 1... Line 1...
1
/* USER CODE BEGIN Header */
1
/* USER CODE BEGIN Header */
2
/**
2
/**
3
  ******************************************************************************
3
 ******************************************************************************
4
  * @file           : main.c
4
 * @file           : main.c
5
  * @brief          : Main program body
5
 * @brief          : Main program body
6
  ******************************************************************************
6
 ******************************************************************************
7
  * @attention
7
 * @attention
8
  *
8
 *
9
  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
9
 * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
10
  * All rights reserved.</center></h2>
10
 * All rights reserved.</center></h2>
11
  *
11
 *
12
  * This software component is licensed by ST under BSD 3-Clause license,
12
 * This software component is licensed by ST under BSD 3-Clause license,
13
  * the "License"; You may not use this file except in compliance with the
13
 * the "License"; You may not use this file except in compliance with the
14
  * License. You may obtain a copy of the License at:
14
 * License. You may obtain a copy of the License at:
15
  *                        opensource.org/licenses/BSD-3-Clause
15
 *                        opensource.org/licenses/BSD-3-Clause
16
  *
16
 *
17
  ******************************************************************************
17
 ******************************************************************************
18
  */
18
 */
19
/* USER CODE END Header */
19
/* USER CODE END Header */
20
/* Includes ------------------------------------------------------------------*/
20
/* Includes ------------------------------------------------------------------*/
21
#include "main.h"
21
#include "main.h"
22
 
22
 
23
/* Private includes ----------------------------------------------------------*/
23
/* Private includes ----------------------------------------------------------*/
24
/* USER CODE BEGIN Includes */
24
/* USER CODE BEGIN Includes */
25
 
25
 
26
 
-
 
27
#include "libPLX/plx.h"
26
#include "libPLX/plx.h"
28
#include "libSerial/serial.H"
27
#include "libSerial/serial.H"
29
#include "libSmallPrintf/small_printf.h"
28
#include "libSmallPrintf/small_printf.h"
30
#include "switches.h"
29
#include "switches.h"
31
 
30
 
Line 62... Line 61...
62
context_t contexts[MAX_DISPLAYS];
61
context_t contexts[MAX_DISPLAYS];
63
 
62
 
64
/* timeout when the ignition is switched off */
63
/* timeout when the ignition is switched off */
65
#define IGNITION_OFF_TIMEOUT 30000UL
64
#define IGNITION_OFF_TIMEOUT 30000UL
66
 
65
 
67
 
-
 
-
 
66
#define LOGGER_INTERVAL 500UL
68
 
67
 
69
const int DialTimeout = 50; // about 20 seconds after twiddle, save the dial position.
68
const int DialTimeout = 50; // about 20 seconds after twiddle, save the dial position.
70
 
69
 
71
uint16_t dial_nvram[MAX_DISPLAYS] __attribute__((section(".NVRAM_Data")));
70
uint16_t dial_nvram[MAX_DISPLAYS] __attribute__((section(".NVRAM_Data")));
72
 
71
 
73
 
-
 
74
 
-
 
75
data_t Data;
72
data_t Data;
76
int Max[MAXRDG];
73
int Max[MAXRDG];
77
int Min[MAXRDG];
74
int Min[MAXRDG];
78
int PLXItems;
75
int PLXItems;
79
 
76
 
80
uint32_t Latch_Timer = IGNITION_OFF_TIMEOUT;
77
uint32_t Latch_Timer = IGNITION_OFF_TIMEOUT;
81
 
78
 
82
/* USER CODE END PV */
79
/* USER CODE END PV */
83
 
80
 
84
/* Private function prototypes -----------------------------------------------*/
81
/* Private function prototypes -----------------------------------------------*/
-
 
82
void
85
void SystemClock_Config(void);
83
SystemClock_Config (void);
-
 
84
static void
86
static void MX_GPIO_Init(void);
85
MX_GPIO_Init (void);
-
 
86
static void
87
static void MX_SPI1_Init(void);
87
MX_SPI1_Init (void);
-
 
88
static void
88
static void MX_USART1_UART_Init(void);
89
MX_USART1_UART_Init (void);
-
 
90
static void
89
static void MX_USART2_UART_Init(void);
91
MX_USART2_UART_Init (void);
-
 
92
static void
90
static void MX_USART3_UART_Init(void);
93
MX_USART3_UART_Init (void);
-
 
94
static void
91
static void MX_TIM3_Init(void);
95
MX_TIM3_Init (void);
-
 
96
static void
92
static void MX_TIM9_Init(void);
97
MX_TIM9_Init (void);
-
 
98
static void
93
static void MX_TIM2_Init(void);
99
MX_TIM2_Init (void);
94
/* USER CODE BEGIN PFP */
100
/* USER CODE BEGIN PFP */
95
 
101
 
96
// the dial is the switch number we are using.
102
// the dial is the switch number we are using.
97
// suppress is the ItemIndex we wish to suppress on this display
103
// suppress is the ItemIndex we wish to suppress on this display
-
 
104
int
98
int DisplayCurrent(int dial, int suppress)
105
DisplayCurrent (int dial, int suppress)
99
{
106
{
100
  if (PLXItems == 0)
107
  if (PLXItems == 0)
101
    return -1;
108
    return -1;
102
 
109
 
103
  int itemIndex = dial_pos[dial] % PLXItems;
110
  int itemIndex = dial_pos[dial] % PLXItems;
104
 
111
 
105
 
-
 
106
  return cc_display(dial, itemIndex, suppress);
112
  return cc_display (dial, itemIndex, suppress);
107
}
113
}
108
 
114
 
109
 
-
 
110
 
-
 
111
 
-
 
112
/* USER CODE END PFP */
115
/* USER CODE END PFP */
113
 
116
 
114
/* Private user code ---------------------------------------------------------*/
117
/* Private user code ---------------------------------------------------------*/
115
/* USER CODE BEGIN 0 */
118
/* USER CODE BEGIN 0 */
116
 
119
 
117
/* USER CODE END 0 */
120
/* USER CODE END 0 */
118
 
121
 
119
/**
122
/**
120
  * @brief  The application entry point.
123
 * @brief  The application entry point.
121
  * @retval int
124
 * @retval int
122
  */
125
 */
-
 
126
int
123
int main(void)
127
main (void)
124
{
128
{
125
  /* USER CODE BEGIN 1 */
129
  /* USER CODE BEGIN 1 */
126
  __HAL_RCC_SPI1_CLK_ENABLE()
130
  __HAL_RCC_SPI1_CLK_ENABLE()
127
  ;
131
  ;
128
  __HAL_RCC_USART1_CLK_ENABLE()
132
  __HAL_RCC_USART1_CLK_ENABLE()
Line 139... Line 143...
139
  /* USER CODE END 1 */
143
  /* USER CODE END 1 */
140
 
144
 
141
  /* MCU Configuration--------------------------------------------------------*/
145
  /* MCU Configuration--------------------------------------------------------*/
142
 
146
 
143
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
147
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
144
  HAL_Init();
148
  HAL_Init ();
145
 
149
 
146
  /* USER CODE BEGIN Init */
150
  /* USER CODE BEGIN Init */
147
 
151
 
148
  /* USER CODE END Init */
152
  /* USER CODE END Init */
149
 
153
 
150
  /* Configure the system clock */
154
  /* Configure the system clock */
151
  SystemClock_Config();
155
  SystemClock_Config ();
152
 
156
 
153
  /* USER CODE BEGIN SysInit */
157
  /* USER CODE BEGIN SysInit */
154
 
158
 
155
  /* USER CODE END SysInit */
159
  /* USER CODE END SysInit */
156
 
160
 
157
  /* Initialize all configured peripherals */
161
  /* Initialize all configured peripherals */
158
  MX_GPIO_Init();
162
  MX_GPIO_Init ();
159
  MX_SPI1_Init();
163
  MX_SPI1_Init ();
160
  MX_USART1_UART_Init();
164
  MX_USART1_UART_Init ();
161
  MX_USART2_UART_Init();
165
  MX_USART2_UART_Init ();
162
  MX_USART3_UART_Init();
166
  MX_USART3_UART_Init ();
163
  MX_TIM3_Init();
167
  MX_TIM3_Init ();
164
  MX_TIM9_Init();
168
  MX_TIM9_Init ();
165
  MX_TIM2_Init();
169
  MX_TIM2_Init ();
166
  /* USER CODE BEGIN 2 */
170
  /* USER CODE BEGIN 2 */
167
 
171
 
168
  /* Turn on USART1 IRQ */
172
  /* Turn on USART1 IRQ */
169
  HAL_NVIC_SetPriority(USART1_IRQn, 2, 0);
173
  HAL_NVIC_SetPriority (USART1_IRQn, 2, 0);
170
  HAL_NVIC_EnableIRQ(USART1_IRQn);
174
  HAL_NVIC_EnableIRQ (USART1_IRQn);
171
 
175
 
172
  /* Turn on USART2 IRQ  */
176
  /* Turn on USART2 IRQ  */
173
  HAL_NVIC_SetPriority(USART2_IRQn, 4, 0);
177
  HAL_NVIC_SetPriority (USART2_IRQn, 4, 0);
174
  HAL_NVIC_EnableIRQ(USART2_IRQn);
178
  HAL_NVIC_EnableIRQ (USART2_IRQn);
175
 
179
 
176
  /* turn on USART3 IRQ */
180
  /* turn on USART3 IRQ */
177
  HAL_NVIC_SetPriority(USART3_IRQn, 4, 0);
181
  HAL_NVIC_SetPriority (USART3_IRQn, 4, 0);
178
  HAL_NVIC_EnableIRQ(USART3_IRQn);
182
  HAL_NVIC_EnableIRQ (USART3_IRQn);
179
 
183
 
180
  /* setup the USART control blocks */
184
  /* setup the USART control blocks */
181
  init_usart_ctl(&uc1, huart1.Instance);
185
  init_usart_ctl (&uc1, huart1.Instance);
182
  init_usart_ctl(&uc2, huart2.Instance);
186
  init_usart_ctl (&uc2, huart2.Instance);
183
  init_usart_ctl(&uc3, huart3.Instance);
187
  init_usart_ctl (&uc3, huart3.Instance);
184
 
-
 
185
  EnableSerialRxInterrupt(&uc1);
-
 
186
  EnableSerialRxInterrupt(&uc2);
-
 
187
  EnableSerialRxInterrupt(&uc3);
-
 
188
 
188
 
-
 
189
  EnableSerialRxInterrupt (&uc1);
-
 
190
  EnableSerialRxInterrupt (&uc2);
189
  HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
191
  EnableSerialRxInterrupt (&uc3);
190
 
192
 
191
  HAL_TIM_Encoder_Start(&htim9, TIM_CHANNEL_ALL);
193
  HAL_TIM_Encoder_Start (&htim3, TIM_CHANNEL_ALL);
192
 
194
 
-
 
195
  HAL_TIM_Encoder_Start (&htim9, TIM_CHANNEL_ALL);
193
 
196
 
194
  // Switch handler called on sysTick interrupt.
197
  // Switch handler called on sysTick interrupt.
195
  InitSwitches();
198
  InitSwitches ();
196
 
199
 
197
  cc_init();
200
  cc_init ();
198
 
201
 
199
  int i;
202
  int i;
200
  for (i = 0; i < 2; i++)
203
  for (i = 0; i < 2; i++)
201
  {
204
    {
202
        dial_pos[i] = dial_nvram[i];
205
      dial_pos[i] = dial_nvram[i];
203
  }
206
    }
204
 
207
 
205
  /* reset the display timeout, latch on power from accessories */
208
  /* reset the display timeout, latch on power from accessories */
206
  Latch_Timer = IGNITION_OFF_TIMEOUT;
209
  Latch_Timer = IGNITION_OFF_TIMEOUT;
207
  HAL_GPIO_WritePin(POWER_LATCH_GPIO_Port, POWER_LATCH_Pin, GPIO_PIN_RESET);
210
  HAL_GPIO_WritePin (POWER_LATCH_GPIO_Port, POWER_LATCH_Pin, GPIO_PIN_RESET);
208
 
211
 
209
  /* USER CODE END 2 */
212
  /* USER CODE END 2 */
210
 
213
 
211
  /* Infinite loop */
214
  /* Infinite loop */
212
  /* USER CODE BEGIN WHILE */
215
  /* USER CODE BEGIN WHILE */
213
 while(1){
-
 
214
 
-
 
215
  /* while ignition is on, keep resetting power latch timer */
-
 
216
  if (HAL_GPIO_ReadPin(IGNITION_GPIO_Port, IGNITION_Pin) == GPIO_PIN_RESET)
-
 
217
  {
-
 
218
        Latch_Timer = HAL_GetTick() + IGNITION_OFF_TIMEOUT;
-
 
219
  }
-
 
220
  else
-
 
221
  {
-
 
222
        /* if the ignition has been off for a while, then turn off power */
-
 
223
        if (HAL_GetTick() > Latch_Timer)
-
 
224
        {
-
 
225
                HAL_GPIO_WritePin(POWER_LATCH_GPIO_Port, POWER_LATCH_Pin,
-
 
226
                                GPIO_PIN_RESET);
-
 
227
        }
-
 
228
  }
-
 
229
 
-
 
230
  uint32_t timeout = 0;  //
-
 
231
  // PLX decoder protocols
-
 
232
  char PLXPacket = 0;
-
 
233
  for (i = 0; i < MAXRDG; i++)
-
 
234
  {
-
 
235
        Max[i] = 0;
-
 
236
        Min[i] = 0xFFF; // 12 bit max value
-
 
237
  }
-
 
238
 
-
 
239
  int PLXPtr = 0;
-
 
240
 
-
 
241
  while (1)
216
  while (1)
242
  {
217
    {
243
  // Handle the bluetooth pairing function by pressing both buttons.
218
 
244
        if ((push_pos[0] == 1) && (push_pos[1] == 1))
219
      /* while ignition is on, keep resetting power latch timer */
245
        {
220
      if (HAL_GPIO_ReadPin (IGNITION_GPIO_Port, IGNITION_Pin) == GPIO_PIN_RESET)
246
                HAL_GPIO_WritePin(BT_BUTTON_GPIO_Port, BT_BUTTON_Pin, GPIO_PIN_SET);
221
        {
247
        }
222
          Latch_Timer = HAL_GetTick () + IGNITION_OFF_TIMEOUT;
248
        else
223
        }
249
        {
224
      else
250
                HAL_GPIO_WritePin(BT_BUTTON_GPIO_Port, BT_BUTTON_Pin, GPIO_PIN_RESET);
225
        {
251
        }
226
          /* if the ignition has been off for a while, then turn off power */
252
 
227
          if (HAL_GetTick () > Latch_Timer)
253
        uint16_t cc = SerialCharsReceived(&uc1);
228
            {
254
        int chr;
229
              HAL_GPIO_WritePin (POWER_LATCH_GPIO_Port, POWER_LATCH_Pin,
255
        if (cc == 0)
230
                                 GPIO_PIN_RESET);
256
        {
231
            }
257
                timeout++;
232
        }
258
                if (timeout % 1000 == 0)
233
 
259
                {
234
      uint32_t timeout = 0;  //
260
                        const char msg[] = "Timeout\r\n";
235
 
261
                        char * p = msg;
236
      uint32_t nextTick = HAL_GetTick () + LOGGER_INTERVAL;
262
                        while(*p)
237
      uint8_t log = 0;
263
                        {
238
      // PLX decoder protocols
264
                                PutCharSerial(&uc3,*p++);
239
      char PLXPacket = 0;
265
                        }
240
      for (i = 0; i < MAXRDG; i++)
266
 
241
        {
267
                }
242
          Max[i] = 0;
268
 
243
          Min[i] = 0xFFF; // 12 bit max value
269
                if (timeout > 60000)
244
        }
270
                {
245
 
271
 
246
      int PLXPtr = 0;
272
                    // do turn off screen
247
 
273
                }
248
      while (1)
274
 
249
        {
275
        }
250
          // Handle the bluetooth pairing function by pressing both buttons.
276
        for (chr = 0; chr < cc; chr++)
251
          if ((push_pos[0] == 1) && (push_pos[1] == 1))
277
        {
252
            {
278
                char c = GetCharSerial(&uc1);
253
              HAL_GPIO_WritePin (BT_BUTTON_GPIO_Port, BT_BUTTON_Pin,
279
 
254
                                 GPIO_PIN_RESET);
280
 
255
            }
281
                if (c == PLX_Start) // at any time if the start byte appears, reset the pointers
256
          else
282
                {
257
            {
283
                        PLXPtr = 0;    // reset the pointer
258
              HAL_GPIO_WritePin (BT_BUTTON_GPIO_Port, BT_BUTTON_Pin,
284
                        PLXPacket = 1;
259
                                 GPIO_PIN_SET);
285
                        timeout = 0;    // Reset the timer
260
            }
286
                }
261
 
287
                else if (c == PLX_Stop)
262
          uint16_t cc = SerialCharsReceived (&uc1);
288
                {
263
          int chr;
289
                        if (PLXPacket)
264
          if (cc == 0)
290
                        {
265
            {
291
                                // we can now decode the selected parameter
266
              timeout++;
292
                                PLXItems = PLXPtr / sizeof(PLX_SensorInfo); // total
267
              if (timeout % 1000 == 0)
293
                                // saturate the rotary switch position
268
                {
294
 
269
                  const char msg[] = "Timeout\r\n";
295
                                int DataVal;
270
                  char *p = msg;
296
                                // process min/max
271
                  while (*p)
297
                                for (i = 0; i < PLXItems; i++)
272
                    {
298
                                {
273
                      PutCharSerial (&uc3, *p++);
299
                                        // Send item to BT
274
                    }
300
                                        uint16_t addr = ConvPLX(Data.Sensor[i].AddrH,
275
 
301
                                                        Data.Sensor[i].AddrL);
276
                }
302
                                        uint8_t inst = Data.Sensor[i].Instance;
277
 
303
                                        uint16_t reading = ConvPLX(Data.Sensor[i].ReadingH,
278
              if (timeout > 60000)
304
                                                        Data.Sensor[i].ReadingL);
279
                {
305
 
280
 
306
                                        char outbuff[100];
281
                  // do turn off screen
307
                                        small_sprintf(outbuff, "%d,%d,%d\n\r", addr, inst,
282
                }
308
                                                        reading);
283
 
309
                                        int ck=0;
284
            }
310
                                        while(outbuff[ck] && ck < 100)
285
          for (chr = 0; chr < cc; chr++)
311
 
286
            {
312
                                        {
287
              char c = GetCharSerial (&uc1);
313
                                                PutCharSerial(&uc2, outbuff[ck++]);
288
 
314
                                        }
289
              if (c == PLX_Start) // at any time if the start byte appears, reset the pointers
315
                                        DataVal = ConvPLX(Data.Sensor[i].ReadingH,
290
                {
316
                                                        Data.Sensor[i].ReadingL);
291
                  PLXPtr = 0;    // reset the pointer
317
                                        if (DataVal > Max[i])
292
                  PLXPacket = 1;
318
                                        {
293
                  timeout = 0;    // Reset the timer
319
                                                Max[i] = DataVal;
294
                  if (HAL_GetTick () > nextTick)
320
                                        }
295
                    {
321
                                        if (DataVal < Min[i])
296
                      nextTick = HAL_GetTick () + LOGGER_INTERVAL;
322
                                        {
297
                      log = 1;
323
                                                Min[i] = DataVal;
298
                    }
324
                                        }
299
                  else
325
                                }
300
                    log = 0;
326
 
301
                }
327
                                // now to display the information
302
              else if (c == PLX_Stop)
328
                                int suppress = DisplayCurrent(0, -1);
303
                {
329
                                DisplayCurrent(1, suppress);
304
                  if (PLXPacket)
330
                        }
305
                    {
331
                        PLXPtr = 0;
306
                      // we can now decode the selected parameter
332
                        PLXPacket = 0;
307
                      PLXItems = PLXPtr / sizeof(PLX_SensorInfo); // total
333
                }
308
                      // saturate the rotary switch position
334
                else if (c > PLX_Stop) // illegal char, restart reading
309
 
335
                {
310
                      int DataVal;
336
                        PLXPacket = 0;
311
                      // process min/max
337
                        PLXPtr = 0;
312
                      for (i = 0; i < PLXItems; i++)
338
                }
313
                        {
339
                else if (PLXPacket && PLXPtr < sizeof(Data.Bytes))
314
                          // Send item to BT
340
                {
315
                          uint16_t addr = ConvPLX (Data.Sensor[i].AddrH,
341
                        Data.Bytes[PLXPtr++] = c;
316
                                                   Data.Sensor[i].AddrL);
342
                }
317
                          uint8_t inst = Data.Sensor[i].Instance;
343
 
318
                          uint16_t reading = ConvPLX (Data.Sensor[i].ReadingH,
344
        }
319
                                                      Data.Sensor[i].ReadingL);
-
 
320
 
-
 
321
                          if (log)
-
 
322
                            {
-
 
323
                              char outbuff[100];
-
 
324
 
-
 
325
                              int cnt = small_sprintf (outbuff, "$LOG%d,%d,%d", addr,
-
 
326
                                             inst, reading);
-
 
327
 
-
 
328
 
-
 
329
 
-
 
330
                              int ck;
-
 
331
                              int sum = 0;
-
 
332
                              for (ck=1 ; ck < cnt ; ck++)
-
 
333
                                sum += outbuff[ck];
-
 
334
                              cnt += small_sprintf(outbuff+cnt,"*%02X\n",sum & 0xFF);
-
 
335
                              for (ck = 0; ck <cnt; ck++)
-
 
336
                                PutCharSerial (&uc3, outbuff[ck]);
-
 
337
 
-
 
338
                            }
-
 
339
                          DataVal = ConvPLX (Data.Sensor[i].ReadingH,
-
 
340
                                             Data.Sensor[i].ReadingL);
-
 
341
                          if (DataVal > Max[i])
-
 
342
                            {
-
 
343
                              Max[i] = DataVal;
-
 
344
                            }
-
 
345
                          if (DataVal < Min[i])
-
 
346
                            {
-
 
347
                              Min[i] = DataVal;
-
 
348
                            }
-
 
349
                        }
-
 
350
 
-
 
351
                      // now to display the information
-
 
352
                      int suppress = DisplayCurrent (0, -1);
-
 
353
                      DisplayCurrent (1, suppress);
-
 
354
                    }
-
 
355
                  PLXPtr = 0;
-
 
356
                  PLXPacket = 0;
-
 
357
                }
-
 
358
              else if (c > PLX_Stop) // illegal char, restart reading
-
 
359
                {
-
 
360
                  PLXPacket = 0;
-
 
361
                  PLXPtr = 0;
-
 
362
                }
-
 
363
              else if (PLXPacket && PLXPtr < sizeof(Data.Bytes))
-
 
364
                {
-
 
365
                  Data.Bytes[PLXPtr++] = c;
-
 
366
                }
-
 
367
 
-
 
368
            }
345
 
369
 
346
        HAL_Delay(1);
370
          HAL_Delay (1);
347
  }
371
        }
348
 
372
 
349
    /* USER CODE END WHILE */
373
      /* USER CODE END WHILE */
350
 
374
 
351
    /* USER CODE BEGIN 3 */
375
      /* USER CODE BEGIN 3 */
352
  }
376
    }
353
  /* USER CODE END 3 */
377
  /* USER CODE END 3 */
354
}
378
}
355
 
379
 
356
/**
380
/**
357
  * @brief System Clock Configuration
381
 * @brief System Clock Configuration
358
  * @retval None
382
 * @retval None
359
  */
383
 */
-
 
384
void
360
void SystemClock_Config(void)
385
SystemClock_Config (void)
361
{
386
{
362
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
387
  RCC_OscInitTypeDef RCC_OscInitStruct =
-
 
388
    { 0 };
363
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
389
  RCC_ClkInitTypeDef RCC_ClkInitStruct =
-
 
390
    { 0 };
364
 
391
 
365
  /** Configure the main internal regulator output voltage
392
  /** Configure the main internal regulator output voltage
366
  */
393
   */
367
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
394
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
368
  /** Initializes the RCC Oscillators according to the specified parameters
395
  /** Initializes the RCC Oscillators according to the specified parameters
369
  * in the RCC_OscInitTypeDef structure.
396
   * in the RCC_OscInitTypeDef structure.
370
  */
397
   */
371
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
398
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
372
  RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
399
  RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
373
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
400
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
374
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
401
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
375
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;
402
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;
376
  RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV3;
403
  RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV3;
377
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
404
  if (HAL_RCC_OscConfig (&RCC_OscInitStruct) != HAL_OK)
378
  {
405
    {
379
    Error_Handler();
406
      Error_Handler ();
380
  }
407
    }
381
  /** Initializes the CPU, AHB and APB buses clocks
408
  /** Initializes the CPU, AHB and APB buses clocks
382
  */
409
   */
383
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
410
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
384
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
411
      | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
385
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
412
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
386
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
413
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
387
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
414
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
388
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
415
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
389
 
416
 
390
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
417
  if (HAL_RCC_ClockConfig (&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
391
  {
418
    {
392
    Error_Handler();
419
      Error_Handler ();
393
  }
420
    }
394
}
421
}
395
 
422
 
396
/**
423
/**
397
  * @brief SPI1 Initialization Function
424
 * @brief SPI1 Initialization Function
398
  * @param None
425
 * @param None
399
  * @retval None
426
 * @retval None
400
  */
427
 */
-
 
428
static void
401
static void MX_SPI1_Init(void)
429
MX_SPI1_Init (void)
402
{
430
{
403
 
431
 
404
  /* USER CODE BEGIN SPI1_Init 0 */
432
  /* USER CODE BEGIN SPI1_Init 0 */
405
 
433
 
406
  /* USER CODE END SPI1_Init 0 */
434
  /* USER CODE END SPI1_Init 0 */
Line 419... Line 447...
419
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
447
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
420
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
448
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
421
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
449
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
422
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
450
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
423
  hspi1.Init.CRCPolynomial = 10;
451
  hspi1.Init.CRCPolynomial = 10;
424
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
452
  if (HAL_SPI_Init (&hspi1) != HAL_OK)
425
  {
453
    {
426
    Error_Handler();
454
      Error_Handler ();
427
  }
455
    }
428
  /* USER CODE BEGIN SPI1_Init 2 */
456
  /* USER CODE BEGIN SPI1_Init 2 */
429
 
457
 
430
  /* USER CODE END SPI1_Init 2 */
458
  /* USER CODE END SPI1_Init 2 */
431
 
459
 
432
}
460
}
433
 
461
 
434
/**
462
/**
435
  * @brief TIM2 Initialization Function
463
 * @brief TIM2 Initialization Function
436
  * @param None
464
 * @param None
437
  * @retval None
465
 * @retval None
438
  */
466
 */
-
 
467
static void
439
static void MX_TIM2_Init(void)
468
MX_TIM2_Init (void)
440
{
469
{
441
 
470
 
442
  /* USER CODE BEGIN TIM2_Init 0 */
471
  /* USER CODE BEGIN TIM2_Init 0 */
443
 
472
 
444
  /* USER CODE END TIM2_Init 0 */
473
  /* USER CODE END TIM2_Init 0 */
445
 
474
 
446
  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
475
  TIM_ClockConfigTypeDef sClockSourceConfig =
-
 
476
    { 0 };
447
  TIM_MasterConfigTypeDef sMasterConfig = {0};
477
  TIM_MasterConfigTypeDef sMasterConfig =
-
 
478
    { 0 };
448
 
479
 
449
  /* USER CODE BEGIN TIM2_Init 1 */
480
  /* USER CODE BEGIN TIM2_Init 1 */
450
 
481
 
451
  /* USER CODE END TIM2_Init 1 */
482
  /* USER CODE END TIM2_Init 1 */
452
  htim2.Instance = TIM2;
483
  htim2.Instance = TIM2;
453
  htim2.Init.Prescaler = 0;
484
  htim2.Init.Prescaler = 0;
454
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
485
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
455
  htim2.Init.Period = 65535;
486
  htim2.Init.Period = 65535;
456
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
487
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
457
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
488
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
458
  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
489
  if (HAL_TIM_Base_Init (&htim2) != HAL_OK)
459
  {
490
    {
460
    Error_Handler();
491
      Error_Handler ();
461
  }
492
    }
462
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
493
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
463
  if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
494
  if (HAL_TIM_ConfigClockSource (&htim2, &sClockSourceConfig) != HAL_OK)
464
  {
495
    {
465
    Error_Handler();
496
      Error_Handler ();
466
  }
497
    }
467
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
498
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
468
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
499
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
469
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
500
  if (HAL_TIMEx_MasterConfigSynchronization (&htim2, &sMasterConfig) != HAL_OK)
470
  {
501
    {
471
    Error_Handler();
502
      Error_Handler ();
472
  }
503
    }
473
  /* USER CODE BEGIN TIM2_Init 2 */
504
  /* USER CODE BEGIN TIM2_Init 2 */
474
 
505
 
475
  /* USER CODE END TIM2_Init 2 */
506
  /* USER CODE END TIM2_Init 2 */
476
 
507
 
477
}
508
}
478
 
509
 
479
/**
510
/**
480
  * @brief TIM3 Initialization Function
511
 * @brief TIM3 Initialization Function
481
  * @param None
512
 * @param None
482
  * @retval None
513
 * @retval None
483
  */
514
 */
-
 
515
static void
484
static void MX_TIM3_Init(void)
516
MX_TIM3_Init (void)
485
{
517
{
486
 
518
 
487
  /* USER CODE BEGIN TIM3_Init 0 */
519
  /* USER CODE BEGIN TIM3_Init 0 */
488
 
520
 
489
  /* USER CODE END TIM3_Init 0 */
521
  /* USER CODE END TIM3_Init 0 */
490
 
522
 
491
  TIM_Encoder_InitTypeDef sConfig = {0};
523
  TIM_Encoder_InitTypeDef sConfig =
-
 
524
    { 0 };
492
  TIM_MasterConfigTypeDef sMasterConfig = {0};
525
  TIM_MasterConfigTypeDef sMasterConfig =
-
 
526
    { 0 };
493
 
527
 
494
  /* USER CODE BEGIN TIM3_Init 1 */
528
  /* USER CODE BEGIN TIM3_Init 1 */
495
 
529
 
496
  /* USER CODE END TIM3_Init 1 */
530
  /* USER CODE END TIM3_Init 1 */
497
  htim3.Instance = TIM3;
531
  htim3.Instance = TIM3;
Line 507... Line 541...
507
  sConfig.IC1Filter = 15;
541
  sConfig.IC1Filter = 15;
508
  sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
542
  sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
509
  sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
543
  sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
510
  sConfig.IC2Prescaler = TIM_ICPSC_DIV1;
544
  sConfig.IC2Prescaler = TIM_ICPSC_DIV1;
511
  sConfig.IC2Filter = 15;
545
  sConfig.IC2Filter = 15;
512
  if (HAL_TIM_Encoder_Init(&htim3, &sConfig) != HAL_OK)
546
  if (HAL_TIM_Encoder_Init (&htim3, &sConfig) != HAL_OK)
513
  {
547
    {
514
    Error_Handler();
548
      Error_Handler ();
515
  }
549
    }
516
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
550
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
517
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
551
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
518
  if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
552
  if (HAL_TIMEx_MasterConfigSynchronization (&htim3, &sMasterConfig) != HAL_OK)
519
  {
553
    {
520
    Error_Handler();
554
      Error_Handler ();
521
  }
555
    }
522
  /* USER CODE BEGIN TIM3_Init 2 */
556
  /* USER CODE BEGIN TIM3_Init 2 */
523
 
557
 
524
  /* USER CODE END TIM3_Init 2 */
558
  /* USER CODE END TIM3_Init 2 */
525
 
559
 
526
}
560
}
527
 
561
 
528
/**
562
/**
529
  * @brief TIM9 Initialization Function
563
 * @brief TIM9 Initialization Function
530
  * @param None
564
 * @param None
531
  * @retval None
565
 * @retval None
532
  */
566
 */
-
 
567
static void
533
static void MX_TIM9_Init(void)
568
MX_TIM9_Init (void)
534
{
569
{
535
 
570
 
536
  /* USER CODE BEGIN TIM9_Init 0 */
571
  /* USER CODE BEGIN TIM9_Init 0 */
537
 
572
 
538
  /* USER CODE END TIM9_Init 0 */
573
  /* USER CODE END TIM9_Init 0 */
539
 
574
 
540
  TIM_Encoder_InitTypeDef sConfig = {0};
575
  TIM_Encoder_InitTypeDef sConfig =
-
 
576
    { 0 };
541
  TIM_MasterConfigTypeDef sMasterConfig = {0};
577
  TIM_MasterConfigTypeDef sMasterConfig =
-
 
578
    { 0 };
542
 
579
 
543
  /* USER CODE BEGIN TIM9_Init 1 */
580
  /* USER CODE BEGIN TIM9_Init 1 */
544
 
581
 
545
  /* USER CODE END TIM9_Init 1 */
582
  /* USER CODE END TIM9_Init 1 */
546
  htim9.Instance = TIM9;
583
  htim9.Instance = TIM9;
Line 556... Line 593...
556
  sConfig.IC1Filter = 15;
593
  sConfig.IC1Filter = 15;
557
  sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
594
  sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
558
  sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
595
  sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
559
  sConfig.IC2Prescaler = TIM_ICPSC_DIV1;
596
  sConfig.IC2Prescaler = TIM_ICPSC_DIV1;
560
  sConfig.IC2Filter = 0;
597
  sConfig.IC2Filter = 0;
561
  if (HAL_TIM_Encoder_Init(&htim9, &sConfig) != HAL_OK)
598
  if (HAL_TIM_Encoder_Init (&htim9, &sConfig) != HAL_OK)
562
  {
599
    {
563
    Error_Handler();
600
      Error_Handler ();
564
  }
601
    }
565
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
602
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
566
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
603
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
567
  if (HAL_TIMEx_MasterConfigSynchronization(&htim9, &sMasterConfig) != HAL_OK)
604
  if (HAL_TIMEx_MasterConfigSynchronization (&htim9, &sMasterConfig) != HAL_OK)
568
  {
605
    {
569
    Error_Handler();
606
      Error_Handler ();
570
  }
607
    }
571
  /* USER CODE BEGIN TIM9_Init 2 */
608
  /* USER CODE BEGIN TIM9_Init 2 */
572
 
609
 
573
  /* USER CODE END TIM9_Init 2 */
610
  /* USER CODE END TIM9_Init 2 */
574
 
611
 
575
}
612
}
576
 
613
 
577
/**
614
/**
578
  * @brief USART1 Initialization Function
615
 * @brief USART1 Initialization Function
579
  * @param None
616
 * @param None
580
  * @retval None
617
 * @retval None
581
  */
618
 */
-
 
619
static void
582
static void MX_USART1_UART_Init(void)
620
MX_USART1_UART_Init (void)
583
{
621
{
584
 
622
 
585
  /* USER CODE BEGIN USART1_Init 0 */
623
  /* USER CODE BEGIN USART1_Init 0 */
586
 
624
 
587
  /* USER CODE END USART1_Init 0 */
625
  /* USER CODE END USART1_Init 0 */
Line 595... Line 633...
595
  huart1.Init.StopBits = UART_STOPBITS_1;
633
  huart1.Init.StopBits = UART_STOPBITS_1;
596
  huart1.Init.Parity = UART_PARITY_NONE;
634
  huart1.Init.Parity = UART_PARITY_NONE;
597
  huart1.Init.Mode = UART_MODE_TX_RX;
635
  huart1.Init.Mode = UART_MODE_TX_RX;
598
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
636
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
599
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
637
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
600
  if (HAL_UART_Init(&huart1) != HAL_OK)
638
  if (HAL_UART_Init (&huart1) != HAL_OK)
601
  {
639
    {
602
    Error_Handler();
640
      Error_Handler ();
603
  }
641
    }
604
  /* USER CODE BEGIN USART1_Init 2 */
642
  /* USER CODE BEGIN USART1_Init 2 */
605
 
643
 
606
  /* USER CODE END USART1_Init 2 */
644
  /* USER CODE END USART1_Init 2 */
607
 
645
 
608
}
646
}
609
 
647
 
610
/**
648
/**
611
  * @brief USART2 Initialization Function
649
 * @brief USART2 Initialization Function
612
  * @param None
650
 * @param None
613
  * @retval None
651
 * @retval None
614
  */
652
 */
-
 
653
static void
615
static void MX_USART2_UART_Init(void)
654
MX_USART2_UART_Init (void)
616
{
655
{
617
 
656
 
618
  /* USER CODE BEGIN USART2_Init 0 */
657
  /* USER CODE BEGIN USART2_Init 0 */
619
 
658
 
620
  /* USER CODE END USART2_Init 0 */
659
  /* USER CODE END USART2_Init 0 */
Line 628... Line 667...
628
  huart2.Init.StopBits = UART_STOPBITS_1;
667
  huart2.Init.StopBits = UART_STOPBITS_1;
629
  huart2.Init.Parity = UART_PARITY_NONE;
668
  huart2.Init.Parity = UART_PARITY_NONE;
630
  huart2.Init.Mode = UART_MODE_TX_RX;
669
  huart2.Init.Mode = UART_MODE_TX_RX;
631
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
670
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
632
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
671
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
633
  if (HAL_UART_Init(&huart2) != HAL_OK)
672
  if (HAL_UART_Init (&huart2) != HAL_OK)
634
  {
673
    {
635
    Error_Handler();
674
      Error_Handler ();
636
  }
675
    }
637
  /* USER CODE BEGIN USART2_Init 2 */
676
  /* USER CODE BEGIN USART2_Init 2 */
638
 
677
 
639
  /* USER CODE END USART2_Init 2 */
678
  /* USER CODE END USART2_Init 2 */
640
 
679
 
641
}
680
}
642
 
681
 
643
/**
682
/**
644
  * @brief USART3 Initialization Function
683
 * @brief USART3 Initialization Function
645
  * @param None
684
 * @param None
646
  * @retval None
685
 * @retval None
647
  */
686
 */
-
 
687
static void
648
static void MX_USART3_UART_Init(void)
688
MX_USART3_UART_Init (void)
649
{
689
{
650
 
690
 
651
  /* USER CODE BEGIN USART3_Init 0 */
691
  /* USER CODE BEGIN USART3_Init 0 */
652
 
692
 
653
  /* USER CODE END USART3_Init 0 */
693
  /* USER CODE END USART3_Init 0 */
654
 
694
 
655
  /* USER CODE BEGIN USART3_Init 1 */
695
  /* USER CODE BEGIN USART3_Init 1 */
656
 
696
 
657
  /* USER CODE END USART3_Init 1 */
697
  /* USER CODE END USART3_Init 1 */
658
  huart3.Instance = USART3;
698
  huart3.Instance = USART3;
659
  huart3.Init.BaudRate = 19200;
699
  huart3.Init.BaudRate = 9600;
660
  huart3.Init.WordLength = UART_WORDLENGTH_8B;
700
  huart3.Init.WordLength = UART_WORDLENGTH_8B;
661
  huart3.Init.StopBits = UART_STOPBITS_1;
701
  huart3.Init.StopBits = UART_STOPBITS_1;
662
  huart3.Init.Parity = UART_PARITY_NONE;
702
  huart3.Init.Parity = UART_PARITY_NONE;
663
  huart3.Init.Mode = UART_MODE_TX_RX;
703
  huart3.Init.Mode = UART_MODE_TX_RX;
664
  huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
704
  huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
665
  huart3.Init.OverSampling = UART_OVERSAMPLING_16;
705
  huart3.Init.OverSampling = UART_OVERSAMPLING_16;
666
  if (HAL_UART_Init(&huart3) != HAL_OK)
706
  if (HAL_UART_Init (&huart3) != HAL_OK)
667
  {
707
    {
668
    Error_Handler();
708
      Error_Handler ();
669
  }
709
    }
670
  /* USER CODE BEGIN USART3_Init 2 */
710
  /* USER CODE BEGIN USART3_Init 2 */
671
 
711
 
672
  /* USER CODE END USART3_Init 2 */
712
  /* USER CODE END USART3_Init 2 */
673
 
713
 
674
}
714
}
675
 
715
 
676
/**
716
/**
677
  * @brief GPIO Initialization Function
717
 * @brief GPIO Initialization Function
678
  * @param None
718
 * @param None
679
  * @retval None
719
 * @retval None
680
  */
720
 */
-
 
721
static void
681
static void MX_GPIO_Init(void)
722
MX_GPIO_Init (void)
682
{
723
{
683
  GPIO_InitTypeDef GPIO_InitStruct = {0};
724
  GPIO_InitTypeDef GPIO_InitStruct =
-
 
725
    { 0 };
684
 
726
 
685
  /* GPIO Ports Clock Enable */
727
  /* GPIO Ports Clock Enable */
686
  __HAL_RCC_GPIOH_CLK_ENABLE();
728
  __HAL_RCC_GPIOH_CLK_ENABLE();
687
  __HAL_RCC_GPIOA_CLK_ENABLE();
729
  __HAL_RCC_GPIOA_CLK_ENABLE();
688
  __HAL_RCC_GPIOC_CLK_ENABLE();
730
  __HAL_RCC_GPIOC_CLK_ENABLE();
689
  __HAL_RCC_GPIOB_CLK_ENABLE();
731
  __HAL_RCC_GPIOB_CLK_ENABLE();
690
 
732
 
691
  /*Configure GPIO pin Output Level */
733
  /*Configure GPIO pin Output Level */
692
  HAL_GPIO_WritePin(SPI_NSS1_GPIO_Port, SPI_NSS1_Pin, GPIO_PIN_SET);
734
  HAL_GPIO_WritePin (SPI_NSS1_GPIO_Port, SPI_NSS1_Pin, GPIO_PIN_SET);
693
 
735
 
694
  /*Configure GPIO pin Output Level */
736
  /*Configure GPIO pin Output Level */
695
  HAL_GPIO_WritePin(GPIOA, SPI_CD_Pin|BT_BUTTON_Pin, GPIO_PIN_RESET);
737
  HAL_GPIO_WritePin (GPIOA, SPI_CD_Pin | BT_BUTTON_Pin, GPIO_PIN_RESET);
696
 
738
 
697
  /*Configure GPIO pin Output Level */
739
  /*Configure GPIO pin Output Level */
698
  HAL_GPIO_WritePin(GPIOC, SPI_RESET_Pin|POWER_LATCH_Pin|USB_PWR_Pin, GPIO_PIN_RESET);
740
  HAL_GPIO_WritePin (GPIOC, SPI_RESET_Pin | POWER_LATCH_Pin | USB_PWR_Pin,
-
 
741
                     GPIO_PIN_RESET);
699
 
742
 
700
  /*Configure GPIO pin Output Level */
743
  /*Configure GPIO pin Output Level */
701
  HAL_GPIO_WritePin(SPI_NSS2_GPIO_Port, SPI_NSS2_Pin, GPIO_PIN_SET);
744
  HAL_GPIO_WritePin (SPI_NSS2_GPIO_Port, SPI_NSS2_Pin, GPIO_PIN_SET);
702
 
745
 
703
  /*Configure GPIO pins : SPI_NSS1_Pin SPI_CD_Pin */
746
  /*Configure GPIO pins : SPI_NSS1_Pin SPI_CD_Pin */
704
  GPIO_InitStruct.Pin = SPI_NSS1_Pin|SPI_CD_Pin;
747
  GPIO_InitStruct.Pin = SPI_NSS1_Pin | SPI_CD_Pin;
705
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
748
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
706
  GPIO_InitStruct.Pull = GPIO_NOPULL;
749
  GPIO_InitStruct.Pull = GPIO_NOPULL;
707
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
750
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
708
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
751
  HAL_GPIO_Init (GPIOA, &GPIO_InitStruct);
709
 
752
 
710
  /*Configure GPIO pins : SPI_RESET_Pin SPI_NSS2_Pin POWER_LATCH_Pin USB_PWR_Pin */
753
  /*Configure GPIO pins : SPI_RESET_Pin SPI_NSS2_Pin POWER_LATCH_Pin USB_PWR_Pin */
711
  GPIO_InitStruct.Pin = SPI_RESET_Pin|SPI_NSS2_Pin|POWER_LATCH_Pin|USB_PWR_Pin;
754
  GPIO_InitStruct.Pin = SPI_RESET_Pin | SPI_NSS2_Pin | POWER_LATCH_Pin
-
 
755
      | USB_PWR_Pin;
712
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
756
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
713
  GPIO_InitStruct.Pull = GPIO_NOPULL;
757
  GPIO_InitStruct.Pull = GPIO_NOPULL;
714
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
758
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
715
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
759
  HAL_GPIO_Init (GPIOC, &GPIO_InitStruct);
716
 
760
 
717
  /*Configure GPIO pins : SW1_PUSH_Pin SW2_PUSH_Pin */
761
  /*Configure GPIO pins : SW1_PUSH_Pin SW2_PUSH_Pin */
718
  GPIO_InitStruct.Pin = SW1_PUSH_Pin|SW2_PUSH_Pin;
762
  GPIO_InitStruct.Pin = SW1_PUSH_Pin | SW2_PUSH_Pin;
719
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
763
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
720
  GPIO_InitStruct.Pull = GPIO_PULLUP;
764
  GPIO_InitStruct.Pull = GPIO_PULLUP;
721
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
765
  HAL_GPIO_Init (GPIOB, &GPIO_InitStruct);
722
 
766
 
723
  /*Configure GPIO pin : IGNITION_Pin */
767
  /*Configure GPIO pin : IGNITION_Pin */
724
  GPIO_InitStruct.Pin = IGNITION_Pin;
768
  GPIO_InitStruct.Pin = IGNITION_Pin;
725
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
769
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
726
  GPIO_InitStruct.Pull = GPIO_NOPULL;
770
  GPIO_InitStruct.Pull = GPIO_NOPULL;
727
  HAL_GPIO_Init(IGNITION_GPIO_Port, &GPIO_InitStruct);
771
  HAL_GPIO_Init (IGNITION_GPIO_Port, &GPIO_InitStruct);
728
 
772
 
729
  /*Configure GPIO pin : BT_BUTTON_Pin */
773
  /*Configure GPIO pin : BT_BUTTON_Pin */
730
  GPIO_InitStruct.Pin = BT_BUTTON_Pin;
774
  GPIO_InitStruct.Pin = BT_BUTTON_Pin;
731
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
775
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
732
  GPIO_InitStruct.Pull = GPIO_NOPULL;
776
  GPIO_InitStruct.Pull = GPIO_NOPULL;
733
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
777
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
734
  HAL_GPIO_Init(BT_BUTTON_GPIO_Port, &GPIO_InitStruct);
778
  HAL_GPIO_Init (BT_BUTTON_GPIO_Port, &GPIO_InitStruct);
735
 
779
 
736
}
780
}
737
 
781
 
738
/* USER CODE BEGIN 4 */
782
/* USER CODE BEGIN 4 */
739
 
783
 
740
/* USER CODE END 4 */
784
/* USER CODE END 4 */
741
 
785
 
742
/**
786
/**
743
  * @brief  This function is executed in case of error occurrence.
787
 * @brief  This function is executed in case of error occurrence.
744
  * @retval None
788
 * @retval None
745
  */
789
 */
-
 
790
void
746
void Error_Handler(void)
791
Error_Handler (void)
747
{
792
{
748
  /* USER CODE BEGIN Error_Handler_Debug */
793
  /* USER CODE BEGIN Error_Handler_Debug */
749
  /* User can add his own implementation to report the HAL error return state */
794
  /* User can add his own implementation to report the HAL error return state */
750
 
795
 
751
  /* USER CODE END Error_Handler_Debug */
796
  /* USER CODE END Error_Handler_Debug */