Skip to content

Commit 2456d3b

Browse files
committed
Set all outputs LOW
1 parent f39e628 commit 2456d3b

File tree

1 file changed

+35
-5
lines changed

1 file changed

+35
-5
lines changed

src/drivers/hardware_specific/stm32/stm32_mcu.cpp

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,7 @@ void* _configure8PWM(long pwm_frequency, float dead_zone)
680680
// Enable clock for TIM1 and TIM8
681681
__HAL_RCC_TIM1_CLK_ENABLE();
682682
__HAL_RCC_TIM8_CLK_ENABLE();
683-
__HAL_RCC_GPIOE_CLK_ENABLE();
683+
684684
// Configure PE8, PE9, PE10, PE11, PE12, PE13 as TIM1 channels
685685
GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13;
686686
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
@@ -888,13 +888,27 @@ and they are used for driving push-pull outputs such as MOSFETs.
888888
TIM1->CCR2 = 0; // Set duty cycle to 0%
889889
TIM1->CCR3 = 0; // Set duty cycle to 0%
890890
TIM1->CCR4 = 0; // Set duty cycle to 0%
891-
TIM1->BDTR |= TIM_BDTR_MOE; // Main output enable
892891

893-
// Configure TIM8 for PWM output
892+
GPIOE->AFR[1] &= ~(GPIO_AFRH_AFRH8); // Clear alternate function for PE8
893+
GPIOE->AFR[1] |= (0x2 << GPIO_AFRH_AFRH8_Pos); // Set alternate function for PE8
894+
GPIOE->AFR[1] &= ~(GPIO_AFRH_AFRH9); // Clear alternate function for PE9
895+
GPIOE->AFR[1] |= (0x2 << GPIO_AFRH_AFRH9_Pos); // Set alternate function for PE9
896+
GPIOE->AFR[1] &= ~(GPIO_AFRH_AFRH10); // Clear alternate function for PE10
897+
GPIOE->AFR[1] |= (0x2 << GPIO_AFRH_AFRH10_Pos); // Set alternate function for PE10
898+
GPIOE->AFR[1] &= ~(GPIO_AFRH_AFRH11); // Clear alternate function for PE11
899+
GPIOE->AFR[1] |= (0x2 << GPIO_AFRH_AFRH11_Pos); // Set alternate function for PE11
900+
GPIOE->AFR[1] &= ~(GPIO_AFRH_AFRH12); // Clear alternate function for PE12
901+
GPIOE->AFR[1] |= (0x2 << GPIO_AFRH_AFRH12_Pos); // Set alternate function for PE12
902+
GPIOE->AFR[1] &= ~(GPIO_AFRH_AFRH13); // Clear alternate function for PE13
903+
GPIOE->AFR[1] |= (0x2 << GPIO_AFRH_AFRH13_Pos); // Set alternate function for PE13
904+
TIM1->BDTR |= TIM_BDTR_MOE; // Main output enable
905+
// Configure CH2 and CH2N on TIM8
894906
TIM8->CR1 |= TIM_CR1_ARPE; // Auto-reload preload enable
895907
TIM8->CR1 &= ~TIM_CR1_DIR; // Up counting mode
896-
TIM8->CCMR1 |= TIM_CCMR1_OC1PE | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; // PWM mode 1 on OC1
897-
TIM8->CCER |= TIM_CCER_CC1E; // Enable output on OC1
908+
TIM8->CR1 &= ~TIM_CR1_CMS; // Set counter mode to center-aligned
909+
TIM8->CR1 |= TIM_CR1_CMS_0 | TIM_CR1_CMS_1; // Set counter mode to center-aligned 3
910+
TIM8->CCMR1 |= TIM_CCMR1_OC2PE | TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2; // PWM mode 1 on OC2
911+
TIM8->CCER |= TIM_CCER_CC2E; // Enable output on OC2
898912
TIM8->PSC = 0; // Set prescaler to 0
899913
TIM8->ARR = (168000000 / (38000 * 2)) - 1; // Set auto-reload value for 38kHz frequency
900914
TIM8->CCR1 = 0; // Set duty cycle to 0%
@@ -903,12 +917,28 @@ and they are used for driving push-pull outputs such as MOSFETs.
903917
TIM8->CCR4 = 0; // Set duty cycle to 0%
904918
TIM8->BDTR |= TIM_BDTR_MOE; // Main output enable
905919

920+
GPIOA->AFR[1] &= ~(GPIO_AFRH_AFRH2); // Clear alternate function for PA14
921+
GPIOA->AFR[1] |= (0x8 << GPIO_AFRH_AFRH2_Pos); // Set alternate function for PA14
922+
GPIOB->AFR[0] &= ~(GPIO_AFRL_AFRL0); // Clear alternate function for PB0
923+
GPIOB->AFR[0] |= (0x8 << GPIO_AFRL_AFRL0_Pos); // Set alternate function for PB0
924+
TIM8->BDTR |= TIM_BDTR_MOE; // Main output enable
925+
906926
// Start TIM1 and TIM8 PWM outputs
907927
TIM1->EGR |= TIM_EGR_UG; // Generate update event to load new settings
908928
TIM8->EGR |= TIM_EGR_UG; // Generate update event to load new settings
909929
TIM1->CR1 |= TIM_CR1_CEN; // Enable TIM1 counter
910930
TIM8->CR1 |= TIM_CR1_CEN; // Enable TIM8 counter
911931

932+
// Setting ALL pins to LOW
933+
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_RESET);
934+
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9, GPIO_PIN_RESET);
935+
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_RESET);
936+
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11, GPIO_PIN_RESET);
937+
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_12, GPIO_PIN_RESET);
938+
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_13, GPIO_PIN_RESET);
939+
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_14, GPIO_PIN_RESET);
940+
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
941+
912942

913943
return NULL;
914944

0 commit comments

Comments
 (0)