|
//TIM1_CH1 PWM輸出初始化
//arr:自動重裝值
//psc:時鐘預(yù)分頻數(shù)
void TIM1_PWM_Init(u16 arr,u16 psc)
{
RCC->APB2ENR|=1<<11; //TIM1時鐘使能
RCC->APB2ENR|=1<<2; //使能PORTA時鐘
RCC->APB2ENR|=1<<3; //使能PORTB時鐘
RCC->APB2ENR|=1<<0; //開啟復(fù)用時鐘
GPIOA->CRH&=0XFFFF0000; //PA8,9,10,11清除之前的設(shè)置
GPIOA->CRH|=0X0000BBBB; //PA8,9,10,11復(fù)用功能輸出
GPIOB->CRH&=0X000FFFFF; //PB13,14,15清除之前的設(shè)置
GPIOB->CRH|=0XBBB00000; //PB13,14,15復(fù)用功能輸出
GPIOB->ODR|=1<<13; //PB13 輸出上拉,低電平有效
GPIOB->ODR|=1<<14; //PB14
GPIOB->ODR|=1<<15; //PB15
GPIOA->ODR|=1<<8; //PA8
GPIOA->ODR|=1<<9; //PA9
GPIOA->ODR|=1<<10; //PA10
TIM1->ARR=arr; //設(shè)定計數(shù)器自動重裝值 ①1
TIM1->PSC=psc; //預(yù)分頻器設(shè)置 ②2
TIM1->CCER|=1<<0; //TIM1CH1 輸出使能,高電平有效 ③3
TIM1->CCER|=1<<4; //TIM1CH2 輸出使能
TIM1->CCER|=1<<8; //TIM1CH3 輸出使能
TIM1->CCER|=1<<12; //TIM1CH4 輸出使能
TIM1->CCER|=1<<2; //TIM1CH1N 互補(bǔ)輸出使能
TIM1->CCER|=1<<6; //TIM1CH2N 互補(bǔ)輸出使能
TIM1->CCER|=1<<10; //TIM1CH3N 互補(bǔ)輸出使能
TIM1->CCMR1|=7<<4; //CH1 PWM2模式 ④4
TIM1->CCMR1|=1<<3; //CH1預(yù)裝載使能
TIM1->CCMR1|=7<<12; //CH2 PWM2模式
TIM1->CCMR1|=1<<11; //CH2預(yù)裝載使能
TIM1->CCMR2|=7<<4; //CH3 PWM2模式
TIM1->CCMR2|=1<<3; //CH3預(yù)裝載使能
TIM1->CCMR2|=7<<12; //CH4 PWM2模式
TIM1->CCMR2|=1<<11; //CH4預(yù)裝載使能
TIM1->BDTR|=0x14; //死區(qū)時間設(shè)置 ⑤5
TIM1->BDTR|=1<<15; //MOE 主輸出使能 ⑥6
TIM1->CR1 |= 0x80; //ARPE使能,開始所有輸出通道,默認(rèn)向上計數(shù) ⑦7
TIM1->CR1 |= 0x01; //使能計數(shù)器
}
int main(void)
{
Stm32_Clock_Init(9); //系統(tǒng)時鐘設(shè)置
delay_init(72); //延時初始化
TIM1_PWM_Init(499,7199); // 72M/7200=10khz, 1/10khz * 500=50ms ⑧8
while(1)
{
TIM1->CCR1=250; //占空比:50% 低電平時長25ms ⑨9
TIM1->CCR2=125; //占空比:75% 低電平時長12.5ms
TIM1->CCR3=50; //占空比:90% 低電平時長5ms
TIM1->CCR4=25; //占空比:95% 低電平時長2.5ms
}
}
|
評分
-
查看全部評分
|