Skip to content

Commit fa0ddf3

Browse files
committed
Update stm32_mcu.cpp
1 parent 2456d3b commit fa0ddf3

File tree

1 file changed

+34
-71
lines changed

1 file changed

+34
-71
lines changed

src/drivers/hardware_specific/stm32/stm32_mcu.cpp

Lines changed: 34 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -876,68 +876,41 @@ and they are used for driving push-pull outputs such as MOSFETs.
876876

877877

878878

879-
// Configure TIM1 for PWM output
880-
TIM1->CR1 |= TIM_CR1_ARPE; // Auto-reload preload enable
881-
TIM1->CR1 &= ~TIM_CR1_DIR; // Up counting mode
882-
TIM1->CCMR1 |= TIM_CCMR1_OC1PE | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; // PWM mode 1 on OC1
883-
TIM1->CCMR2 |= TIM_CCMR2_OC3PE | TIM_CCMR2_OC4PE | TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2; // PWM mode 1 on OC3 and OC4
884-
TIM1->CCER |= TIM_CCER_CC1E | TIM_CCER_CC3E | TIM_CCER_CC4E; // Enable output on OC1, OC3, and OC4
885-
TIM1->PSC = 0; // Set prescaler to 0
886-
TIM1->ARR = (168000000 / (38000 * 2)) - 1; // Set auto-reload value for 38kHz frequency
887-
TIM1->CCR1 = 0; // Set duty cycle to 0%
888-
TIM1->CCR2 = 0; // Set duty cycle to 0%
889-
TIM1->CCR3 = 0; // Set duty cycle to 0%
890-
TIM1->CCR4 = 0; // Set duty cycle to 0%
891-
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
906-
TIM8->CR1 |= TIM_CR1_ARPE; // Auto-reload preload enable
907-
TIM8->CR1 &= ~TIM_CR1_DIR; // Up counting mode
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
912-
TIM8->PSC = 0; // Set prescaler to 0
913-
TIM8->ARR = (168000000 / (38000 * 2)) - 1; // Set auto-reload value for 38kHz frequency
914-
TIM8->CCR1 = 0; // Set duty cycle to 0%
915-
TIM8->CCR2 = 0; // Set duty cycle to 0%
916-
TIM8->CCR3 = 0; // Set duty cycle to 0%
917-
TIM8->CCR4 = 0; // Set duty cycle to 0%
918-
TIM8->BDTR |= TIM_BDTR_MOE; // Main output enable
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-
926-
// Start TIM1 and TIM8 PWM outputs
927-
TIM1->EGR |= TIM_EGR_UG; // Generate update event to load new settings
928-
TIM8->EGR |= TIM_EGR_UG; // Generate update event to load new settings
929-
TIM1->CR1 |= TIM_CR1_CEN; // Enable TIM1 counter
930-
TIM8->CR1 |= TIM_CR1_CEN; // Enable TIM8 counter
879+
931880

932881
// 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);
882+
if (HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_RESET)!= HAL_OK)
883+
{return (STM32DriverParams*)SIMPLEFOC_DRIVER_INIT_FAILED;
884+
}else{Serial.println("TIM1_CH1 READY - LOW OK");}
885+
886+
if (HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9, GPIO_PIN_RESET)!= HAL_OK)
887+
{return (STM32DriverParams*)SIMPLEFOC_DRIVER_INIT_FAILED;
888+
}else{Serial.println("TIM1_CH1N READY - LOW OK");}
889+
890+
if (HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_RESET)!= HAL_OK)
891+
{return (STM32DriverParams*)SIMPLEFOC_DRIVER_INIT_FAILED;
892+
}else{Serial.println("TIM1_CH2 READY - LOW OK");}
893+
894+
if (HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11, GPIO_PIN_RESET)!= HAL_OK)
895+
{return (STM32DriverParams*)SIMPLEFOC_DRIVER_INIT_FAILED;
896+
}else{Serial.println("TIM1_CH2N READY - LOW OK");}
897+
898+
if (HAL_GPIO_WritePin(GPIOE, GPIO_PIN_12, GPIO_PIN_RESET)!= HAL_OK)
899+
{return (STM32DriverParams*)SIMPLEFOC_DRIVER_INIT_FAILED;
900+
}else{Serial.println("TIM1_CH3 READY - LOW OK");}
901+
902+
if (HAL_GPIO_WritePin(GPIOE, GPIO_PIN_13, GPIO_PIN_RESET)!= HAL_OK)
903+
{return (STM32DriverParams*)SIMPLEFOC_DRIVER_INIT_FAILED;
904+
}else{Serial.println("TIM1_CH3N READY - LOW OK");}
905+
906+
if (HAL_GPIO_WritePin(GPIOA, GPIO_PIN_14, GPIO_PIN_RESET)!= HAL_OK)
907+
{return (STM32DriverParams*)SIMPLEFOC_DRIVER_INIT_FAILED;
908+
}else{Serial.println("TIM8_CH2 READY - LOW OK");}
909+
910+
911+
if (HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET)!= HAL_OK)
912+
{return (STM32DriverParams*)SIMPLEFOC_DRIVER_INIT_FAILED;
913+
}else{Serial.println("TIM8_CH2N READY - LOW OK");}
941914

942915

943916
return NULL;
@@ -961,11 +934,6 @@ the code next to each other to ensure that the timers are properly initialized a
961934

962935

963936

964-
965-
966-
967-
968-
969937
// function setting the pwm duty cycle to the hardware
970938
// - DC motor - 1PWM setting
971939
// - hardware speciffic
@@ -1010,12 +978,7 @@ void _writeDutyCycle4PWM(float dc_1a, float dc_1b, float dc_2a, float dc_2b, vo
1010978

1011979

1012980

1013-
1014-
1015-
1016-
1017-
1018-
int period;
981+
int period = 4359;
1019982

1020983

1021984
void _writeDutyCycle8PWM(float duty_cycle1_h1, float duty_cycle1_h2, float duty_cycle2_h1, float duty_cycle2_h2,

0 commit comments

Comments
 (0)