void BeepInit(void) { rcc_peripheral_enable_clock(&RCC_APB1ENR, BEEP_RCC_APB1ENR_TIMEN); gpio_set_mode(BEEP_PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, BEEP_PIN); timer_set_mode(BEEP_TIM, TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP); /* Period */ timer_set_period(BEEP_TIM, 65535); /* Prescaler */ timer_set_prescaler(BEEP_TIM, 5); timer_generate_event(BEEP_TIM, TIM_EGR_UG); /* ---- */ /* Output compare 1 mode and preload */ timer_set_oc_mode(BEEP_TIM, BEEP_TIM_OC, TIM_OCM_PWM1); timer_enable_oc_preload(BEEP_TIM, BEEP_TIM_OC); /* Polarity and state */ timer_set_oc_polarity_low(BEEP_TIM, BEEP_TIM_OC); timer_enable_oc_output(BEEP_TIM, BEEP_TIM_OC); /* Capture compare value */ timer_set_oc_value(BEEP_TIM, BEEP_TIM_OC, 0x8000); /* ---- */ /* ARR reload enable */ timer_enable_preload(BEEP_TIM); }
void hbridge_init() { // M- bridge // A9 - pin 21 - PWM2A - HIN // B0 - pin 15 - PWM2B - \LIN // M+ bridge // A8 - pin 20 - PWM1A - HIN // A7 - pin 14 - PWM1B - \LIN rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN | RCC_APB2ENR_AFIOEN | RCC_APB2ENR_TIM1EN); AFIO_MAPR |= AFIO_MAPR_TIM1_REMAP_PARTIAL_REMAP; gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO7 | GPIO8 | GPIO9); gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO0); timer_reset(TIM1); timer_set_mode(TIM1, TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_CENTER_1, TIM_CR1_DIR_UP); timer_set_period(TIM1, half_period_ticks); timer_set_prescaler(TIM1, 9); // / 10 timer_set_oc_mode(TIM1, TIM_OC1, TIM_OCM_PWM2); timer_set_oc_polarity_high(TIM1, TIM_OC1); timer_set_oc_polarity_low(TIM1, TIM_OC1N); timer_enable_oc_output(TIM1, TIM_OC1); timer_enable_oc_output(TIM1, TIM_OC1N); timer_set_oc_value(TIM1, TIM_OC1, half_period_ticks); timer_set_oc_mode(TIM1, TIM_OC2, TIM_OCM_PWM2); timer_set_oc_polarity_high(TIM1, TIM_OC2); timer_set_oc_polarity_low(TIM1, TIM_OC2N); timer_enable_oc_output(TIM1, TIM_OC2); timer_enable_oc_output(TIM1, TIM_OC2N); timer_set_oc_value(TIM1, TIM_OC2, half_period_ticks); timer_enable_break_main_output(TIM1); timer_enable_counter(TIM1); }