Subversion Repositories DashDisplay

Rev

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

Rev 38 Rev 44
Line 2... Line 2...
2
  ******************************************************************************
2
  ******************************************************************************
3
  * File Name          : main.c
3
  * File Name          : main.c
4
  * Description        : Main program body
4
  * Description        : Main program body
5
  ******************************************************************************
5
  ******************************************************************************
6
  *
6
  *
7
  * COPYRIGHT(c) 2017 STMicroelectronics
7
  * COPYRIGHT(c) 2018 STMicroelectronics
8
  *
8
  *
9
  * Redistribution and use in source and binary forms, with or without modification,
9
  * Redistribution and use in source and binary forms, with or without modification,
10
  * are permitted provided that the following conditions are met:
10
  * are permitted provided that the following conditions are met:
11
  *   1. Redistributions of source code must retain the above copyright notice,
11
  *   1. Redistributions of source code must retain the above copyright notice,
12
  *      this list of conditions and the following disclaimer.
12
  *      this list of conditions and the following disclaimer.
Line 49... Line 49...
49
/* USER CODE END Includes */
49
/* USER CODE END Includes */
50
 
50
 
51
/* Private variables ---------------------------------------------------------*/
51
/* Private variables ---------------------------------------------------------*/
52
SPI_HandleTypeDef hspi1;
52
SPI_HandleTypeDef hspi1;
53
 
53
 
-
 
54
TIM_HandleTypeDef htim3;
-
 
55
TIM_HandleTypeDef htim9;
-
 
56
 
54
UART_HandleTypeDef huart1;
57
UART_HandleTypeDef huart1;
55
UART_HandleTypeDef huart2;
58
UART_HandleTypeDef huart2;
56
UART_HandleTypeDef huart3;
59
UART_HandleTypeDef huart3;
57
 
60
 
58
/* USER CODE BEGIN PV */
61
/* USER CODE BEGIN PV */
Line 97... Line 100...
97
static void MX_GPIO_Init(void);
100
static void MX_GPIO_Init(void);
98
static void MX_SPI1_Init(void);
101
static void MX_SPI1_Init(void);
99
static void MX_USART1_UART_Init(void);
102
static void MX_USART1_UART_Init(void);
100
static void MX_USART2_UART_Init(void);
103
static void MX_USART2_UART_Init(void);
101
static void MX_USART3_UART_Init(void);
104
static void MX_USART3_UART_Init(void);
-
 
105
static void MX_TIM3_Init(void);
-
 
106
static void MX_TIM9_Init(void);
102
 
107
 
103
/* USER CODE BEGIN PFP */
108
/* USER CODE BEGIN PFP */
104
/* Private function prototypes -----------------------------------------------*/
109
/* Private function prototypes -----------------------------------------------*/
105
 
110
 
106
/* USER CODE END PFP */
111
/* USER CODE END PFP */
Line 117... Line 122...
117
{
122
{
118
        char buff[10];
123
        char buff[10];
119
        int i;
124
        int i;
120
        int rc;
125
        int rc;
121
        select_display(dial); // pick the display we are using
126
        select_display(dial); // pick the display we are using
122
        int ItemIndex = dial_pos[dial] / 4;
127
        int ItemIndex = dial_pos[dial] % PLXItems;
123
 
128
 
-
 
129
#if 0
124
        // wrap around count if dial too far to the right
130
        // wrap around count if dial too far to the right
125
        if (ItemIndex >= PLXItems)
131
        if (ItemIndex >= PLXItems)
126
        {
132
        {
127
                dial_pos[dial] = 0;
133
                dial_pos[dial] = 0;
128
                ItemIndex = 0;
134
                ItemIndex = 0;
Line 130... Line 136...
130
        if (ItemIndex < 0)
136
        if (ItemIndex < 0)
131
        {
137
        {
132
                ItemIndex = PLXItems - 1;
138
                ItemIndex = PLXItems - 1;
133
                dial_pos[dial] = (PLXItems - 1) * 4;
139
                dial_pos[dial] = (PLXItems - 1) * 4;
134
        }
140
        }
135
 
141
#endif
136
        // check for item suppression
142
        // check for item suppression
137
        if (ItemIndex == suppress)
143
        if (ItemIndex == suppress)
138
        {
144
        {
139
                dial1[dial] = -1;
145
                dial1[dial] = -1;
140
                OldObservation[dial] = -1;
146
                OldObservation[dial] = -1;
Line 312... Line 318...
312
__HAL_RCC_USART2_CLK_ENABLE()
318
__HAL_RCC_USART2_CLK_ENABLE()
313
; // debug port
319
; // debug port
314
__HAL_RCC_USART3_CLK_ENABLE ()
320
__HAL_RCC_USART3_CLK_ENABLE ()
315
; // Bluetooth port
321
; // Bluetooth port
316
 
322
 
-
 
323
__HAL_RCC_TIM3_CLK_ENABLE();
-
 
324
 
-
 
325
__HAL_RCC_TIM9_CLK_ENABLE();
317
  /* USER CODE END 1 */
326
  /* USER CODE END 1 */
318
 
327
 
319
  /* MCU Configuration----------------------------------------------------------*/
328
  /* MCU Configuration----------------------------------------------------------*/
320
 
329
 
321
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
330
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
Line 328... Line 337...
328
  MX_GPIO_Init();
337
  MX_GPIO_Init();
329
  MX_SPI1_Init();
338
  MX_SPI1_Init();
330
  MX_USART1_UART_Init();
339
  MX_USART1_UART_Init();
331
  MX_USART2_UART_Init();
340
  MX_USART2_UART_Init();
332
  MX_USART3_UART_Init();
341
  MX_USART3_UART_Init();
-
 
342
  MX_TIM3_Init();
-
 
343
  MX_TIM9_Init();
333
 
344
 
334
  /* USER CODE BEGIN 2 */
345
  /* USER CODE BEGIN 2 */
335
 
346
 
336
/* Turn on USART1 IRQ */
347
/* Turn on USART1 IRQ */
337
HAL_NVIC_SetPriority(USART1_IRQn, 2, 0);
348
HAL_NVIC_SetPriority(USART1_IRQn, 2, 0);
Line 352... Line 363...
352
 
363
 
353
EnableSerialRxInterrupt(&uc1);
364
EnableSerialRxInterrupt(&uc1);
354
EnableSerialRxInterrupt(&uc2);
365
EnableSerialRxInterrupt(&uc2);
355
EnableSerialRxInterrupt(&uc3);
366
EnableSerialRxInterrupt(&uc3);
356
 
367
 
-
 
368
HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
-
 
369
 
-
 
370
HAL_TIM_Encoder_Start(&htim9, TIM_CHANNEL_ALL);
357
 
371
 
358
InitSwitches();
372
InitSwitches();
359
 
373
 
360
int i;
374
int i;
361
uint16_t rc;
375
uint16_t rc;
Line 550... Line 564...
550
 
564
 
551
  __HAL_RCC_PWR_CLK_ENABLE();
565
  __HAL_RCC_PWR_CLK_ENABLE();
552
 
566
 
553
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
567
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
554
 
568
 
555
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
569
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
556
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
570
  RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
557
  RCC_OscInitStruct.HSICalibrationValue = 16;
-
 
558
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
571
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
559
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
572
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
560
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
573
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;
561
  RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV3;
574
  RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV3;
562
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
575
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
563
  {
576
  {
564
    Error_Handler();
577
    Error_Handler();
565
  }
578
  }
Line 604... Line 617...
604
    Error_Handler();
617
    Error_Handler();
605
  }
618
  }
606
 
619
 
607
}
620
}
608
 
621
 
-
 
622
/* TIM3 init function */
-
 
623
static void MX_TIM3_Init(void)
-
 
624
{
-
 
625
 
-
 
626
  TIM_Encoder_InitTypeDef sConfig;
-
 
627
  TIM_MasterConfigTypeDef sMasterConfig;
-
 
628
 
-
 
629
  htim3.Instance = TIM3;
-
 
630
  htim3.Init.Prescaler = 0;
-
 
631
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
-
 
632
  htim3.Init.Period = 0xffff;
-
 
633
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4;
-
 
634
  sConfig.EncoderMode = TIM_ENCODERMODE_TI1;
-
 
635
  sConfig.IC1Polarity = TIM_ICPOLARITY_FALLING;
-
 
636
  sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
-
 
637
  sConfig.IC1Prescaler = TIM_ICPSC_DIV1;
-
 
638
  sConfig.IC1Filter = 15;
-
 
639
  sConfig.IC2Polarity = TIM_ICPOLARITY_FALLING;
-
 
640
  sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
-
 
641
  sConfig.IC2Prescaler = TIM_ICPSC_DIV1;
-
 
642
  sConfig.IC2Filter = 15;
-
 
643
  if (HAL_TIM_Encoder_Init(&htim3, &sConfig) != HAL_OK)
-
 
644
  {
-
 
645
    Error_Handler();
-
 
646
  }
-
 
647
 
-
 
648
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
-
 
649
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
-
 
650
  if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
-
 
651
  {
-
 
652
    Error_Handler();
-
 
653
  }
-
 
654
 
-
 
655
}
-
 
656
 
-
 
657
/* TIM9 init function */
-
 
658
static void MX_TIM9_Init(void)
-
 
659
{
-
 
660
 
-
 
661
  TIM_Encoder_InitTypeDef sConfig;
-
 
662
  TIM_MasterConfigTypeDef sMasterConfig;
-
 
663
 
-
 
664
  htim9.Instance = TIM9;
-
 
665
  htim9.Init.Prescaler = 0;
-
 
666
  htim9.Init.CounterMode = TIM_COUNTERMODE_UP;
-
 
667
  htim9.Init.Period = 0xffff;
-
 
668
  htim9.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4;
-
 
669
  sConfig.EncoderMode = TIM_ENCODERMODE_TI1;
-
 
670
  sConfig.IC1Polarity = TIM_ICPOLARITY_FALLING;
-
 
671
  sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
-
 
672
  sConfig.IC1Prescaler = TIM_ICPSC_DIV1;
-
 
673
  sConfig.IC1Filter = 15;
-
 
674
  sConfig.IC2Polarity = TIM_ICPOLARITY_FALLING;
-
 
675
  sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
-
 
676
  sConfig.IC2Prescaler = TIM_ICPSC_DIV1;
-
 
677
  sConfig.IC2Filter = 15;
-
 
678
  if (HAL_TIM_Encoder_Init(&htim9, &sConfig) != HAL_OK)
-
 
679
  {
-
 
680
    Error_Handler();
-
 
681
  }
-
 
682
 
-
 
683
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
-
 
684
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
-
 
685
  if (HAL_TIMEx_MasterConfigSynchronization(&htim9, &sMasterConfig) != HAL_OK)
-
 
686
  {
-
 
687
    Error_Handler();
-
 
688
  }
-
 
689
 
-
 
690
}
-
 
691
 
609
/* USART1 init function */
692
/* USART1 init function */
610
static void MX_USART1_UART_Init(void)
693
static void MX_USART1_UART_Init(void)
611
{
694
{
612
 
695
 
613
  huart1.Instance = USART1;
696
  huart1.Instance = USART1;
614
  huart1.Init.BaudRate = 19200;
697
  huart1.Init.BaudRate = 19200;
615
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
698
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
616
  huart1.Init.StopBits = UART_STOPBITS_2;
699
  huart1.Init.StopBits = UART_STOPBITS_1;
617
  huart1.Init.Parity = UART_PARITY_NONE;
700
  huart1.Init.Parity = UART_PARITY_NONE;
618
  huart1.Init.Mode = UART_MODE_TX_RX;
701
  huart1.Init.Mode = UART_MODE_TX_RX;
619
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
702
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
620
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
703
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
621
  if (HAL_UART_Init(&huart1) != HAL_OK)
704
  if (HAL_UART_Init(&huart1) != HAL_OK)
Line 649... Line 732...
649
{
732
{
650
 
733
 
651
  huart3.Instance = USART3;
734
  huart3.Instance = USART3;
652
  huart3.Init.BaudRate = 19200;
735
  huart3.Init.BaudRate = 19200;
653
  huart3.Init.WordLength = UART_WORDLENGTH_8B;
736
  huart3.Init.WordLength = UART_WORDLENGTH_8B;
654
  huart3.Init.StopBits = UART_STOPBITS_1;
737
  huart3.Init.StopBits = UART_STOPBITS_2;
655
  huart3.Init.Parity = UART_PARITY_ODD;
738
  huart3.Init.Parity = UART_PARITY_NONE;
656
  huart3.Init.Mode = UART_MODE_TX_RX;
739
  huart3.Init.Mode = UART_MODE_TX_RX;
657
  huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
740
  huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
658
  huart3.Init.OverSampling = UART_OVERSAMPLING_16;
741
  huart3.Init.OverSampling = UART_OVERSAMPLING_16;
659
  if (HAL_UART_Init(&huart3) != HAL_OK)
742
  if (HAL_UART_Init(&huart3) != HAL_OK)
660
  {
743
  {
Line 699... Line 782...
699
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
782
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
700
  GPIO_InitStruct.Pull = GPIO_NOPULL;
783
  GPIO_InitStruct.Pull = GPIO_NOPULL;
701
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
784
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
702
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
785
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
703
 
786
 
704
  /*Configure GPIO pins : SW1_PUSH_Pin SW1_I_Pin SW1_Q_Pin SW2_PUSH_Pin */
787
  /*Configure GPIO pins : SW1_PUSH_Pin SW2_PUSH_Pin */
705
  GPIO_InitStruct.Pin = SW1_PUSH_Pin|SW1_I_Pin|SW1_Q_Pin|SW2_PUSH_Pin;
788
  GPIO_InitStruct.Pin = SW1_PUSH_Pin|SW2_PUSH_Pin;
706
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
789
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
707
  GPIO_InitStruct.Pull = GPIO_PULLUP;
790
  GPIO_InitStruct.Pull = GPIO_PULLUP;
708
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
791
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
709
 
792
 
710
  /*Configure GPIO pins : SW2_I_Pin SW2_Q_Pin */
-
 
711
  GPIO_InitStruct.Pin = SW2_I_Pin|SW2_Q_Pin;
-
 
712
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
-
 
713
  GPIO_InitStruct.Pull = GPIO_PULLUP;
-
 
714
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
-
 
715
 
-
 
716
  /*Configure GPIO pin : IGNITION_Pin */
793
  /*Configure GPIO pin : IGNITION_Pin */
717
  GPIO_InitStruct.Pin = IGNITION_Pin;
794
  GPIO_InitStruct.Pin = IGNITION_Pin;
718
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
795
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
719
  GPIO_InitStruct.Pull = GPIO_NOPULL;
796
  GPIO_InitStruct.Pull = GPIO_NOPULL;
720
  HAL_GPIO_Init(IGNITION_GPIO_Port, &GPIO_InitStruct);
797
  HAL_GPIO_Init(IGNITION_GPIO_Port, &GPIO_InitStruct);