Rev 12 | Rev 14 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 12 | Rev 13 | ||
---|---|---|---|
Line 89... | Line 89... | ||
89 | static void MX_DMA_Init(void); |
89 | static void MX_DMA_Init(void); |
90 | static void MX_ADC_Init(void); |
90 | static void MX_ADC_Init(void); |
91 | static void MX_SPI1_Init(void); |
91 | static void MX_SPI1_Init(void); |
92 | static void MX_TIM2_Init(void); |
92 | static void MX_TIM2_Init(void); |
93 | static void MX_TIM6_Init(void); |
93 | static void MX_TIM6_Init(void); |
94 | static void MX_USART1_UART_Init(void); |
- | |
95 | static void MX_USART2_UART_Init(void); |
94 | static void MX_USART2_UART_Init(void); |
96 | - | ||
97 | void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); |
95 | static void MX_USART1_UART_Init(void); |
98 | - | ||
99 | 96 | ||
100 | /* USER CODE BEGIN PFP */ |
97 | /* USER CODE BEGIN PFP */ |
101 | /* Private function prototypes -----------------------------------------------*/ |
98 | /* Private function prototypes -----------------------------------------------*/ |
102 | 99 | ||
103 | /* USER CODE END PFP */ |
100 | /* USER CODE END PFP */ |
104 | 101 | ||
105 | /* USER CODE BEGIN 0 */ |
102 | /* USER CODE BEGIN 0 */ |
106 | 103 | ||
107 | void ConfigureDMA(void) { |
- | |
108 | hdma_adc.Instance = DMA1_Channel1; |
- | |
109 | hdma_adc.Init.Direction = DMA_PERIPH_TO_MEMORY; |
- | |
110 | hdma_adc.Init.PeriphInc = DMA_PINC_DISABLE; |
- | |
111 | hdma_adc.Init.MemInc = DMA_MINC_ENABLE; |
- | |
112 | hdma_adc.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; |
- | |
113 | hdma_adc.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; |
- | |
114 | hdma_adc.Init.Mode = DMA_CIRCULAR; // make the DMA loop automatically |
- | |
115 | hdma_adc.Init.Priority = DMA_PRIORITY_LOW; |
- | |
116 | HAL_DMA_Init(&hdma_adc); |
- | |
117 | __HAL_LINKDMA(&hadc, DMA_Handle, hdma_adc); |
- | |
118 | - | ||
119 | } |
- | |
120 | - | ||
121 | void plx_sendword(int x) { |
104 | void plx_sendword(int x) { |
122 | PutCharSerial(&uc1, ((x) >> 6) & 0x3F); |
105 | PutCharSerial(&uc1, ((x) >> 6) & 0x3F); |
123 | PutCharSerial(&uc1, (x) & 0x3F); |
106 | PutCharSerial(&uc1, (x) & 0x3F); |
124 | } |
107 | } |
125 | 108 | ||
Line 149... | Line 132... | ||
149 | new_time = RPM_Time[next_count]; |
132 | new_time = RPM_Time[next_count]; |
150 | RPM_Count_Latch = next_count; |
133 | RPM_Count_Latch = next_count; |
151 | if (new_time > base_time) { |
134 | if (new_time > base_time) { |
152 | RPM_Pulsewidth = new_time - base_time; // not wrapped |
135 | RPM_Pulsewidth = new_time - base_time; // not wrapped |
153 | } else { |
136 | } else { |
154 | RPM_Pulsewidth = new_time + (~base_time) + 1; // deal with wrapping |
137 | RPM_Pulsewidth = new_time - base_time + 65536; // deal with wrapping |
155 | } |
138 | } |
156 | 139 | ||
157 | RPM_Diff += RPM_Pulsewidth; |
140 | RPM_Diff += RPM_Pulsewidth; |
158 | // need to check if this is a long pulse. If it is, keep the answer |
141 | // need to check if this is a long pulse. If it is, keep the answer |
159 | if (RPM_Pulsewidth > BREAKER_MIN) { |
142 | if (RPM_Pulsewidth > BREAKER_MIN) { |
Line 262... | Line 245... | ||
262 | MX_DMA_Init(); |
245 | MX_DMA_Init(); |
263 | MX_ADC_Init(); |
246 | MX_ADC_Init(); |
264 | MX_SPI1_Init(); |
247 | MX_SPI1_Init(); |
265 | MX_TIM2_Init(); |
248 | MX_TIM2_Init(); |
266 | MX_TIM6_Init(); |
249 | MX_TIM6_Init(); |
267 | MX_USART1_UART_Init(); |
- | |
268 | MX_USART2_UART_Init(); |
250 | MX_USART2_UART_Init(); |
- | 251 | MX_USART1_UART_Init(); |
|
269 | 252 | ||
270 | /* USER CODE BEGIN 2 */ |
253 | /* USER CODE BEGIN 2 */ |
- | 254 | HAL_MspInit(); |
|
271 | 255 | ||
272 | __HAL_RCC_SPI1_CLK_ENABLE() |
- | |
273 | ; // Temp sensor port |
256 | // Not using HAL USART code |
274 | __HAL_RCC_USART1_CLK_ENABLE() |
257 | __HAL_RCC_USART1_CLK_ENABLE() |
275 | ; // PLX comms port |
258 | ; // PLX comms port |
276 | __HAL_RCC_USART2_CLK_ENABLE() |
259 | __HAL_RCC_USART2_CLK_ENABLE() |
277 | ; // Debug comms port |
260 | ; // Debug comms port |
278 | - | ||
279 | __HAL_RCC_ADC1_CLK_ENABLE() |
- | |
280 | ; // enable the ADC |
- | |
281 | - | ||
282 | __HAL_RCC_TIM6_CLK_ENABLE() |
- | |
283 | ; |
- | |
284 | __HAL_RCC_TIM2_CLK_ENABLE(); |
- | |
285 | - | ||
286 | ConfigureDMA(); |
- | |
287 | HAL_ADC_Start_DMA(&hadc, ADC_Samples, 6); |
- | |
288 | - | ||
289 | /* setup the USART control blocks */ |
261 | /* setup the USART control blocks */ |
290 | init_usart_ctl(&uc1, huart1.Instance); |
262 | init_usart_ctl(&uc1, huart1.Instance); |
291 | init_usart_ctl(&uc2, huart2.Instance); |
263 | init_usart_ctl(&uc2, huart2.Instance); |
292 | 264 | ||
293 | EnableSerialRxInterrupt(&uc1); |
265 | EnableSerialRxInterrupt(&uc1); |
294 | EnableSerialRxInterrupt(&uc2); |
266 | EnableSerialRxInterrupt(&uc2); |
295 | 267 | ||
- | 268 | ||
- | 269 | HAL_SPI_MspInit(&hspi1); |
|
- | 270 | ||
- | 271 | HAL_ADC_MspInit(&hadc); |
|
- | 272 | HAL_ADC_Start_DMA(&hadc, ADC_Samples, 6); |
|
- | 273 | ||
- | 274 | ||
- | 275 | ||
- | 276 | HAL_TIM_Base_MspInit(&htim6); |
|
296 | HAL_TIM_Base_Start_IT(&htim6); |
277 | HAL_TIM_Base_Start_IT(&htim6); |
297 | HAL_TIM_Base_Start(&htim2); |
- | |
298 | 278 | ||
- | 279 | // initialise all the STMCubeMX stuff |
|
- | 280 | HAL_TIM_Base_MspInit(&htim2); |
|
- | 281 | // Start the counter |
|
- | 282 | HAL_TIM_Base_Start(&htim2); |
|
- | 283 | // Start the input capture and the interrupt |
|
299 | __HAL_TIM_ENABLE_IT(&htim2, TIM_IT_CC1); |
284 | HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1); |
300 | 285 | ||
301 | 286 | ||
302 | /* USER CODE END 2 */ |
287 | /* USER CODE END 2 */ |
303 | 288 | ||
304 | /* Infinite loop */ |
289 | /* Infinite loop */ |
Line 336... | Line 321... | ||
336 | if (send) |
321 | if (send) |
337 | { |
322 | { |
338 | send = 0; |
323 | send = 0; |
339 | 324 | ||
340 | uint16_t val; |
325 | uint16_t val; |
341 | val = __HAL_TIM_GET_COUNTER(&htim2); |
326 | val = __HAL_TIM_GET_COMPARE(&htim2,TIM_CHANNEL_1); |
342 | PutCharSerial(&uc2,(val&31) + 32); |
327 | PutCharSerial(&uc2,(val&31) + 32); |
343 | 328 | ||
- | 329 | ||
- | 330 | ||
344 | // send the observations |
331 | // send the observations |
345 | ProcessRPM(0); |
332 | ProcessRPM(0); |
346 | ProcessCHT(0); |
333 | ProcessCHT(0); |
347 | ProcessBatteryVoltage(0); |
334 | // ProcessBatteryVoltage(0); |
348 | ProcessBatteryVoltage(1); |
335 | // ProcessBatteryVoltage(1); |
349 | 336 | ||
350 | PutCharSerial(&uc1,PLX_Stop); |
337 | PutCharSerial(&uc1,PLX_Stop); |
351 | } |
338 | } |
352 | 339 | ||
353 | } |
340 | } |
Line 511... | Line 498... | ||
511 | { |
498 | { |
512 | 499 | ||
513 | TIM_ClockConfigTypeDef sClockSourceConfig; |
500 | TIM_ClockConfigTypeDef sClockSourceConfig; |
514 | TIM_MasterConfigTypeDef sMasterConfig; |
501 | TIM_MasterConfigTypeDef sMasterConfig; |
515 | TIM_IC_InitTypeDef sConfigIC; |
502 | TIM_IC_InitTypeDef sConfigIC; |
516 | TIM_OC_InitTypeDef sConfigOC; |
- | |
517 | 503 | ||
518 | htim2.Instance = TIM2; |
504 | htim2.Instance = TIM2; |
519 | htim2.Init.Prescaler = 320; |
505 | htim2.Init.Prescaler = 320; |
520 | htim2.Init.CounterMode = TIM_COUNTERMODE_UP; |
506 | htim2.Init.CounterMode = TIM_COUNTERMODE_UP; |
521 | htim2.Init.Period = 0xFFFF; |
507 | htim2.Init.Period = 65535; |
522 | htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
508 | htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
523 | if (HAL_TIM_Base_Init(&htim2) != HAL_OK) |
509 | if (HAL_TIM_Base_Init(&htim2) != HAL_OK) |
524 | { |
510 | { |
525 | Error_Handler(); |
511 | Error_Handler(); |
526 | } |
512 | } |
Line 534... | Line 520... | ||
534 | if (HAL_TIM_IC_Init(&htim2) != HAL_OK) |
520 | if (HAL_TIM_IC_Init(&htim2) != HAL_OK) |
535 | { |
521 | { |
536 | Error_Handler(); |
522 | Error_Handler(); |
537 | } |
523 | } |
538 | 524 | ||
539 | if (HAL_TIM_OC_Init(&htim2) != HAL_OK) |
- | |
540 | { |
- | |
541 | Error_Handler(); |
- | |
542 | } |
- | |
543 | - | ||
544 | if (HAL_TIM_PWM_Init(&htim2) != HAL_OK) |
- | |
545 | { |
- | |
546 | Error_Handler(); |
- | |
547 | } |
- | |
548 | - | ||
549 | sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; |
525 | sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; |
550 | sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; |
526 | sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; |
551 | if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) |
527 | if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) |
552 | { |
528 | { |
553 | Error_Handler(); |
529 | Error_Handler(); |
554 | } |
530 | } |
Line 560... | Line 536... | ||
560 | if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) |
536 | if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) |
561 | { |
537 | { |
562 | Error_Handler(); |
538 | Error_Handler(); |
563 | } |
539 | } |
564 | 540 | ||
565 | if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2) != HAL_OK) |
- | |
566 | { |
- | |
567 | Error_Handler(); |
- | |
568 | } |
- | |
569 | - | ||
570 | sConfigOC.OCMode = TIM_OCMODE_TIMING; |
- | |
571 | sConfigOC.Pulse = 0; |
- | |
572 | sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; |
- | |
573 | sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; |
- | |
574 | if (HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) |
- | |
575 | { |
- | |
576 | Error_Handler(); |
- | |
577 | } |
- | |
578 | - | ||
579 | sConfigOC.OCMode = TIM_OCMODE_PWM1; |
- | |
580 | if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) |
- | |
581 | { |
- | |
582 | Error_Handler(); |
- | |
583 | } |
- | |
584 | - | ||
585 | HAL_TIM_MspPostInit(&htim2); |
- | |
586 | - | ||
587 | } |
541 | } |
588 | 542 | ||
589 | /* TIM6 init function */ |
543 | /* TIM6 init function */ |
590 | static void MX_TIM6_Init(void) |
544 | static void MX_TIM6_Init(void) |
591 | { |
545 | { |
592 | 546 | ||
593 | TIM_MasterConfigTypeDef sMasterConfig; |
547 | TIM_MasterConfigTypeDef sMasterConfig; |
594 | 548 | ||
595 | htim6.Instance = TIM6; |
549 | htim6.Instance = TIM6; |
596 | htim6.Init.Prescaler = 3200; |
550 | htim6.Init.Prescaler = 320; |
597 | htim6.Init.CounterMode = TIM_COUNTERMODE_UP; |
551 | htim6.Init.CounterMode = TIM_COUNTERMODE_UP; |
598 | htim6.Init.Period = 1000; |
552 | htim6.Init.Period = 9999; |
599 | if (HAL_TIM_Base_Init(&htim6) != HAL_OK) |
553 | if (HAL_TIM_Base_Init(&htim6) != HAL_OK) |
600 | { |
554 | { |
601 | Error_Handler(); |
555 | Error_Handler(); |
602 | } |
556 | } |
603 | 557 | ||
Line 727... | Line 681... | ||
727 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
681 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
728 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
682 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
729 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
683 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
730 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
684 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
731 | 685 | ||
732 | /*Configure GPIO pins : PB2 PB12 PB13 PB14 |
686 | /*Configure GPIO pins : PB2 PB10 PB11 PB12 |
733 | PB15 PB4 PB5 PB6 |
687 | PB13 PB14 PB15 PB3 |
- | 688 | PB4 PB5 PB6 PB7 |
|
734 | PB7 PB8 PB9 */ |
689 | PB8 PB9 */ |
735 | GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14 |
690 | GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12 |
736 | |GPIO_PIN_15|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6 |
691 | |GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_3 |
- | 692 | |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7 |
|
737 | |GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9; |
693 | |GPIO_PIN_8|GPIO_PIN_9; |
738 | GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; |
694 | GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; |
739 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
695 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
740 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
696 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
741 | 697 | ||
742 | /*Configure GPIO pin : PD2 */ |
698 | /*Configure GPIO pin : PD2 */ |