定时器8属于高级定时器,只存在于大容量产品的103系列中,定时器8输出PWM波形时与通用定时器2、3、4、5不同,必须同时开启主输出(TIM8->BDTR|=0x8000;)才能产生PWM波,其配置如下:
/*********************************************
函数名称:void TIM4_PWM_Init(u16 arr,u16 psc)
功 能:通用TIM4 CH1(PB6) CH2(PB7)PWM输出初始化
入 参:arr:自动重装值。
psc:时钟预分频数
返 回:无
【说明】Frq = 72Mhz / ( psc + 1 ) / ( arr + 1 )
*********************************************/
void TIM4_PWM_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<2; //TIM4时钟使能
RCC->APB2ENR|=1<<3; //使能PORTB时钟
GPIOB->CRL&=0X00FFFFFF; //PB6 7 输出
GPIOB->CRL|=0XBB000000; //复用功能输出
TIM4->ARR=arr; //设定计数器自动重装值
TIM4->PSC=psc; //预分频器分频设置
TIM4->CCMR1|=6<<4; //CH1 PWM1模式
//6: PWM1模式, 正脉冲
//7: PWM2模式, 负脉冲
TIM4->CCMR1|=1<<3; //CH1 预装载使能
TIM4->CCER|=1<<0; //OC1 输出使能
TIM4->CCMR1|=6<<12; //CH2 PWM1模式
TIM4->CCMR1|=1<<11; //CH2 预装载使能
TIM4->CCER|=1<<4; //OC2 输出使能
TIM4->CR1=0x0080; //ARPE使能
TIM4->CR1|=0x01; //使能定时器4
}
/*********************************************
函数名称:TIM8_PWM_Init
功 能:通用TIM8 CH1(PC6) CH2(PC7)PWM输出初始化
入 参:arr:自动重装值。
psc:时钟预分频数
返 回:无
【说明】Frq = 72Mhz / ( psc + 1 ) / ( arr + 1 )
*********************************************/
void TIM8_PWM_Init(u16 arr,u16 psc)
{
RCC->APB2ENR|=1<<13; //TIM8时钟使能
RCC->APB2ENR|=1<<4; //使能PORTC时钟
GPIOC->CRL&=0X00FFFFFF; //PC6 7 输出
GPIOC->CRL|=0XBB000000; //复用功能输出
TIM8->ARR=arr; //设定计数器自动重装值
TIM8->PSC=psc; //预分频器分频设置
TIM8->CCMR1|=6<<4; //CH1 PWM1模式
//6: PWM1模式, 正脉冲
//7: PWM2模式, 负脉冲
TIM8->CCMR1|=1<<3; //CH1 预装载使能
TIM8->CCER|=1<<0; //OC1 输出使能
TIM8->CCMR1|=6<<12; //CH2 PWM1模式
TIM8->CCMR1|=1<<11; //CH2 预装载使能
TIM8->CCER|=1<<4; //OC2 输出使能
TIM8->CR1=0x0080; //ARPE使能
TIM8->BDTR|=0x8000; //主输出使能
TIM8->CR1|=0x01; //使能定时器8
}