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 |