Subversion Repositories DashDisplay

Rev

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

Rev 61 Rev 62
Line 26... Line 26...
26
#include "libPLX/plx.h"
26
#include "libPLX/plx.h"
27
#include "libSerial/serial.H"
27
#include "libSerial/serial.H"
28
#include "libSmallPrintf/small_printf.h"
28
#include "libSmallPrintf/small_printf.h"
29
#include "libNMEA/nmea.h"
29
#include "libNMEA/nmea.h"
30
#include "switches.h"
30
#include "switches.h"
-
 
31
#include<string.h>
31
 
32
 
32
/* USER CODE END Includes */
33
/* USER CODE END Includes */
33
 
34
 
34
/* Private typedef -----------------------------------------------------------*/
35
/* Private typedef -----------------------------------------------------------*/
35
/* USER CODE BEGIN PTD */
36
/* USER CODE BEGIN PTD */
Line 44... Line 45...
44
/* USER CODE BEGIN PM */
45
/* USER CODE BEGIN PM */
45
 
46
 
46
/* USER CODE END PM */
47
/* USER CODE END PM */
47
 
48
 
48
/* Private variables ---------------------------------------------------------*/
49
/* Private variables ---------------------------------------------------------*/
49
 SPI_HandleTypeDef hspi1;
50
SPI_HandleTypeDef hspi1;
50
 
51
 
51
TIM_HandleTypeDef htim2;
52
TIM_HandleTypeDef htim2;
52
TIM_HandleTypeDef htim3;
53
TIM_HandleTypeDef htim3;
53
TIM_HandleTypeDef htim9;
54
TIM_HandleTypeDef htim9;
54
 
55
 
Line 63... Line 64...
63
context_t contexts[MAX_DISPLAYS];
64
context_t contexts[MAX_DISPLAYS];
64
 
65
 
65
/* timeout when the ignition is switched off */
66
/* timeout when the ignition is switched off */
66
#define IGNITION_OFF_TIMEOUT 30000UL
67
#define IGNITION_OFF_TIMEOUT 30000UL
67
 
68
 
-
 
69
// 500mS per logger period. 
68
#define LOGGER_INTERVAL 500UL
70
#define LOGGER_INTERVAL 500UL
69
 
71
 
70
const int DialTimeout = 10000; // about 10 seconds after twiddle, save the dial position.
72
const int DialTimeout = 10000; // about 10 seconds after twiddle, save the dial position.
71
 
73
 
72
nvram_info_t dial_nvram[MAX_DISPLAYS] __attribute__((section(".NVRAM_Data")));
74
nvram_info_t dial_nvram[MAX_DISPLAYS] __attribute__((section(".NVRAM_Data")));
Line 113... Line 115...
113
{
115
{
114
  char initBuf[30];
116
  char initBuf[30];
115
  // switch to command mode
117
  // switch to command mode
116
  HAL_GPIO_WritePin(BT_BUTTON_GPIO_Port, BT_BUTTON_Pin, GPIO_PIN_RESET);
118
  HAL_GPIO_WritePin(BT_BUTTON_GPIO_Port, BT_BUTTON_Pin, GPIO_PIN_RESET);
117
  HAL_Delay(500);
119
  HAL_Delay(500);
118
  int initLen = small_sprintf(initBuf, "AT+UART=%ul,1,2\n", baudRate);
120
  int initLen = small_sprintf(initBuf, "AT+UART=%lu,1,2\n", baudRate);
119
  setBaud(ctl, 38400);
121
  setBaud(ctl, 38400);
120
  sendString(ctl, initBuf, initLen);
122
  sendString(ctl, initBuf, initLen);
121
  TxWaitEmpty(ctl);
123
  TxWaitEmpty(ctl);
122
  // switch back to normal comms at new baud rate
124
  // switch back to normal comms at new baud rate
123
 
125
 
Line 126... Line 128...
126
  HAL_Delay(100);
128
  HAL_Delay(100);
127
}
129
}
128
 
130
 
129
// workspace for RMC data read from GPS module.
131
// workspace for RMC data read from GPS module.
130
uint8_t rmc_buff[80];
132
uint8_t rmc_buff[80];
131
uint16_t rmc_length;
133
volatile uint16_t rmc_length;
132
 
134
 
133
uint8_t rmc_callback(uint8_t *data, uint16_t length)
135
uint8_t rmc_callback(uint8_t *data, uint16_t length)
134
{
136
{
135
  rmc_length = length<sizeof(rmc_buff)?length : sizeof(rmc_buff);
137
  rmc_length = length < sizeof(rmc_buff) ? length : sizeof(rmc_buff);
136
  memcpy(rmc_buff, data, length);
138
  memcpy(rmc_buff, data, length);
137
  return 0;
139
  return 0;
138
 
-
 
139
}
140
}
140
 
141
 
141
/* USER CODE END PFP */
142
/* USER CODE END PFP */
142
 
143
 
143
/* Private user code ---------------------------------------------------------*/
144
/* Private user code ---------------------------------------------------------*/
144
/* USER CODE BEGIN 0 */
145
/* USER CODE BEGIN 0 */
145
 
146
 
146
/* USER CODE END 0 */
147
/* USER CODE END 0 */
147
 
148
 
148
/**
149
/**
149
  * @brief  The application entry point.
150
 * @brief  The application entry point.
150
  * @retval int
151
 * @retval int
151
  */
152
 */
152
int main(void)
153
int main(void)
153
{
154
{
154
  /* USER CODE BEGIN 1 */
155
  /* USER CODE BEGIN 1 */
155
  __HAL_RCC_SPI1_CLK_ENABLE();
156
  __HAL_RCC_SPI1_CLK_ENABLE();
156
  __HAL_RCC_USART1_CLK_ENABLE(); // PLX main port
157
  __HAL_RCC_USART1_CLK_ENABLE(); // PLX main port
Line 270... Line 271...
270
      }
271
      }
271
    }
272
    }
272
 
273
 
273
    uint32_t timeout = 0; //
274
    uint32_t timeout = 0; //
274
 
275
 
275
    uint32_t nextTick = HAL_GetTick() + LOGGER_INTERVAL;
276
    uint32_t nextTick = 0;
276
    uint8_t log = 0;
277
    uint8_t log = 0;
-
 
278
    uint8_t logCount = 1000 / LOGGER_INTERVAL;
277
    // PLX decoder protocols
279
    // PLX decoder protocols
278
    char PLXPacket = 0;
280
    char PLXPacket = 0;
279
    for (i = 0; i < MAXRDG; i++)
281
    for (i = 0; i < MAXRDG; i++)
280
    {
282
    {
281
      Info[i].Max = 0;
283
      Info[i].Max = 0;
282
      Info[i].Min = 0xFFF; // 12 bit max value
284
      Info[i].Min = 0xFFF; // 12 bit max value
-
 
285
      Info[i].sum = 0; // 
-
 
286
      Info[i].count=0;
283
    }
287
    }
284
 
288
 
285
    int PLXPtr = 0;
289
    int PLXPtr = 0;
286
 
290
 
287
    while (1)
291
    while (1)
288
    {
292
    {
289
 
293
 
290
      // poll GPS Position/time on UART4
294
      // poll GPS Position/time on UART4
291
      (void) updateLocation(&loc, &uc4);
295
      (void)updateLocation(&loc, &uc4);
292
      if (loc.good)
-
 
293
      {
-
 
294
 
-
 
295
        loc.good = false;
-
 
296
      }
-
 
297
      if (loc.valid == 'V')
296
      if (loc.valid == 'V')
298
        memset(loc.time, '-', 6);
297
        memset(loc.time, '-', 6);
299
 
298
 
-
 
299
      // if permitted, log data from RMC packet
-
 
300
      if (rmc_length && HAL_GPIO_ReadPin(BT_STATE_GPIO_Port, BT_STATE_Pin) == GPIO_PIN_SET)
-
 
301
      {
-
 
302
        sendString(&uc3, rmc_buff, rmc_length);
-
 
303
        rmc_length = 0;
-
 
304
        nextTick = HAL_GetTick() + LOGGER_INTERVAL;
-
 
305
        logCount = 0;
-
 
306
        log = 1;
-
 
307
      }
-
 
308
   
-
 
309
      // time several counted logger intervals after RMC recieved, enable logger each timeout.
-
 
310
      if (logCount < ((1000 / LOGGER_INTERVAL)-1) && HAL_GetTick() > nextTick)
-
 
311
      {
-
 
312
        nextTick = HAL_GetTick() + LOGGER_INTERVAL;
-
 
313
        ++logCount;
-
 
314
        log = 1;
-
 
315
      }
-
 
316
 
300
      // Handle the bluetooth pairing / reset function by pressing both buttons.
317
      // Handle the bluetooth pairing / reset function by pressing both buttons.
301
      if ((push_pos[0] == 1) && (push_pos[1] == 1))
318
      if ((push_pos[0] == 1) && (push_pos[1] == 1))
302
      {
319
      {
303
        HAL_GPIO_WritePin(BT_BUTTON_GPIO_Port, BT_BUTTON_Pin,
320
        HAL_GPIO_WritePin(BT_BUTTON_GPIO_Port, BT_BUTTON_Pin,
304
                          GPIO_PIN_RESET);
321
                          GPIO_PIN_RESET);
Line 324... Line 341...
324
        {
341
        {
325
 
342
 
326
          // do turn off screen
343
          // do turn off screen
327
        }
344
        }
328
      }
345
      }
-
 
346
 
-
 
347
 
329
      for (chr = 0; chr < cc; chr++)
348
      for (chr = 0; chr < cc; chr++)
330
      {
349
      {
331
        char c = GetCharSerial(&uc1);
350
        char c = GetCharSerial(&uc1);
332
 
351
 
333
        if (c == PLX_Start) // at any time if the start byte appears, reset the pointers
352
        if (c == PLX_Start) // at any time if the start byte appears, reset the pointers
334
        {
353
        {
335
          PLXPtr = 0; // reset the pointer
354
          PLXPtr = 0; // reset the pointer
336
          PLXPacket = 1;
355
          PLXPacket = 1;
337
          timeout = 0; // Reset the timer
356
          timeout = 0; // Reset the timer
338
          if (HAL_GetTick() > nextTick)
-
 
339
          {
-
 
340
            nextTick = HAL_GetTick() + LOGGER_INTERVAL;
-
 
341
            log = 1;
-
 
342
          }
-
 
343
          else
-
 
344
            log = 0;
-
 
345
        }
357
        }
346
        else if (c == PLX_Stop)
358
        else if (c == PLX_Stop)
347
        {
359
        {
348
          if (PLXPacket)
360
          if (PLXPacket)
349
          {
361
          {
Line 365... Line 377...
365
              }
377
              }
366
              if (Info[i].data < Info[i].Min)
378
              if (Info[i].data < Info[i].Min)
367
              {
379
              {
368
                Info[i].Min = Info[i].data;
380
                Info[i].Min = Info[i].data;
369
              }
381
              }
-
 
382
  // take an avarage 
-
 
383
              Info[i].sum += Info[i].data;
-
 
384
              Info[i].count ++;
370
 
385
 
371
              // Send items  to BT if it is in connected state 
386
              // Send items  to BT if it is in connected state
372
              if (HAL_GPIO_ReadPin(BT_STATE_GPIO_Port, BT_STATE_Pin) == GPIO_PIN_SET)
387
              if (log && HAL_GPIO_ReadPin(BT_STATE_GPIO_Port, BT_STATE_Pin) == GPIO_PIN_SET)
373
              {
388
              {
374
                if (rmc_length)
-
 
375
                {
-
 
376
                  sendString(&uc3, rmc_buff, rmc_length);
-
 
377
                  rmc_length = 0;
-
 
378
                }
-
 
379
 
389
 
380
                if (log)
-
 
381
                {
-
 
382
 
-
 
383
                  char outbuff[100];
390
                char outbuff[100];
384
 
391
 
385
                  int cnt = small_sprintf(outbuff,
392
                int cnt = small_sprintf(outbuff,
386
                                          "$PLLOG,%d,%d,%d",
393
                                        "$PLLOG,%d,%d,%d,%ld",
-
 
394
                                        logCount,
387
                                          Info[i].observation,
395
                                        Info[i].observation,
388
                                          Info[i].instance,
396
                                        Info[i].instance,
389
                                          Info[i].data);
397
                                        Info[i].count==0? 0: Info[i].sum/Info[i].count);
390
 
398
 
391
                  // NMEA style checksum
399
                // NMEA style checksum
392
                  int ck;
400
                int ck;
393
                  int sum = 0;
401
                int sum = 0;
394
                  for (ck = 1; ck < cnt; ck++)
402
                for (ck = 1; ck < cnt; ck++)
395
                    sum += outbuff[ck];
403
                  sum += outbuff[ck];
396
                  cnt += small_sprintf(outbuff + cnt, "*%02X\n",
404
                cnt += small_sprintf(outbuff + cnt, "*%02X\n",
397
                                       sum & 0xFF);
405
                                     sum & 0xFF);
398
                  sendString(&uc3, outbuff, cnt);
406
                sendString(&uc3, outbuff, cnt);
399
                }
-
 
400
              }
407
              }
401
            }
408
            }
402
 
-
 
-
 
409
            log = 0;
403
            // now to display the information
410
             // now to display the information
404
            int suppress = DisplayCurrent(0, -1);
411
            int suppress = DisplayCurrent(0, -1);
405
            DisplayCurrent(1, suppress);
412
            DisplayCurrent(1, suppress);
406
          }
413
          }
407
          PLXPtr = 0;
414
          PLXPtr = 0;
408
          PLXPacket = 0;
415
          PLXPacket = 0;
Line 445... Line 452...
445
  }
452
  }
446
  /* USER CODE END 3 */
453
  /* USER CODE END 3 */
447
}
454
}
448
 
455
 
449
/**
456
/**
450
  * @brief System Clock Configuration
457
 * @brief System Clock Configuration
451
  * @retval None
458
 * @retval None
452
  */
459
 */
453
void SystemClock_Config(void)
460
void SystemClock_Config(void)
454
{
461
{
455
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
462
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
456
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
463
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
457
 
464
 
458
  /** Configure the main internal regulator output voltage
465
  /** Configure the main internal regulator output voltage
459
  */
466
   */
460
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
467
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
461
 
468
 
462
  /** Initializes the RCC Oscillators according to the specified parameters
469
  /** Initializes the RCC Oscillators according to the specified parameters
463
  * in the RCC_OscInitTypeDef structure.
470
   * in the RCC_OscInitTypeDef structure.
464
  */
471
   */
465
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
472
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
466
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
473
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
467
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
474
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
468
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
475
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
469
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;
476
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;
Line 472... Line 479...
472
  {
479
  {
473
    Error_Handler();
480
    Error_Handler();
474
  }
481
  }
475
 
482
 
476
  /** Initializes the CPU, AHB and APB buses clocks
483
  /** Initializes the CPU, AHB and APB buses clocks
477
  */
484
   */
478
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
485
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
479
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
-
 
480
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
486
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
481
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
487
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
482
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
488
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
483
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
489
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
484
 
490
 
Line 487... Line 493...
487
    Error_Handler();
493
    Error_Handler();
488
  }
494
  }
489
}
495
}
490
 
496
 
491
/**
497
/**
492
  * @brief SPI1 Initialization Function
498
 * @brief SPI1 Initialization Function
493
  * @param None
499
 * @param None
494
  * @retval None
500
 * @retval None
495
  */
501
 */
496
static void MX_SPI1_Init(void)
502
static void MX_SPI1_Init(void)
497
{
503
{
498
 
504
 
499
  /* USER CODE BEGIN SPI1_Init 0 */
505
  /* USER CODE BEGIN SPI1_Init 0 */
500
 
506
 
Line 521... Line 527...
521
    Error_Handler();
527
    Error_Handler();
522
  }
528
  }
523
  /* USER CODE BEGIN SPI1_Init 2 */
529
  /* USER CODE BEGIN SPI1_Init 2 */
524
 
530
 
525
  /* USER CODE END SPI1_Init 2 */
531
  /* USER CODE END SPI1_Init 2 */
526
 
-
 
527
}
532
}
528
 
533
 
529
/**
534
/**
530
  * @brief TIM2 Initialization Function
535
 * @brief TIM2 Initialization Function
531
  * @param None
536
 * @param None
532
  * @retval None
537
 * @retval None
533
  */
538
 */
534
static void MX_TIM2_Init(void)
539
static void MX_TIM2_Init(void)
535
{
540
{
536
 
541
 
537
  /* USER CODE BEGIN TIM2_Init 0 */
542
  /* USER CODE BEGIN TIM2_Init 0 */
538
 
543
 
Line 566... Line 571...
566
    Error_Handler();
571
    Error_Handler();
567
  }
572
  }
568
  /* USER CODE BEGIN TIM2_Init 2 */
573
  /* USER CODE BEGIN TIM2_Init 2 */
569
 
574
 
570
  /* USER CODE END TIM2_Init 2 */
575
  /* USER CODE END TIM2_Init 2 */
571
 
-
 
572
}
576
}
573
 
577
 
574
/**
578
/**
575
  * @brief TIM3 Initialization Function
579
 * @brief TIM3 Initialization Function
576
  * @param None
580
 * @param None
577
  * @retval None
581
 * @retval None
578
  */
582
 */
579
static void MX_TIM3_Init(void)
583
static void MX_TIM3_Init(void)
580
{
584
{
581
 
585
 
582
  /* USER CODE BEGIN TIM3_Init 0 */
586
  /* USER CODE BEGIN TIM3_Init 0 */
583
 
587
 
Line 615... Line 619...
615
    Error_Handler();
619
    Error_Handler();
616
  }
620
  }
617
  /* USER CODE BEGIN TIM3_Init 2 */
621
  /* USER CODE BEGIN TIM3_Init 2 */
618
 
622
 
619
  /* USER CODE END TIM3_Init 2 */
623
  /* USER CODE END TIM3_Init 2 */
620
 
-
 
621
}
624
}
622
 
625
 
623
/**
626
/**
624
  * @brief TIM9 Initialization Function
627
 * @brief TIM9 Initialization Function
625
  * @param None
628
 * @param None
626
  * @retval None
629
 * @retval None
627
  */
630
 */
628
static void MX_TIM9_Init(void)
631
static void MX_TIM9_Init(void)
629
{
632
{
630
 
633
 
631
  /* USER CODE BEGIN TIM9_Init 0 */
634
  /* USER CODE BEGIN TIM9_Init 0 */
632
 
635
 
Line 664... Line 667...
664
    Error_Handler();
667
    Error_Handler();
665
  }
668
  }
666
  /* USER CODE BEGIN TIM9_Init 2 */
669
  /* USER CODE BEGIN TIM9_Init 2 */
667
 
670
 
668
  /* USER CODE END TIM9_Init 2 */
671
  /* USER CODE END TIM9_Init 2 */
669
 
-
 
670
}
672
}
671
 
673
 
672
/**
674
/**
673
  * @brief UART4 Initialization Function
675
 * @brief UART4 Initialization Function
674
  * @param None
676
 * @param None
675
  * @retval None
677
 * @retval None
676
  */
678
 */
677
static void MX_UART4_Init(void)
679
static void MX_UART4_Init(void)
678
{
680
{
679
 
681
 
680
  /* USER CODE BEGIN UART4_Init 0 */
682
  /* USER CODE BEGIN UART4_Init 0 */
681
 
683
 
Line 697... Line 699...
697
    Error_Handler();
699
    Error_Handler();
698
  }
700
  }
699
  /* USER CODE BEGIN UART4_Init 2 */
701
  /* USER CODE BEGIN UART4_Init 2 */
700
 
702
 
701
  /* USER CODE END UART4_Init 2 */
703
  /* USER CODE END UART4_Init 2 */
702
 
-
 
703
}
704
}
704
 
705
 
705
/**
706
/**
706
  * @brief USART1 Initialization Function
707
 * @brief USART1 Initialization Function
707
  * @param None
708
 * @param None
708
  * @retval None
709
 * @retval None
709
  */
710
 */
710
static void MX_USART1_UART_Init(void)
711
static void MX_USART1_UART_Init(void)
711
{
712
{
712
 
713
 
713
  /* USER CODE BEGIN USART1_Init 0 */
714
  /* USER CODE BEGIN USART1_Init 0 */
714
 
715
 
Line 730... Line 731...
730
    Error_Handler();
731
    Error_Handler();
731
  }
732
  }
732
  /* USER CODE BEGIN USART1_Init 2 */
733
  /* USER CODE BEGIN USART1_Init 2 */
733
 
734
 
734
  /* USER CODE END USART1_Init 2 */
735
  /* USER CODE END USART1_Init 2 */
735
 
-
 
736
}
736
}
737
 
737
 
738
/**
738
/**
739
  * @brief USART2 Initialization Function
739
 * @brief USART2 Initialization Function
740
  * @param None
740
 * @param None
741
  * @retval None
741
 * @retval None
742
  */
742
 */
743
static void MX_USART2_UART_Init(void)
743
static void MX_USART2_UART_Init(void)
744
{
744
{
745
 
745
 
746
  /* USER CODE BEGIN USART2_Init 0 */
746
  /* USER CODE BEGIN USART2_Init 0 */
747
 
747
 
Line 763... Line 763...
763
    Error_Handler();
763
    Error_Handler();
764
  }
764
  }
765
  /* USER CODE BEGIN USART2_Init 2 */
765
  /* USER CODE BEGIN USART2_Init 2 */
766
 
766
 
767
  /* USER CODE END USART2_Init 2 */
767
  /* USER CODE END USART2_Init 2 */
768
 
-
 
769
}
768
}
770
 
769
 
771
/**
770
/**
772
  * @brief USART3 Initialization Function
771
 * @brief USART3 Initialization Function
773
  * @param None
772
 * @param None
774
  * @retval None
773
 * @retval None
775
  */
774
 */
776
static void MX_USART3_UART_Init(void)
775
static void MX_USART3_UART_Init(void)
777
{
776
{
778
 
777
 
779
  /* USER CODE BEGIN USART3_Init 0 */
778
  /* USER CODE BEGIN USART3_Init 0 */
780
 
779
 
Line 796... Line 795...
796
    Error_Handler();
795
    Error_Handler();
797
  }
796
  }
798
  /* USER CODE BEGIN USART3_Init 2 */
797
  /* USER CODE BEGIN USART3_Init 2 */
799
 
798
 
800
  /* USER CODE END USART3_Init 2 */
799
  /* USER CODE END USART3_Init 2 */
801
 
-
 
802
}
800
}
803
 
801
 
804
/**
802
/**
805
  * @brief GPIO Initialization Function
803
 * @brief GPIO Initialization Function
806
  * @param None
804
 * @param None
807
  * @retval None
805
 * @retval None
808
  */
806
 */
809
static void MX_GPIO_Init(void)
807
static void MX_GPIO_Init(void)
810
{
808
{
811
  GPIO_InitTypeDef GPIO_InitStruct = {0};
809
  GPIO_InitTypeDef GPIO_InitStruct = {0};
812
 
810
 
813
  /* GPIO Ports Clock Enable */
811
  /* GPIO Ports Clock Enable */
Line 818... Line 816...
818
 
816
 
819
  /*Configure GPIO pin Output Level */
817
  /*Configure GPIO pin Output Level */
820
  HAL_GPIO_WritePin(SPI_NSS1_GPIO_Port, SPI_NSS1_Pin, GPIO_PIN_SET);
818
  HAL_GPIO_WritePin(SPI_NSS1_GPIO_Port, SPI_NSS1_Pin, GPIO_PIN_SET);
821
 
819
 
822
  /*Configure GPIO pin Output Level */
820
  /*Configure GPIO pin Output Level */
823
  HAL_GPIO_WritePin(GPIOA, SPI_CD_Pin|BT_BUTTON_Pin, GPIO_PIN_RESET);
821
  HAL_GPIO_WritePin(GPIOA, SPI_CD_Pin | BT_BUTTON_Pin, GPIO_PIN_RESET);
824
 
822
 
825
  /*Configure GPIO pin Output Level */
823
  /*Configure GPIO pin Output Level */
826
  HAL_GPIO_WritePin(GPIOC, SPI_RESET_Pin|POWER_LATCH_Pin|USB_PWR_Pin, GPIO_PIN_RESET);
824
  HAL_GPIO_WritePin(GPIOC, SPI_RESET_Pin | POWER_LATCH_Pin | USB_PWR_Pin, GPIO_PIN_RESET);
827
 
825
 
828
  /*Configure GPIO pin Output Level */
826
  /*Configure GPIO pin Output Level */
829
  HAL_GPIO_WritePin(SPI_NSS2_GPIO_Port, SPI_NSS2_Pin, GPIO_PIN_SET);
827
  HAL_GPIO_WritePin(SPI_NSS2_GPIO_Port, SPI_NSS2_Pin, GPIO_PIN_SET);
830
 
828
 
831
  /*Configure GPIO pins : SPI_NSS1_Pin SPI_CD_Pin */
829
  /*Configure GPIO pins : SPI_NSS1_Pin SPI_CD_Pin */
832
  GPIO_InitStruct.Pin = SPI_NSS1_Pin|SPI_CD_Pin;
830
  GPIO_InitStruct.Pin = SPI_NSS1_Pin | SPI_CD_Pin;
833
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
831
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
834
  GPIO_InitStruct.Pull = GPIO_NOPULL;
832
  GPIO_InitStruct.Pull = GPIO_NOPULL;
835
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
833
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
836
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
834
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
837
 
835
 
838
  /*Configure GPIO pins : SPI_RESET_Pin SPI_NSS2_Pin POWER_LATCH_Pin USB_PWR_Pin */
836
  /*Configure GPIO pins : SPI_RESET_Pin SPI_NSS2_Pin POWER_LATCH_Pin USB_PWR_Pin */
839
  GPIO_InitStruct.Pin = SPI_RESET_Pin|SPI_NSS2_Pin|POWER_LATCH_Pin|USB_PWR_Pin;
837
  GPIO_InitStruct.Pin = SPI_RESET_Pin | SPI_NSS2_Pin | POWER_LATCH_Pin | USB_PWR_Pin;
840
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
838
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
841
  GPIO_InitStruct.Pull = GPIO_NOPULL;
839
  GPIO_InitStruct.Pull = GPIO_NOPULL;
842
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
840
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
843
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
841
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
844
 
842
 
845
  /*Configure GPIO pins : BT_STATE_Pin SW1_PUSH_Pin SW2_PUSH_Pin */
843
  /*Configure GPIO pins : BT_STATE_Pin SW1_PUSH_Pin SW2_PUSH_Pin */
846
  GPIO_InitStruct.Pin = BT_STATE_Pin|SW1_PUSH_Pin|SW2_PUSH_Pin;
844
  GPIO_InitStruct.Pin = BT_STATE_Pin | SW1_PUSH_Pin | SW2_PUSH_Pin;
847
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
845
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
848
  GPIO_InitStruct.Pull = GPIO_PULLUP;
846
  GPIO_InitStruct.Pull = GPIO_PULLUP;
849
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
847
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
850
 
848
 
851
  /*Configure GPIO pin : IGNITION_Pin */
849
  /*Configure GPIO pin : IGNITION_Pin */
Line 858... Line 856...
858
  GPIO_InitStruct.Pin = BT_BUTTON_Pin;
856
  GPIO_InitStruct.Pin = BT_BUTTON_Pin;
859
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
857
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
860
  GPIO_InitStruct.Pull = GPIO_NOPULL;
858
  GPIO_InitStruct.Pull = GPIO_NOPULL;
861
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
859
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
862
  HAL_GPIO_Init(BT_BUTTON_GPIO_Port, &GPIO_InitStruct);
860
  HAL_GPIO_Init(BT_BUTTON_GPIO_Port, &GPIO_InitStruct);
863
 
-
 
864
}
861
}
865
 
862
 
866
/* USER CODE BEGIN 4 */
863
/* USER CODE BEGIN 4 */
867
 
864
 
868
/* USER CODE END 4 */
865
/* USER CODE END 4 */
869
 
866
 
870
/**
867
/**
871
  * @brief  This function is executed in case of error occurrence.
868
 * @brief  This function is executed in case of error occurrence.
872
  * @retval None
869
 * @retval None
873
  */
870
 */
874
void Error_Handler(void)
871
void Error_Handler(void)
875
{
872
{
876
  /* USER CODE BEGIN Error_Handler_Debug */
873
  /* USER CODE BEGIN Error_Handler_Debug */
877
  /* User can add his own implementation to report the HAL error return state */
874
  /* User can add his own implementation to report the HAL error return state */
878
 
875
 
879
  /* USER CODE END Error_Handler_Debug */
876
  /* USER CODE END Error_Handler_Debug */
880
}
877
}
881
 
878
 
882
#ifdef  USE_FULL_ASSERT
879
#ifdef USE_FULL_ASSERT
883
/**
880
/**
884
  * @brief  Reports the name of the source file and the source line number
881
 * @brief  Reports the name of the source file and the source line number
885
  *         where the assert_param error has occurred.
882
 *         where the assert_param error has occurred.
886
  * @param  file: pointer to the source file name
883
 * @param  file: pointer to the source file name
887
  * @param  line: assert_param error line source number
884
 * @param  line: assert_param error line source number
888
  * @retval None
885
 * @retval None
889
  */
886
 */
890
void assert_failed(uint8_t *file, uint32_t line)
887
void assert_failed(uint8_t *file, uint32_t line)
891
{
888
{
892
  /* USER CODE BEGIN 6 */
889
  /* USER CODE BEGIN 6 */
893
  /* User can add his own implementation to report the file name and line number,
890
  /* User can add his own implementation to report the file name and line number,
894
     tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
891
     tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */