void pwmout_init(pwmout_t* obj, PinName pin) { // Get the peripheral name from the pin and assign it to the object obj->pwm = (PWMName)pinmap_peripheral(pin, PinMap_PWM); MBED_ASSERT(obj->pwm != (PWMName)NC); // Get the functions (timer channel, (non)inverted) from the pin and assign it to the object uint32_t function = pinmap_function(pin, PinMap_PWM); MBED_ASSERT(function != (uint32_t)NC); obj->channel = STM_PIN_CHANNEL(function); obj->inverted = STM_PIN_INVERTED(function); // Enable TIM clock if (obj->pwm == PWM_1) __HAL_RCC_TIM1_CLK_ENABLE(); if (obj->pwm == PWM_2) __HAL_RCC_TIM2_CLK_ENABLE(); if (obj->pwm == PWM_3) __HAL_RCC_TIM3_CLK_ENABLE(); if (obj->pwm == PWM_4) __HAL_RCC_TIM4_CLK_ENABLE(); if (obj->pwm == PWM_8) __HAL_RCC_TIM8_CLK_ENABLE(); if (obj->pwm == PWM_9) __HAL_RCC_TIM9_CLK_ENABLE(); if (obj->pwm == PWM_10) __HAL_RCC_TIM10_CLK_ENABLE(); if (obj->pwm == PWM_11) __HAL_RCC_TIM11_CLK_ENABLE(); if (obj->pwm == PWM_12) __HAL_RCC_TIM12_CLK_ENABLE(); if (obj->pwm == PWM_13) __HAL_RCC_TIM13_CLK_ENABLE(); if (obj->pwm == PWM_14) __HAL_RCC_TIM14_CLK_ENABLE(); // Configure GPIO pinmap_pinout(pin, PinMap_PWM); obj->pin = pin; obj->period = 0; obj->pulse = 0; obj->prescaler = 1; pwmout_period_us(obj, 20000); // 20 ms per default }
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) { if(htim_base->Instance==TIM3) { /* USER CODE BEGIN TIM3_MspInit 0 */ /* USER CODE END TIM3_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM3_CLK_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM3_IRQn); /* USER CODE BEGIN TIM3_MspInit 1 */ /* USER CODE END TIM3_MspInit 1 */ } else if(htim_base->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspInit 0 */ /* USER CODE END TIM4_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM4_CLK_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM4_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM4_IRQn); /* USER CODE BEGIN TIM4_MspInit 1 */ /* USER CODE END TIM4_MspInit 1 */ } }
/** * @brief TIM MSP Initialization * This function configures the hardware resources used in this example: * - Peripheral's clock enable * - Peripheral's GPIO Configuration * @param htim: TIM handle pointer * @retval None */ void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_InitStruct; /* Enable TIM1, TIM3 & TIM4 clocks */ __HAL_RCC_TIM1_CLK_ENABLE(); __HAL_RCC_TIM3_CLK_ENABLE(); __HAL_RCC_TIM4_CLK_ENABLE(); /* Enable GPIOA, GPIOB & GPIOC Clocks */ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); /* Configure PA.8 (TIM1_Channel1), PC.6 (TIM3_Channel1) and PB.6 (TIM4_Channel1), in push-pull, alternate function mode */ GPIO_InitStruct.Pin = GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; GPIO_InitStruct.Pin = GPIO_PIN_6; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; GPIO_InitStruct.Pin = GPIO_PIN_6; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); }
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) { GPIO_InitTypeDef GPIO_InitStruct; if(htim_base->Instance==TIM2) { /* USER CODE BEGIN TIM2_MspInit 0 */ /* USER CODE END TIM2_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM2_CLK_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM2_IRQn, 15, 0); HAL_NVIC_EnableIRQ(TIM2_IRQn); /* USER CODE BEGIN TIM2_MspInit 1 */ /* USER CODE END TIM2_MspInit 1 */ } else if(htim_base->Instance==TIM3) { /* USER CODE BEGIN TIM3_MspInit 0 */ /* USER CODE END TIM3_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM3_CLK_ENABLE(); /**TIM3 GPIO Configuration PB1 ------> TIM3_CH4 */ GPIO_InitStruct.Pin = IR_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(IR_GPIO_Port, &GPIO_InitStruct); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM3_IRQn, 15, 0); HAL_NVIC_EnableIRQ(TIM3_IRQn); /* USER CODE BEGIN TIM3_MspInit 1 */ /* USER CODE END TIM3_MspInit 1 */ } else if(htim_base->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspInit 0 */ /* USER CODE END TIM4_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM4_CLK_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM4_IRQn, 15, 0); HAL_NVIC_EnableIRQ(TIM4_IRQn); /* USER CODE BEGIN TIM4_MspInit 1 */ /* USER CODE END TIM4_MspInit 1 */ } }
void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle) { GPIO_InitTypeDef GPIO_InitStruct; if(tim_encoderHandle->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspInit 0 */ /* USER CODE END TIM4_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM4_CLK_ENABLE(); /**TIM4 GPIO Configuration PD12 ------> TIM4_CH1 PD13 ------> TIM4_CH2 */ GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM4_IRQn, 2, 0); HAL_NVIC_EnableIRQ(TIM4_IRQn); /* USER CODE BEGIN TIM4_MspInit 1 */ /* USER CODE END TIM4_MspInit 1 */ } else if(tim_encoderHandle->Instance==TIM8) { /* USER CODE BEGIN TIM8_MspInit 0 */ /* USER CODE END TIM8_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM8_CLK_ENABLE(); /**TIM8 GPIO Configuration PC6 ------> TIM8_CH1 PC7 ------> TIM8_CH2 */ GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF3_TIM8; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM8_BRK_TIM12_IRQn, 2, 0); HAL_NVIC_EnableIRQ(TIM8_BRK_TIM12_IRQn); /* USER CODE BEGIN TIM8_MspInit 1 */ /* USER CODE END TIM8_MspInit 1 */ } }
/** * @brief TIM Input Capture MSP Initialization * This function configures the hardware resources used in this example: * - Peripheral's clock enable * - Peripheral's GPIO Configuration * @param htim: TIM handle pointer * @retval None */ void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim) { /*## Enable peripherals and GPIO Clocks ####################################*/ /* TIMx Peripheral clock enable */ __HAL_RCC_TIM4_CLK_ENABLE(); /*## Configure the NVIC for TIMx ###########################################*/ HAL_NVIC_SetPriority(TIM4_IRQn,0,0); /* Enable the TIM4 global Interrupt */ HAL_NVIC_EnableIRQ(TIM4_IRQn); }
void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle) { GPIO_InitTypeDef GPIO_InitStruct; if(tim_encoderHandle->Instance==TIM3) { /* USER CODE BEGIN TIM3_MspInit 0 */ /* USER CODE END TIM3_MspInit 0 */ /* TIM3 clock enable */ __HAL_RCC_TIM3_CLK_ENABLE(); /**TIM3 GPIO Configuration PB4 ------> TIM3_CH1 PB5 ------> TIM3_CH2 */ GPIO_InitStruct.Pin = M0_ENC_A_Pin|M0_ENC_B_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* USER CODE BEGIN TIM3_MspInit 1 */ /* USER CODE END TIM3_MspInit 1 */ } else if(tim_encoderHandle->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspInit 0 */ /* USER CODE END TIM4_MspInit 0 */ /* TIM4 clock enable */ __HAL_RCC_TIM4_CLK_ENABLE(); /**TIM4 GPIO Configuration PB6 ------> TIM4_CH1 PB7 ------> TIM4_CH2 */ GPIO_InitStruct.Pin = M1_ENC_A_Pin|M1_ENC_B_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* USER CODE BEGIN TIM4_MspInit 1 */ /* USER CODE END TIM4_MspInit 1 */ } }
/** * @brief TIM_Base MSP Initialization * This function configures the hardware resources used in this example * @param htim_base: TIM_Base handle pointer * @retval None */ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) { if(htim_base->Instance==TIM2) { /* USER CODE BEGIN TIM2_MspInit 0 */ /* USER CODE END TIM2_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM2_CLK_ENABLE(); /* USER CODE BEGIN TIM2_MspInit 1 */ /* USER CODE END TIM2_MspInit 1 */ } else if(htim_base->Instance==TIM3) { /* USER CODE BEGIN TIM3_MspInit 0 */ /* USER CODE END TIM3_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM3_CLK_ENABLE(); /* USER CODE BEGIN TIM3_MspInit 1 */ /* USER CODE END TIM3_MspInit 1 */ } else if(htim_base->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspInit 0 */ /* USER CODE END TIM4_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM4_CLK_ENABLE(); /* USER CODE BEGIN TIM4_MspInit 1 */ /* USER CODE END TIM4_MspInit 1 */ } else if(htim_base->Instance==TIM5) { /* USER CODE BEGIN TIM5_MspInit 0 */ /* USER CODE END TIM5_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM5_CLK_ENABLE(); /* USER CODE BEGIN TIM5_MspInit 1 */ /* USER CODE END TIM5_MspInit 1 */ } }
// Configures TIM4 Peripheral for LEDs lighting. static void TIM_LED_Config(void) { __HAL_RCC_TIM4_CLK_ENABLE(); HAL_NVIC_SetPriority(TIM4_IRQn, 7, 0); HAL_NVIC_EnableIRQ(TIM4_IRQn); /* ----------------------------------------------------------------------- TIM4 Configuration: Output Compare Timing Mode: To get TIM4 counter clock at 250 KHz, the prescaler is computed as follows: Prescaler = (TIM4CLK / TIM4 counter clock) - 1 Prescaler = ((f(APB1) * 2) / 250 KHz) - 1 CC update rate = TIM4 counter clock / CCR_Val = 32.687 Hz ==> Toggling frequency = 16.343 Hz ----------------------------------------------------------------------- */ /* Compute the prescaler value */ uint16_t prescalervalue = (uint16_t) ((HAL_RCC_GetPCLK1Freq() * 2) / 250000) - 1; /* Time base configuration */ ledTimer.Instance = TIM4; ledTimer.Init.Period = 65535; ledTimer.Init.Prescaler = prescalervalue; ledTimer.Init.ClockDivision = 0; ledTimer.Init.CounterMode = TIM_COUNTERMODE_UP; if (HAL_TIM_OC_Init(&ledTimer) != HAL_OK) { Error_Handler(); } /* Output Compare Timing Mode configuration: Channel1 */ ledConfig.OCMode = TIM_OCMODE_TIMING; ledConfig.OCIdleState = TIM_OCIDLESTATE_SET; ledConfig.Pulse = CCR1Val; ledConfig.OCPolarity = TIM_OCPOLARITY_HIGH; ledConfig.OCNPolarity = TIM_OCNPOLARITY_HIGH; ledConfig.OCFastMode = TIM_OCFAST_ENABLE; ledConfig.OCNIdleState = TIM_OCNIDLESTATE_SET; /* Initialize the TIM4 Channel1 with the structure above */ if (HAL_TIM_OC_ConfigChannel(&ledTimer, &ledConfig, TIM_CHANNEL_1) != HAL_OK) { Error_Handler(); } /* Start the Output Compare */ if (HAL_TIM_OC_Start_IT(&ledTimer, TIM_CHANNEL_1) != HAL_OK) { Error_Handler(); } }
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm) { if(htim_pwm->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspInit 0 */ /* USER CODE END TIM4_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM4_CLK_ENABLE(); /* USER CODE BEGIN TIM4_MspInit 1 */ /* USER CODE END TIM4_MspInit 1 */ } }
/* * This function initializes pin and enables clocks for output PWM pins. These pins * are the input pins for motors MTy1, MTy2, MTx1, MTx2 */ void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_InitStruct; /*Left & Right Motors input pins in TIM4*/ __HAL_RCC_TIM4_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9; //Motor Left -> PB6 & PB7, Motor Right -> PB8 & PB9 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); }
/** * @brief 初始化电机PWM. * @param None * @retval None */ void Motor_Pwm_Init(void){ //PWM引脚 GPIO_InitTypeDef GPIO_InitStruct; __HAL_RCC_TIM4_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); //TIM4 TimHandleT4.Instance = TIM4; TimHandleT4.Init.Period = 1000 - 1;; TimHandleT4.Init.Prescaler = 10-1; TimHandleT4.Init.ClockDivision = 0; TimHandleT4.Init.CounterMode = TIM_COUNTERMODE_UP; HAL_TIM_PWM_Init(&TimHandleT4); pwmConfig.OCMode=TIM_OCMODE_PWM1; pwmConfig.Pulse=700; HAL_TIM_PWM_ConfigChannel(&TimHandleT4, &pwmConfig, TIM_CHANNEL_3); HAL_TIM_PWM_ConfigChannel(&TimHandleT4, &pwmConfig, TIM_CHANNEL_4); HAL_TIM_PWM_Start(&TimHandleT4, TIM_CHANNEL_3); HAL_TIM_PWM_Start(&TimHandleT4, TIM_CHANNEL_4); //电机控制引脚 /* __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FAST; GPIO_InitStruct.Pin =GPIO_PIN_13|GPIO_PIN_14; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin =GPIO_PIN_2|GPIO_PIN_12; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); */ }
void pwmout_init(pwmout_t* obj, PinName pin) { // Get the peripheral name from the pin and assign it to the object obj->pwm = (PWMName)pinmap_peripheral(pin, PinMap_PWM); MBED_ASSERT(obj->pwm != (PWMName)NC); // Get the pin function and assign the used channel to the object uint32_t function = pinmap_function(pin, PinMap_PWM); MBED_ASSERT(function != (uint32_t)NC); obj->channel = STM_PIN_CHANNEL(function); obj->inverted = STM_PIN_INVERTED(function); // Enable TIM clock if (obj->pwm == PWM_1) __HAL_RCC_TIM1_CLK_ENABLE(); if (obj->pwm == PWM_2) __HAL_RCC_TIM2_CLK_ENABLE(); #if defined(TIM3_BASE) if (obj->pwm == PWM_3) __HAL_RCC_TIM3_CLK_ENABLE(); #endif #if defined(TIM4_BASE) if (obj->pwm == PWM_4) __HAL_RCC_TIM4_CLK_ENABLE(); #endif #if defined(TIM5_BASE) if (obj->pwm == PWM_5) __HAL_RCC_TIM5_CLK_ENABLE(); #endif #if defined(TIM8_BASE) if (obj->pwm == PWM_8) __HAL_RCC_TIM8_CLK_ENABLE(); #endif if (obj->pwm == PWM_15) __HAL_RCC_TIM15_CLK_ENABLE(); if (obj->pwm == PWM_16) __HAL_RCC_TIM16_CLK_ENABLE(); #if defined(TIM17_BASE) if (obj->pwm == PWM_17) __HAL_RCC_TIM17_CLK_ENABLE(); #endif // Configure GPIO pinmap_pinout(pin, PinMap_PWM); obj->pin = pin; obj->period = 0; obj->pulse = 0; obj->prescaler = 1; pwmout_period_us(obj, 20000); // 20 ms per default }
/** * @brief Initializes the TIM PWM MSP. * @param htim: TIM handle * @retval None */ void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_InitStructure; /* --------------------------- System Clocks Configuration -----------------*/ /* TIM4 clock enable */ __HAL_RCC_TIM4_CLK_ENABLE(); /* GPIOD clock enable */ __HAL_RCC_GPIOD_CLK_ENABLE(); /*-------------------------- GPIO Configuration ----------------------------*/ /* GPIOD Configuration: Pins 12, 13, 14 and 15 in output push-pull */ GPIO_InitStructure.Pin = GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; GPIO_InitStructure.Mode = GPIO_MODE_AF_PP; GPIO_InitStructure.Pull = GPIO_NOPULL; GPIO_InitStructure.Speed = GPIO_SPEED_HIGH; GPIO_InitStructure.Alternate = GPIO_AF2_TIM4; HAL_GPIO_Init(GPIOD, &GPIO_InitStructure); }
/** * @brief TIM MSP Initialization * This function configures the hardware resources used in this example: * - Peripheral's clock enable * - Peripheral's GPIO Configuration * @param htim: TIM handle pointer * @retval None */ void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_InitStruct; /*##-1- Enable peripherals and GPIO Clocks #################################*/ /* TIMs Peripheral clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); __HAL_RCC_TIM4_CLK_ENABLE(); __HAL_RCC_TIM5_CLK_ENABLE(); /* Enable GPIO Channels Clock */ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); /*##-2- Configure I/Os #####################################################*/ /* Configure PA.08 (TIM1_Channel1), PA.09 (TIM1_Channel2), PB.06 (TIM4_Channel1), PA.00 (TIM5_Channel1) in output, pull-down, alternate function mode */ /* Common configuration for all channels */ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLDOWN; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_8; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_9; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; GPIO_InitStruct.Pin = GPIO_PIN_6; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; GPIO_InitStruct.Pin = GPIO_PIN_0; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); }
static void TIM_Config(void) { TimHandle.Instance = TIM4; __HAL_RCC_TIM4_CLK_ENABLE(); /* Initialize TIM4 peripheral as follow: * Period = 10000 - 1 * Prescaler = ((SystemCoreClock/2)/10000) - 1 * ClockDivision = 0 * Counter direction = Up */ TimHandle.Init.Period = (CDC_POLLING_INTERVAL*1000) - 1; TimHandle.Init.Prescaler = 84-1; TimHandle.Init.ClockDivision = 0; TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP; if (HAL_TIM_Base_Init(&TimHandle) != HAL_OK) { Error_Handler(); } HAL_NVIC_SetPriority(TIM4_IRQn, 6, 0); HAL_NVIC_EnableIRQ(TIM4_IRQn); }
/** * @brief Configures TIM4 Peripheral for LEDs lighting. * @param None * @retval None */ static void TIM_LED_Config(void) { uint16_t prescalervalue = 0; uint32_t tmpvalue = 0; /* TIM4 clock enable */ __HAL_RCC_TIM4_CLK_ENABLE(); /* Enable the TIM4 global Interrupt */ HAL_NVIC_SetPriority(TIM4_IRQn, 7, 0); HAL_NVIC_EnableIRQ(TIM4_IRQn); /* ----------------------------------------------------------------------- TIM4 Configuration: Output Compare Timing Mode: To get TIM4 counter clock at 550 KHz, the prescaler is computed as follows: Prescaler = (TIM4CLK / TIM4 counter clock) - 1 Prescaler = ((f(APB1) * 2) /550 KHz) - 1 CC update rate = TIM4 counter clock / CCR_Val = 32.687 Hz ==> Toggling frequency = 16.343 Hz ----------------------------------------------------------------------- */ /* Compute the prescaler value */ tmpvalue = HAL_RCC_GetPCLK1Freq(); prescalervalue = (uint16_t) ((tmpvalue * 2) / 550000) - 1; /* Time base configuration */ hTimLed.Instance = TIM4; hTimLed.Init.Period = 65535; hTimLed.Init.Prescaler = prescalervalue; hTimLed.Init.ClockDivision = 0; hTimLed.Init.CounterMode = TIM_COUNTERMODE_UP; if(HAL_TIM_OC_Init(&hTimLed) != HAL_OK) { /* Initialization Error */ Error_Handler(); } /* Output Compare Timing Mode configuration: Channel1 */ sConfigLed.OCMode = TIM_OCMODE_TIMING; sConfigLed.OCIdleState = TIM_OCIDLESTATE_SET; sConfigLed.Pulse = CCR1Val; sConfigLed.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigLed.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigLed.OCFastMode = TIM_OCFAST_ENABLE; sConfigLed.OCNIdleState = TIM_OCNIDLESTATE_SET; /* Initialize the TIM4 Channel1 with the structure above */ if(HAL_TIM_OC_ConfigChannel(&hTimLed, &sConfigLed, TIM_CHANNEL_1) != HAL_OK) { /* Initialization Error */ Error_Handler(); } /* Start the Output Compare */ if(HAL_TIM_OC_Start_IT(&hTimLed, TIM_CHANNEL_1) != HAL_OK) { /* Start Error */ Error_Handler(); } }
void enableGPIOPowerUsageAndNoiseReductions(void) { // AHB1 __HAL_RCC_BKPSRAM_CLK_ENABLE(); __HAL_RCC_DTCMRAMEN_CLK_ENABLE(); __HAL_RCC_DMA2_CLK_ENABLE(); __HAL_RCC_USB_OTG_HS_CLK_ENABLE(); __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_GPIOF_CLK_ENABLE(); __HAL_RCC_GPIOG_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOI_CLK_ENABLE(); #ifndef STM32F722xx __HAL_RCC_DMA2D_CLK_ENABLE(); __HAL_RCC_GPIOJ_CLK_ENABLE(); __HAL_RCC_GPIOK_CLK_ENABLE(); #endif //APB1 __HAL_RCC_TIM2_CLK_ENABLE(); __HAL_RCC_TIM3_CLK_ENABLE(); __HAL_RCC_TIM4_CLK_ENABLE(); __HAL_RCC_TIM5_CLK_ENABLE(); __HAL_RCC_TIM6_CLK_ENABLE(); __HAL_RCC_TIM7_CLK_ENABLE(); __HAL_RCC_TIM12_CLK_ENABLE(); __HAL_RCC_TIM13_CLK_ENABLE(); __HAL_RCC_TIM14_CLK_ENABLE(); __HAL_RCC_LPTIM1_CLK_ENABLE(); __HAL_RCC_SPI2_CLK_ENABLE(); __HAL_RCC_SPI3_CLK_ENABLE(); __HAL_RCC_USART2_CLK_ENABLE(); __HAL_RCC_USART3_CLK_ENABLE(); __HAL_RCC_UART4_CLK_ENABLE(); __HAL_RCC_UART5_CLK_ENABLE(); __HAL_RCC_I2C1_CLK_ENABLE(); __HAL_RCC_I2C2_CLK_ENABLE(); __HAL_RCC_I2C3_CLK_ENABLE(); __HAL_RCC_CAN1_CLK_ENABLE(); __HAL_RCC_DAC_CLK_ENABLE(); __HAL_RCC_UART7_CLK_ENABLE(); __HAL_RCC_UART8_CLK_ENABLE(); #ifndef STM32F722xx __HAL_RCC_I2C4_CLK_ENABLE(); __HAL_RCC_CAN2_CLK_ENABLE(); __HAL_RCC_CEC_CLK_ENABLE(); #endif //APB2 __HAL_RCC_TIM1_CLK_ENABLE(); __HAL_RCC_TIM8_CLK_ENABLE(); __HAL_RCC_USART1_CLK_ENABLE(); __HAL_RCC_USART6_CLK_ENABLE(); __HAL_RCC_ADC1_CLK_ENABLE(); __HAL_RCC_ADC2_CLK_ENABLE(); __HAL_RCC_ADC3_CLK_ENABLE(); __HAL_RCC_SDMMC1_CLK_ENABLE(); __HAL_RCC_SPI1_CLK_ENABLE(); __HAL_RCC_SPI4_CLK_ENABLE(); __HAL_RCC_TIM9_CLK_ENABLE(); __HAL_RCC_TIM10_CLK_ENABLE(); __HAL_RCC_TIM11_CLK_ENABLE(); __HAL_RCC_SPI5_CLK_ENABLE(); __HAL_RCC_SAI1_CLK_ENABLE(); __HAL_RCC_SAI2_CLK_ENABLE(); #ifndef STM32F722xx __HAL_RCC_SPI6_CLK_ENABLE(); #endif // // GPIO_InitTypeDef GPIO_InitStructure; // GPIO_StructInit(&GPIO_InitStructure); // GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // default is un-pulled input // // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; // GPIO_InitStructure.GPIO_Pin &= ~(GPIO_Pin_11 | GPIO_Pin_12); // leave USB D+/D- alone // // GPIO_InitStructure.GPIO_Pin &= ~(GPIO_Pin_13 | GPIO_Pin_14); // leave JTAG pins alone // GPIO_Init(GPIOA, &GPIO_InitStructure); // // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; // GPIO_Init(GPIOB, &GPIO_InitStructure); // // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; // GPIO_Init(GPIOC, &GPIO_InitStructure); // GPIO_Init(GPIOD, &GPIO_InitStructure); // GPIO_Init(GPIOE, &GPIO_InitStructure); }
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) { GPIO_InitTypeDef GPIO_InitStruct; if(htim_base->Instance==TIM1) { /* USER CODE BEGIN TIM1_MspInit 0 */ /* USER CODE END TIM1_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); /**TIM1 GPIO Configuration PE9 ------> TIM1_CH1 PE11 ------> TIM1_CH2 PE13 ------> TIM1_CH3 PE14 ------> TIM1_CH4 */ GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11|GPIO_PIN_13|GPIO_PIN_14; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); /* USER CODE BEGIN TIM1_MspInit 1 */ /* USER CODE END TIM1_MspInit 1 */ } else if(htim_base->Instance==TIM2) { /* USER CODE BEGIN TIM2_MspInit 0 */ /* USER CODE END TIM2_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM2_CLK_ENABLE(); /* USER CODE BEGIN TIM2_MspInit 1 */ /* USER CODE END TIM2_MspInit 1 */ } else if(htim_base->Instance==TIM3) { /* USER CODE BEGIN TIM3_MspInit 0 */ /* USER CODE END TIM3_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM3_CLK_ENABLE(); /* USER CODE BEGIN TIM3_MspInit 1 */ /* USER CODE END TIM3_MspInit 1 */ } else if(htim_base->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspInit 0 */ /* USER CODE END TIM4_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM4_CLK_ENABLE(); /* USER CODE BEGIN TIM4_MspInit 1 */ /* USER CODE END TIM4_MspInit 1 */ } }
/** \brief 温度控制硬件初始化 * * \return void */ void hw_TemperatureManageInit(void) { ///ADC配置,ADC1,in10,in11,in12,in13 GPIO_InitTypeDef GPIO_InitStruct; TIM_OC_InitTypeDef TIM_InitStruct; ADC_ChannelConfTypeDef sConfig; ADC_HandleStruct.Instance = ADC1; if (HAL_ADC_DeInit(&ADC_HandleStruct) != HAL_OK) { return; } ADC_HandleStruct.Init.ScanConvMode = ADC_SCAN_ENABLE; ADC_HandleStruct.Init.ContinuousConvMode = ENABLE; ADC_HandleStruct.Init.DiscontinuousConvMode = DISABLE; ADC_HandleStruct.Init.DataAlign = ADC_DATAALIGN_RIGHT; ADC_HandleStruct.Init.ExternalTrigConv = ADC_SOFTWARE_START; ADC_HandleStruct.Init.NbrOfConversion = HEATER_COUNT; init_BeforeADC(); HAL_ADC_Init(&ADC_HandleStruct); sConfig.Channel = ADC_CHANNEL_10; ///Channel_Extruder_0 sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5; HAL_ADC_ConfigChannel(&ADC_HandleStruct, &sConfig); #ifdef HEATBED_ENABLED sConfig.Channel = ADC_CHANNEL_11; ///Channel_bed sConfig.Rank = 2; sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5; HAL_ADC_ConfigChannel(&ADC_HandleStruct, &sConfig); #endif #ifdef EXTRUDER_2_ENABLED sConfig.Channel = ADC_CHANNEL_12; ///Channel_Extruder_1 sConfig.Rank = 3; sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5; HAL_ADC_ConfigChannel(&ADC_HandleStruct, &sConfig); #endif #ifdef EXTRUDER_3_ENABLED sConfig.Channel = ADC_CHANNEL_13; ///Channel_Extruder_2 sConfig.Rank = 4; sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5; HAL_ADC_ConfigChannel(&ADC_HandleStruct, &sConfig); #endif HAL_ADCEx_Calibration_Start(&ADC_HandleStruct); ///ADC时钟配置 采样周期100ms __HAL_RCC_TIM6_CLK_ENABLE(); TIM_ADC_HandleStruct.Instance = TIM6; TIM_ADC_HandleStruct.Init.Period = 1000 - 1; TIM_ADC_HandleStruct.Init.Prescaler = (uint32_t) (SystemCoreClock/2/10000) - 1; TIM_ADC_HandleStruct.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; TIM_ADC_HandleStruct.Init.CounterMode = TIM_COUNTERMODE_UP; HAL_TIM_Base_Init(&TIM_ADC_HandleStruct); __HAL_TIM_SET_COUNTER(&TIM_ADC_HandleStruct, 0); HAL_NVIC_SetPriority(TIM6_IRQn, 4, 0); HAL_NVIC_EnableIRQ(TIM6_IRQn); ///加热PWM配置 PB6,7,8,9 __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_6; #ifdef HEATBED_ENABLED GPIO_InitStruct.Pin |= GPIO_PIN_7; #endif #ifdef EXTRUDER_2_ENABLED GPIO_InitStruct.Pin |= GPIO_PIN_8; #endif #ifdef EXTRUDER_3_ENABLED GPIO_InitStruct.Pin |= GPIO_PIN_9; #endif GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; ///内部不做上下拉电阻 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); ///PWM时钟配置 __HAL_RCC_TIM4_CLK_ENABLE(); TIM_PWM_HandleStruct.Instance = TIM4; TIM_PWM_HandleStruct.Init.Prescaler = (uint32_t) (SystemCoreClock/2/250000) - 1; TIM_PWM_HandleStruct.Init.Period = 254; ///总共255 TIM_PWM_HandleStruct.Init.ClockDivision = 0; TIM_PWM_HandleStruct.Init.CounterMode = TIM_COUNTERMODE_UP; HAL_TIM_PWM_Init(&TIM_PWM_HandleStruct); TIM_InitStruct.OCMode = TIM_OCMODE_PWM1; TIM_InitStruct.OCPolarity = TIM_OCPOLARITY_HIGH; TIM_InitStruct.OCFastMode = TIM_OCFAST_DISABLE; TIM_InitStruct.Pulse = 0; HAL_TIM_PWM_ConfigChannel(&TIM_PWM_HandleStruct, &TIM_InitStruct, TIM_CHANNEL_1); #ifdef HEATBED_ENABLED HAL_TIM_PWM_ConfigChannel(&TIM_PWM_HandleStruct, &TIM_InitStruct, TIM_CHANNEL_2); #endif #ifdef EXTRUDER_2_ENABLED HAL_TIM_PWM_ConfigChannel(&TIM_PWM_HandleStruct, &TIM_InitStruct, TIM_CHANNEL_3); #endif #ifdef EXTRUDER_3_ENABLED HAL_TIM_PWM_ConfigChannel(&TIM_PWM_HandleStruct, &TIM_InitStruct, TIM_CHANNEL_4); #endif }
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) { GPIO_InitTypeDef GPIO_InitStruct; if(tim_baseHandle->Instance==TIM2) { /* USER CODE BEGIN TIM2_MspInit 0 */ /* USER CODE END TIM2_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM2_CLK_ENABLE(); /**TIM2 GPIO Configuration PA0-WKUP ------> TIM2_CH1 */ GPIO_InitStruct.Pin = ECHO_SENS__0_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF1_TIM2; HAL_GPIO_Init(ECHO_SENS__0_GPIO_Port, &GPIO_InitStruct); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM2_IRQn); /* USER CODE BEGIN TIM2_MspInit 1 */ /* USER CODE END TIM2_MspInit 1 */ } else if(tim_baseHandle->Instance==TIM3) { /* USER CODE BEGIN TIM3_MspInit 0 */ /* USER CODE END TIM3_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM3_CLK_ENABLE(); /**TIM3 GPIO Configuration PA6 ------> TIM3_CH1 */ GPIO_InitStruct.Pin = ECHO_SENS__1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; HAL_GPIO_Init(ECHO_SENS__1_GPIO_Port, &GPIO_InitStruct); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM3_IRQn); /* USER CODE BEGIN TIM3_MspInit 1 */ /* USER CODE END TIM3_MspInit 1 */ } else if(tim_baseHandle->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspInit 0 */ /* USER CODE END TIM4_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM4_CLK_ENABLE(); /**TIM4 GPIO Configuration PB6 ------> TIM4_CH1 */ GPIO_InitStruct.Pin = ECHO_SENS__2_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; HAL_GPIO_Init(ECHO_SENS__2_GPIO_Port, &GPIO_InitStruct); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM4_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM4_IRQn); /* USER CODE BEGIN TIM4_MspInit 1 */ /* USER CODE END TIM4_MspInit 1 */ } else if(tim_baseHandle->Instance==TIM5) { /* USER CODE BEGIN TIM5_MspInit 0 */ /* USER CODE END TIM5_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM5_CLK_ENABLE(); /**TIM5 GPIO Configuration PA1 ------> TIM5_CH2 */ GPIO_InitStruct.Pin = ECHO_SENS__3_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF2_TIM5; HAL_GPIO_Init(ECHO_SENS__3_GPIO_Port, &GPIO_InitStruct); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM5_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM5_IRQn); /* USER CODE BEGIN TIM5_MspInit 1 */ /* USER CODE END TIM5_MspInit 1 */ } else if(tim_baseHandle->Instance==TIM10) { /* USER CODE BEGIN TIM10_MspInit 0 */ /* USER CODE END TIM10_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM10_CLK_ENABLE(); /* USER CODE BEGIN TIM10_MspInit 1 */ /* USER CODE END TIM10_MspInit 1 */ } else if(tim_baseHandle->Instance==TIM11) { /* USER CODE BEGIN TIM11_MspInit 0 */ /* USER CODE END TIM11_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM11_CLK_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM11_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM11_IRQn); /* USER CODE BEGIN TIM11_MspInit 1 */ /* USER CODE END TIM11_MspInit 1 */ } }