Rev 4 | Rev 9 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 4 | Rev 5 | ||
|---|---|---|---|
| Line 66... | Line 66... | ||
| 66 | 66 | ||
| 67 | // compensated pressure in mb * 100 |
67 | // compensated pressure in mb * 100 |
| 68 | uint32_t comp_pres = 0; |
68 | uint32_t comp_pres = 0; |
| 69 | // compensated temperature |
69 | // compensated temperature |
| 70 | int32_t comp_temp = -10000; |
70 | int32_t comp_temp = -10000; |
| - | 71 | ||
| - | 72 | int32_t timing = 0; |
|
| 71 | /* USER CODE END PV */ |
73 | /* USER CODE END PV */ |
| 72 | 74 | ||
| 73 | /* Private function prototypes -----------------------------------------------*/ |
75 | /* Private function prototypes -----------------------------------------------*/ |
| 74 | void SystemClock_Config(void); |
76 | void SystemClock_Config(void); |
| 75 | static void MX_GPIO_Init(void); |
77 | static void MX_GPIO_Init(void); |
| Line 91... | Line 93... | ||
| 91 | ConvToPLXAddr(PLX_MAP, &info); |
93 | ConvToPLXAddr(PLX_MAP, &info); |
| 92 | ConvToPLXReading(ConveriMFDData2Raw(PLX_MAP, PRESSURE_kPa, comp_pres / 1000.0), &info); |
94 | ConvToPLXReading(ConveriMFDData2Raw(PLX_MAP, PRESSURE_kPa, comp_pres / 1000.0), &info); |
| 93 | int i; |
95 | int i; |
| 94 | for (i = 0; i < sizeof(PLX_SensorInfo); ++i) |
96 | for (i = 0; i < sizeof(PLX_SensorInfo); ++i) |
| 95 | PutCharSerial(&uc2, info.bytes[i]); |
97 | PutCharSerial(&uc2, info.bytes[i]); |
| - | 98 | ||
| - | 99 | ConvToPLXInstance(0, &info); |
|
| - | 100 | ConvToPLXAddr(PLX_Timing, &info); |
|
| - | 101 | ConvToPLXReading(ConveriMFDData2Raw(PLX_Timing, 0, timing / TIMING_SCALE), &info); |
|
| - | 102 | for (i = 0; i < sizeof(PLX_SensorInfo); ++i) |
|
| - | 103 | PutCharSerial(&uc2, info.bytes[i]); |
|
| 96 | } |
104 | } |
| 97 | 105 | ||
| 98 | void triggerSAW() |
106 | void triggerSAW() |
| 99 | { |
107 | { |
| 100 | // trigger SAW timer, timer 1 |
108 | // trigger SAW timer, timer 1##pragma endregion |
| - | 109 | ||
| 101 | __HAL_TIM_ENABLE(&htim1); |
110 | __HAL_TIM_ENABLE(&htim1); |
| 102 | } |
111 | } |
| 103 | 112 | ||
| 104 | /* USER CODE END PFP */ |
113 | /* USER CODE END PFP */ |
| 105 | 114 | ||
| Line 143... | Line 152... | ||
| 143 | MX_SPI1_Init(); |
152 | MX_SPI1_Init(); |
| 144 | MX_USART2_UART_Init(); |
153 | MX_USART2_UART_Init(); |
| 145 | MX_TIM3_Init(); |
154 | MX_TIM3_Init(); |
| 146 | MX_IWDG_Init(); |
155 | MX_IWDG_Init(); |
| 147 | /* USER CODE BEGIN 2 */ |
156 | /* USER CODE BEGIN 2 */ |
| - | 157 | ||
| - | 158 | init_usart_ctl(&uc2, &huart2); |
|
| - | 159 | ||
| 148 | cc_init(); |
160 | cc_init(); |
| 149 | 161 | ||
| - | 162 | HAL_TIM_Base_MspInit(&htim1); |
|
| - | 163 | ||
| 150 | HAL_TIM_Base_Start(&htim1); |
164 | HAL_TIM_Base_Start(&htim1); |
| - | 165 | HAL_TIM_OC_Start(&htim1, TIM_CHANNEL_1); |
|
| - | 166 | ||
| - | 167 | // initialise all the STMCubeMX stuff |
|
| - | 168 | HAL_TIM_Base_MspInit(&htim2); |
|
| - | 169 | // Start the counter |
|
| - | 170 | HAL_TIM_Base_Start(&htim2); |
|
| - | 171 | // Start the input capture and the rising edge interrupt |
|
| - | 172 | HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1); |
|
| - | 173 | // Start the input capture and the falling edge interrupt |
|
| - | 174 | HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2); |
|
| 151 | 175 | ||
| 152 | __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 5); // delay of 5 uS |
176 | __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 5); // delay of 5 uS |
| 153 | 177 | ||
| 154 | HAL_I2C_ClearBusyFlagErrata_2_14_7(&hi2c1); |
178 | HAL_I2C_ClearBusyFlagErrata_2_14_7(&hi2c1); |
| 155 | MX_I2C1_Init(); |
179 | MX_I2C1_Init(); |
| Line 164... | Line 188... | ||
| 164 | 188 | ||
| 165 | // used to store data |
189 | // used to store data |
| 166 | PLX_SensorInfo info; |
190 | PLX_SensorInfo info; |
| 167 | int infoCount = -1; |
191 | int infoCount = -1; |
| 168 | 192 | ||
| 169 | HAL_IWDG_Init(&hiwdg); |
193 | // HAL_IWDG_Init(&hiwdg); |
| 170 | /* USER CODE END 2 */ |
194 | /* USER CODE END 2 */ |
| 171 | 195 | ||
| 172 | /* Infinite loop */ |
196 | /* Infinite loop */ |
| 173 | /* USER CODE BEGIN WHILE */ |
197 | /* USER CODE BEGIN WHILE */ |
| 174 | while (1) |
198 | while (1) |
| Line 192... | Line 216... | ||
| 192 | 216 | ||
| 193 | break; |
217 | break; |
| 194 | case 1: |
218 | case 1: |
| 195 | if (HAL_GetTick() > displayOff) |
219 | if (HAL_GetTick() > displayOff) |
| 196 | { |
220 | { |
| 197 | intensity = 0; |
221 | intensity = 1; // was 0 |
| 198 | } |
222 | } |
| 199 | default: |
223 | default: |
| 200 | break; |
224 | break; |
| 201 | } |
225 | } |
| 202 | cc_display(0, intensity); |
226 | cc_display(0, intensity); |
| 203 | 227 | ||
| 204 | if (HAL_GetTick() - lastTick > 200) |
228 | if (HAL_GetTick() - lastTick > T100MS) |
| 205 | { |
229 | { |
| 206 | lastTick = HAL_GetTick(); |
230 | lastTick = HAL_GetTick(); |
| 207 | /* Reading the raw data from sensor */ |
231 | /* Reading the raw data from sensor */ |
| 208 | struct bmp280_uncomp_data ucomp_data; |
232 | struct bmp280_uncomp_data ucomp_data; |
| 209 | uint8_t rslt = bmp280_get_uncomp_data(&ucomp_data, &bmp); |
233 | uint8_t rslt = bmp280_get_uncomp_data(&ucomp_data, &bmp); |
| 210 | 234 | ||
| 211 | uint32_t comp_pres = 0; |
- | |
| 212 | int32_t comp_temp = -10000; |
- | |
| 213 | if (rslt == 0) |
235 | if (rslt == 0) |
| 214 | { |
236 | { |
| 215 | uint8_t rslt2 = bmp280_get_comp_pres_32bit(&comp_pres, ucomp_data.uncomp_press, &bmp); |
237 | uint8_t rslt2 = bmp280_get_comp_pres_32bit(&comp_pres, ucomp_data.uncomp_press, &bmp); |
| 216 | 238 | ||
| 217 | uint8_t rslt3 = bmp280_get_comp_temp_32bit(&comp_temp, ucomp_data.uncomp_temp, &bmp); |
239 | uint8_t rslt3 = bmp280_get_comp_temp_32bit(&comp_temp, ucomp_data.uncomp_temp, &bmp); |
| 218 | if (rslt2 == 0 && rslt3 == 0) |
240 | if (rslt2 == 0 && rslt3 == 0) |
| 219 | cc_feed_env(comp_pres, comp_temp); |
241 | cc_feed_env(comp_pres, comp_temp); |
| 220 | } |
242 | } |
| 221 | } |
- | |
| 222 | 243 | ||
| 223 | // compute RPM value, feed to display |
244 | // compute RPM value, feed to display |
| 224 | 245 | ||
| 225 | int rpm = CalculateRPM(); |
246 | int rpm = CalculateRPM(); |
| 226 | if (rpm > 0) |
247 | if (rpm > 0) |
| 227 | { |
248 | { |
| 228 | cc_feed_rpm(rpm); |
249 | cc_feed_rpm(rpm); |
| 229 | // compute timing value, feed to display |
250 | // compute timing value, feed to display |
| 230 | int timing = mapTiming(rpm, 1000 - comp_pres / 100); |
251 | timing = mapTiming(rpm, 1000 - comp_pres / 100); |
| 231 | cc_feed_timing(timing); |
252 | cc_feed_timing(timing); |
| 232 | int microsecs = mapTimingToMicroseconds(timing, 0); |
253 | int microsecs = mapTimingToMicroseconds(timing, 0); |
| 233 | __HAL_TIM_SET_AUTORELOAD(&htim1, microsecs + SAW_DELAY); |
254 | __HAL_TIM_SET_AUTORELOAD(&htim1, microsecs + SAW_DELAY); |
| - | 255 | } |
|
| 234 | } |
256 | } |
| 235 | // Handle PLX |
257 | // Handle PLX |
| 236 | // poll the input for a stop bit or timeout |
258 | // poll the input for a stop bit or timeout |
| 237 | if (PollSerial(&uc2)) |
259 | if (PollSerial(&uc2)) |
| 238 | { |
260 | { |
| - | 261 | HAL_IWDG_Refresh(&hiwdg); |
|
| 239 | timeout = HAL_GetTick() + T100MS * 2; |
262 | timeout = HAL_GetTick() + T100MS * 2; |
| 240 | char c = GetCharSerial(&uc2); |
263 | char c = GetCharSerial(&uc2); |
| - | 264 | ||
| 241 | if (c != PLX_Stop) |
265 | if (c != PLX_Stop) |
| 242 | { |
266 | { |
| 243 | PutCharSerial(&uc2, c); // echo all but the stop bit |
267 | PutCharSerial(&uc2, c); // echo all but the stop bit |
| 244 | } |
268 | } |
| 245 | else |
269 | else |
| Line 270... | Line 294... | ||
| 270 | } |
294 | } |
| 271 | 295 | ||
| 272 | // sort out auto-sending |
296 | // sort out auto-sending |
| 273 | if (HAL_GetTick() > timeout) |
297 | if (HAL_GetTick() > timeout) |
| 274 | { |
298 | { |
| - | 299 | PutCharSerial(&uc2, PLX_Start); |
|
| 275 | timeout = HAL_GetTick() + T100MS; |
300 | timeout = HAL_GetTick() + T100MS; |
| 276 | send = 1; |
301 | send = 1; |
| 277 | } |
302 | } |
| 278 | 303 | ||
| 279 | if (send) |
304 | if (send) |
| Line 417... | Line 442... | ||
| 417 | /* USER CODE BEGIN IWDG_Init 1 */ |
442 | /* USER CODE BEGIN IWDG_Init 1 */ |
| 418 | 443 | ||
| 419 | /* USER CODE END IWDG_Init 1 */ |
444 | /* USER CODE END IWDG_Init 1 */ |
| 420 | hiwdg.Instance = IWDG; |
445 | hiwdg.Instance = IWDG; |
| 421 | hiwdg.Init.Prescaler = IWDG_PRESCALER_4; |
446 | hiwdg.Init.Prescaler = IWDG_PRESCALER_4; |
| 422 | hiwdg.Init.Reload = 819; |
447 | hiwdg.Init.Reload = 1000; |
| 423 | if (HAL_IWDG_Init(&hiwdg) != HAL_OK) |
448 | if (HAL_IWDG_Init(&hiwdg) != HAL_OK) |
| 424 | { |
449 | { |
| 425 | Error_Handler(); |
450 | Error_Handler(); |
| 426 | } |
451 | } |
| 427 | /* USER CODE BEGIN IWDG_Init 2 */ |
452 | /* USER CODE BEGIN IWDG_Init 2 */ |
| Line 500... | Line 525... | ||
| 500 | sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; |
525 | sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; |
| 501 | if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) |
526 | if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) |
| 502 | { |
527 | { |
| 503 | Error_Handler(); |
528 | Error_Handler(); |
| 504 | } |
529 | } |
| 505 | if (HAL_TIM_OC_Init(&htim1) != HAL_OK) |
530 | if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) |
| 506 | { |
531 | { |
| 507 | Error_Handler(); |
532 | Error_Handler(); |
| 508 | } |
533 | } |
| 509 | if (HAL_TIM_OnePulse_Init(&htim1, TIM_OPMODE_SINGLE) != HAL_OK) |
534 | if (HAL_TIM_OnePulse_Init(&htim1, TIM_OPMODE_SINGLE) != HAL_OK) |
| 510 | { |
535 | { |
| Line 514... | Line 539... | ||
| 514 | sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; |
539 | sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; |
| 515 | if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) |
540 | if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) |
| 516 | { |
541 | { |
| 517 | Error_Handler(); |
542 | Error_Handler(); |
| 518 | } |
543 | } |
| 519 | sConfigOC.OCMode = TIM_OCMODE_ACTIVE; |
544 | sConfigOC.OCMode = TIM_OCMODE_PWM1; |
| 520 | sConfigOC.Pulse = SAW_DELAY; |
545 | sConfigOC.Pulse = SAW_DELAY; |
| 521 | sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; |
546 | sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW; |
| 522 | sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; |
547 | sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; |
| 523 | sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; |
548 | sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; |
| 524 | sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; |
549 | sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; |
| 525 | sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; |
550 | sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; |
| 526 | if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) |
551 | if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) |
| 527 | { |
552 | { |
| 528 | Error_Handler(); |
553 | Error_Handler(); |
| 529 | } |
554 | } |
| 530 | __HAL_TIM_ENABLE_OCxPRELOAD(&htim1, TIM_CHANNEL_1); |
- | |
| 531 | sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; |
555 | sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; |
| 532 | sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; |
556 | sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; |
| 533 | sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; |
557 | sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; |
| 534 | sBreakDeadTimeConfig.DeadTime = 0; |
558 | sBreakDeadTimeConfig.DeadTime = 0; |
| 535 | sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; |
559 | sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; |
| Line 556... | Line 580... | ||
| 556 | /* USER CODE BEGIN TIM2_Init 0 */ |
580 | /* USER CODE BEGIN TIM2_Init 0 */ |
| 557 | 581 | ||
| 558 | /* USER CODE END TIM2_Init 0 */ |
582 | /* USER CODE END TIM2_Init 0 */ |
| 559 | 583 | ||
| 560 | TIM_ClockConfigTypeDef sClockSourceConfig = {0}; |
584 | TIM_ClockConfigTypeDef sClockSourceConfig = {0}; |
| 561 | TIM_SlaveConfigTypeDef sSlaveConfig = {0}; |
- | |
| 562 | TIM_MasterConfigTypeDef sMasterConfig = {0}; |
585 | TIM_MasterConfigTypeDef sMasterConfig = {0}; |
| - | 586 | TIM_IC_InitTypeDef sConfigIC = {0}; |
|
| 563 | 587 | ||
| 564 | /* USER CODE BEGIN TIM2_Init 1 */ |
588 | /* USER CODE BEGIN TIM2_Init 1 */ |
| 565 | 589 | ||
| 566 | /* USER CODE END TIM2_Init 1 */ |
590 | /* USER CODE END TIM2_Init 1 */ |
| 567 | htim2.Instance = TIM2; |
591 | htim2.Instance = TIM2; |
| 568 | htim2.Init.Prescaler = 71; |
592 | htim2.Init.Prescaler = 719; |
| 569 | htim2.Init.CounterMode = TIM_COUNTERMODE_UP; |
593 | htim2.Init.CounterMode = TIM_COUNTERMODE_UP; |
| 570 | htim2.Init.Period = 9; |
594 | htim2.Init.Period = 65535; |
| 571 | htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
595 | htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
| 572 | htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
596 | htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
| 573 | if (HAL_TIM_Base_Init(&htim2) != HAL_OK) |
597 | if (HAL_TIM_Base_Init(&htim2) != HAL_OK) |
| 574 | { |
598 | { |
| 575 | Error_Handler(); |
599 | Error_Handler(); |
| Line 577... | Line 601... | ||
| 577 | sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; |
601 | sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; |
| 578 | if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) |
602 | if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) |
| 579 | { |
603 | { |
| 580 | Error_Handler(); |
604 | Error_Handler(); |
| 581 | } |
605 | } |
| 582 | if (HAL_TIM_OnePulse_Init(&htim2, TIM_OPMODE_SINGLE) != HAL_OK) |
606 | if (HAL_TIM_IC_Init(&htim2) != HAL_OK) |
| 583 | { |
- | |
| 584 | Error_Handler(); |
- | |
| 585 | } |
- | |
| 586 | sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER; |
- | |
| 587 | sSlaveConfig.InputTrigger = TIM_TS_ETRF; |
- | |
| 588 | sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_INVERTED; |
- | |
| 589 | sSlaveConfig.TriggerPrescaler = TIM_TRIGGERPRESCALER_DIV1; |
- | |
| 590 | sSlaveConfig.TriggerFilter = 15; |
- | |
| 591 | if (HAL_TIM_SlaveConfigSynchro(&htim2, &sSlaveConfig) != HAL_OK) |
- | |
| 592 | { |
607 | { |
| 593 | Error_Handler(); |
608 | Error_Handler(); |
| 594 | } |
609 | } |
| 595 | sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; |
610 | sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; |
| 596 | sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; |
611 | sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; |
| 597 | if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) |
612 | if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) |
| 598 | { |
613 | { |
| 599 | Error_Handler(); |
614 | Error_Handler(); |
| 600 | } |
615 | } |
| - | 616 | sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING; |
|
| - | 617 | sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; |
|
| - | 618 | sConfigIC.ICPrescaler = TIM_ICPSC_DIV1; |
|
| - | 619 | sConfigIC.ICFilter = 0; |
|
| - | 620 | if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) |
|
| - | 621 | { |
|
| - | 622 | Error_Handler(); |
|
| - | 623 | } |
|
| - | 624 | sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING; |
|
| - | 625 | sConfigIC.ICSelection = TIM_ICSELECTION_INDIRECTTI; |
|
| - | 626 | if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2) != HAL_OK) |
|
| - | 627 | { |
|
| - | 628 | Error_Handler(); |
|
| - | 629 | } |
|
| 601 | /* USER CODE BEGIN TIM2_Init 2 */ |
630 | /* USER CODE BEGIN TIM2_Init 2 */ |
| 602 | 631 | ||
| 603 | /* USER CODE END TIM2_Init 2 */ |
632 | /* USER CODE END TIM2_Init 2 */ |
| 604 | } |
633 | } |
| 605 | 634 | ||