|
//ccr = 0~499
void setPWM1(unsigned short ccr){//PC1
TIM1_CCR1H = (unsigned char)(ccr>>8);
TIM1_CCR1L = (unsigned char)(ccr & 0xff);
}
void setPWM2(unsigned short ccr){//PC2
TIM1_CCR2H = (unsigned char)(ccr>>8);
TIM1_CCR2L = (unsigned char)(ccr & 0xff);
}
void setPWM3(unsigned short ccr){//PC3
TIM1_CCR3H = (unsigned char)(ccr>>8);
TIM1_CCR3L = (unsigned char)(ccr & 0xff);
}
void setPWM4(unsigned short ccr){//PC4
TIM1_CCR4H = (unsigned char)(ccr>>8);
TIM1_CCR4L = (unsigned char)(ccr & 0xff);
}
void TIM1_init(void)
{
TIM1_PSCRH = 0x01; // 8M系統(tǒng)時(shí)鐘經(jīng)預(yù)分頻f=fck/(PSCR+1)
TIM1_PSCRL = 0x3F; // PSCR=0x13f,f=8M/(0x13F+1)=25 000Hz,每個(gè)計(jì)數(shù)周期40us
TIM1_ARRH = 0x01; // 自動(dòng)重載寄存器ARR=0x01F4=500
TIM1_ARRL = 0xF4; // 每記數(shù)500次產(chǎn)生一次中斷,即20ms
/**
* PWM 配置
*/
PC_DDR |= 0x1E; PC_CR1 |= 0x1E; PC_ODR &= ~0x1E;
TIM1_CCMR1 = 0x78;
TIM1_CCMR2 = 0x78;
TIM1_CCMR3 = 0x78;
TIM1_CCMR4 = 0x78;// Output mode PWM2.
// 通道 2 被設(shè)置成比較輸出方式, OC2M = 111,為 PWM 模式 2, 向上計(jì)數(shù)時(shí),若計(jì)數(shù)器小于比較值,為無(wú)效電平
TIM1_CCER1 = 0x33;
TIM1_CCER2 = 0x33;// CC polarity low,enable PWM output */
// CC2P = 1,低電平為有效電平
// CC2E = 1,開啟輸出引腳
//設(shè)置占空比
setPWM1(0); setPWM2(0);
setPWM3(0); setPWM4(0);
TIM1_EGR=0X01; //重新初始化計(jì)數(shù)器,并產(chǎn)生一個(gè)更新事件,可以不要
TIM1_BKR=0x80; //主輸出使能,必須要有
TIM1_IER = 0x01; // 允許更新中斷
TIM1_CR1 = 0x01; // 計(jì)數(shù)器使能,開始計(jì)數(shù)
}
//main()
int i = 0;
for(i=0;i<23;i++){ setPWM1(i*i);delay_ms(50); }
for(i=22;i>0;i--){ setPWM1(i*i);delay_ms(50); }
for(i=0;i<23;i++){ setPWM2(i*i);delay_ms(50); }
for(i=22;i>0;i--){ setPWM2(i*i);delay_ms(50); }
for(i=0;i<23;i++){ setPWM3(i*i);delay_ms(50); }
for(i=22;i>0;i--){ setPWM3(i*i);delay_ms(50); }
for(i=0;i<23;i++){ setPWM4(i*i);delay_ms(50); }
for(i=22;i>0;i--){ setPWM4(i*i);delay_ms(50); }
setPWM1(0); setPWM2(0);
setPWM3(0); setPWM4(0);
delay_ms(3000);*/
|
評(píng)分
-
查看全部評(píng)分
|