這裏我給出的是STM32F427系列定時器4的PWM輸出源代碼,本人實測是完全好用的,看到網上的很多代碼很難實際加進去就用,需要驅動直流電機的可以直接拿走,不懂的可以私下交流,後續將一些STM32的源代碼就都放出來,我也是新手,互相交流,相互提升。qq:643375731
針對這個圖可以把一個坑給大家說出來,底下圖片VCC寫的是5V,其實是驅動不了的,用一個IO輸出高電平即3.3V就可以解決
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM4_Init();
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);//
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2);//
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);//
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4);//
while (1)
{
__HAL_RCC_TIM4_CLK_ENABLE();//這個地方必須寫,否則無效
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_1,1200);
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_2, 1200);
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, 1200);
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4, 1200);
}
}
/* TIM4 init function */
void MX_TIM4_Init(void)
{
TIM_MasterConfigTypeDef sMasterConfig;
TIM_OC_InitTypeDef sConfigOC;
htim4.Instance = TIM4;
htim4.Init.Prescaler = 89;
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
htim4.Init.Period = 2499;
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_PWM_Init(&htim4);
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig);
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2);
HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3);
HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4);
HAL_TIM_MspPostInit(&htim4);
}
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle)
{
if(tim_pwmHandle->Instance==TIM4)
__HAL_RCC_TIM4_CLK_ENABLE();
}
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(timHandle->Instance==TIM4)
{
/**TIM4 GPIO Configuration
PD15 ------> TIM4_CH4
PD14 ------> TIM4_CH3
PD13 ------> TIM4_CH2
PD12 ------> TIM4_CH1
*/
GPIO_InitStruct.Pin = GPIO_PIN_15|GPIO_PIN_14|GPIO_PIN_13|GPIO_PIN_12;
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(GPIOD, &GPIO_InitStruct);
}