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); |