.c文件
#include "pwm.h"
//
//TIM4_PWM_Init函数,用于PWM输出
//
TIM_HandleTypeDef TIM3_Handler; //定时器3PWM句柄
TIM_OC_InitTypeDef TIM3_CH1Handler; //定时器3通道2句柄
//TIM3 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM3_PWM_Init(u16 arr,u16 psc)
{
__HAL_RCC_TIM3_CLK_ENABLE(); //使能定时器3
TIM3_Handler.Instance=TIM3; //定时器3
TIM3_Handler.Init.Prescaler=psc; //定时器分频
TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;//向上计数模式
TIM3_Handler.Init.Period=arr; //自动重装载值
TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1; // 时钟分频因子
HAL_TIM_Base_Init(&TIM3_Handler);
HAL_TIM_PWM_Init(&TIM3_Handler); //初始化PWM
__HAL_TIM_CLEAR_IT(&TIM3_Handler,TIM_IT_UPDATE); // 防止一开启定时器就进入中断
TIM3_CH1Handler.OCMode=TIM_OCMODE_PWM1; //模式选择PWM1
TIM3_CH1Handler.Pulse=arr/2; //设置比较值,此值用来确定占空比,默认比较值为自动重装载值的一半,即占空比为50%
TIM3_CH1Handler.OCPolarity=TIM_OCPOLARITY_LOW; //输出比较极性为低
TIM3_CH1Handler.OCNPolarity=TIM_OCPOLARITY_HIGH;
HAL_TIM_PWM_ConfigChannel(&TIM3_Handler,&TIM3_CH1Handler,TIM_CHANNEL_1);//配置TIM4通道2
}
//定时器底层驱动,时钟使能,引脚配置
//此函数会被HAL_TIM_PWM_Init()调用
//htim:定时器句柄
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
}
.h文件
#ifndef __PWM_H
#define __PWM_H
#include "sys.h"
extern TIM_HandleTypeDef TIM3_Handler; //定时器4PWM句柄
extern TIM_OC_InitTypeDef TIM3_CH1Handler; //定时器4通道2句柄
void TIM3_PWM_Init(u16 arr,u16 psc);
#endif