1.初始化复用管脚
void BEEP_Init()
{
GPIO_InitTypeDef GPIO_Initure
;
__HAL_RCC_TIM4_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_Initure
.Pin
=GPIO_PIN_9;
GPIO_Initure
.Mode
=GPIO_MODE_AF_PP;
GPIO_Initure
.Pull
=GPIO_PULLUP;
GPIO_Initure
.Speed
=GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB,&GPIO_Initure
);
}
2.初始化并设置对应的PWM
占空比为100/500 = 20%
void PWM_Init()
{
TIM_HandleTypeDef TIM4_Handler
;
TIM4_Handler
.Instance
=TIM4;
TIM4_Handler
.Init
.Prescaler
=72-1;
TIM4_Handler
.Init
.CounterMode
=TIM_COUNTERMODE_UP;
TIM4_Handler
.Init
.ClockDivision
=TIM_CLOCKDIVISION_DIV1;
TIM4_Handler
.Init
.Period
=500-1;
HAL_TIM_PWM_Init(&TIM4_Handler
);
TIM_OC_InitTypeDef TIM4_CH4Handler
;
TIM4_CH4Handler
.OCMode
=TIM_OCMODE_PWM1;
TIM4_CH4Handler
.Pulse
=100-1;
TIM4_CH4Handler
.OCPolarity
=TIM_OCPOLARITY_HIGH;
HAL_TIM_PWM_ConfigChannel(&TIM4_Handler
,&TIM4_CH4Handler
,TIM_CHANNEL_4);
HAL_TIM_PWM_Start(&TIM4_Handler
,TIM_CHANNEL_4);
}
3.编写TIM_SetTIM4Compare1()函数
此函数可以直接调用修改TIM4_CH4Handler.Pulse的参数
void TIM_SetTIM4Compare1(uint32_t compare
)
{
TIM4->CCR4=compare
;
}
4.整份代码
#include
"beep.h"
void BEEP_Init()
{
GPIO_InitTypeDef GPIO_Initure
;
__HAL_RCC_TIM4_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_Initure
.Pin
=GPIO_PIN_9;
GPIO_Initure
.Mode
=GPIO_MODE_AF_PP;
GPIO_Initure
.Pull
=GPIO_PULLUP;
GPIO_Initure
.Speed
=GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB,&GPIO_Initure
);
}
void PWM_Init()
{
TIM_HandleTypeDef TIM4_Handler
;
TIM4_Handler
.Instance
=TIM4;
TIM4_Handler
.Init
.Prescaler
=72-1;
TIM4_Handler
.Init
.CounterMode
=TIM_COUNTERMODE_UP;
TIM4_Handler
.Init
.Period
=500-1;
HAL_TIM_PWM_Init(&TIM4_Handler
);
TIM_OC_InitTypeDef TIM4_CH4Handler
;
TIM4_CH4Handler
.OCMode
=TIM_OCMODE_PWM1;
TIM4_CH4Handler
.Pulse
=1-1;
TIM4_CH4Handler
.OCPolarity
=TIM_OCPOLARITY_HIGH;
HAL_TIM_PWM_ConfigChannel(&TIM4_Handler
,&TIM4_CH4Handler
,TIM_CHANNEL_4);
HAL_TIM_PWM_Start(&TIM4_Handler
,TIM_CHANNEL_4);
}
void TIM_SetTIM4Compare1(uint32_t compare
)
{
TIM4->CCR4=compare
;
}
在main.c中直接调用即可
BEEP_Init();
PWM_Init();
TIM_SetTIM4Compare1(250);