@@ -680,7 +680,7 @@ void* _configure8PWM(long pwm_frequency, float dead_zone)
680
680
// Enable clock for TIM1 and TIM8
681
681
__HAL_RCC_TIM1_CLK_ENABLE ();
682
682
__HAL_RCC_TIM8_CLK_ENABLE ();
683
- __HAL_RCC_GPIOE_CLK_ENABLE ();
683
+
684
684
// Configure PE8, PE9, PE10, PE11, PE12, PE13 as TIM1 channels
685
685
GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13;
686
686
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
@@ -888,13 +888,27 @@ and they are used for driving push-pull outputs such as MOSFETs.
888
888
TIM1->CCR2 = 0 ; // Set duty cycle to 0%
889
889
TIM1->CCR3 = 0 ; // Set duty cycle to 0%
890
890
TIM1->CCR4 = 0 ; // Set duty cycle to 0%
891
- TIM1->BDTR |= TIM_BDTR_MOE; // Main output enable
892
891
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
894
906
TIM8->CR1 |= TIM_CR1_ARPE; // Auto-reload preload enable
895
907
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
898
912
TIM8->PSC = 0 ; // Set prescaler to 0
899
913
TIM8->ARR = (168000000 / (38000 * 2 )) - 1 ; // Set auto-reload value for 38kHz frequency
900
914
TIM8->CCR1 = 0 ; // Set duty cycle to 0%
@@ -903,12 +917,28 @@ and they are used for driving push-pull outputs such as MOSFETs.
903
917
TIM8->CCR4 = 0 ; // Set duty cycle to 0%
904
918
TIM8->BDTR |= TIM_BDTR_MOE; // Main output enable
905
919
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
+
906
926
// Start TIM1 and TIM8 PWM outputs
907
927
TIM1->EGR |= TIM_EGR_UG; // Generate update event to load new settings
908
928
TIM8->EGR |= TIM_EGR_UG; // Generate update event to load new settings
909
929
TIM1->CR1 |= TIM_CR1_CEN; // Enable TIM1 counter
910
930
TIM8->CR1 |= TIM_CR1_CEN; // Enable TIM8 counter
911
931
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
+
912
942
913
943
return NULL ;
914
944
0 commit comments