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