新手入门
- 积分
- 8
- 金钱
- 8
- 注册时间
- 2019-7-7
- 在线时间
- 3 小时
|
1金钱
用的是HAL库,不懂为什么只能输出一路?
TIM_HandleTypeDef TIM4_Handler; //定时器9PWM句柄
TIM_HandleTypeDef TIM2_Handler; //定时器2PWM句柄
TIM_OC_InitTypeDef TIM4_CHxHandler; //定时器9通道x句柄
TIM_OC_InitTypeDef TIM2_CHxHandler; //定时器2通道x句柄
u16 GPIO_PIN_x;
//TIM3 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM4_PWM_Init(u16 arr,u16 psc,u16 TIM_CHANNEL)
{
TIM4_Handler.Instance=TIM4; //定时器9
TIM4_Handler.Init.Prescaler=psc; //定时器分频
TIM4_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;//向上计数模式
TIM4_Handler.Init.Period=arr; //自动重装载值
TIM4_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
HAL_TIM_PWM_Init(&TIM4_Handler); //初始化PWM
TIM4_CHxHandler.OCMode=TIM_OCMODE_PWM1; //模式选择PWM1
TIM4_CHxHandler.Pulse=arr/2; //设置比较值,此值用来确定占空比,默认比较值为自动重装载值的一半,即占空比为50%
TIM4_CHxHandler.OCPolarity=TIM_OCPOLARITY_HIGH; //输出比较极性为低
HAL_TIM_PWM_ConfigChannel(&TIM4_Handler,&TIM4_CHxHandler,TIM_CHANNEL);//配置TIM4通道x
HAL_TIM_PWM_Start(&TIM4_Handler,TIM_CHANNEL);//开启PWM通道x
}
//TIM2 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM2_PWM_Init(u16 arr,u16 psc,u16 TIM_CHANNEL)
{
TIM2_Handler.Instance=TIM2; //定时器2
TIM2_Handler.Init.Prescaler=psc; //定时器分频
TIM2_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;//向上计数模式
TIM2_Handler.Init.Period=arr; //自动重装载值
TIM2_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
HAL_TIM_PWM_Init(&TIM2_Handler); //初始化PWM
TIM2_CHxHandler.OCMode=TIM_OCMODE_PWM1; //模式选择PWM1
TIM2_CHxHandler.Pulse=arr/2; //设置比较值,此值用来确定占空比,默认比较值为自动重装载值的一半,即占空比为50%
TIM2_CHxHandler.OCPolarity=TIM_OCPOLARITY_HIGH; //输出比较极性为低
HAL_TIM_PWM_ConfigChannel(&TIM2_Handler,&TIM2_CHxHandler,TIM_CHANNEL);//配置TIM9通道x
HAL_TIM_PWM_Start(&TIM2_Handler,TIM_CHANNEL);//开启PWM通道x
}
//定时器底层驱动,时钟使能,引脚配置
//此函数会被HAL_TIM_PWM_Init()调用
//htim:定时器句柄
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
if(htim==&TIM4_Handler)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_TIM4_CLK_ENABLE(); //使能定时器4
__HAL_RCC_GPIOB_CLK_ENABLE(); //开启GPIOB时钟
GPIO_Initure.Pin=GPIO_PIN_10; //PB10
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
GPIO_Initure.Alternate= GPIO_AF2_TIM4; //PEx复用为TIM9_CH1
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
}
if(htim==&TIM2_Handler)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_TIM2_CLK_ENABLE(); //使能定时器2
__HAL_RCC_GPIOA_CLK_ENABLE(); //开启GPIOA时钟
GPIO_Initure.Pin=GPIO_PIN_0; //PA0
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
GPIO_Initure.Alternate= GPIO_AF1_TIM2; //PA0复用为TIM2_CH1
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
}
}
//设置TIM4通道1的占空比
//compare:比较值
void TIM_SetTIM4Compare(u32 compare)
{
TIM4->CCR1=compare;
}
//设置TIM2通道1的占空比
//compare:比较值
void TIM_SetTIM2Compare(u32 compare)
{
TIM2->CCR1=compare;
}
|
|