采用STM8S內(nèi)部時鐘(HSI);
PWM模式2;
占空比為50%,頻率為2Hz(方便測試LED燈);
PD2口外接LED燈,PD2口輸出PWM波;
系統(tǒng)時鐘初始化很重要:CLK_CKDIVR|=0x08;
/*
TIM2_CH3 PWM
PD2 output
*/
#include
void CLK_init(void)
{
CLK_ICKR |= 0X01; //使能內(nèi)部高速時鐘 HSI
CLK_CKDIVR |= 0x08; //16M內(nèi)部RC經(jīng)2分頻后系統(tǒng)時鐘為8M
while(!(CLK_ICKR&0x02)); //HSI準備就緒
CLK_SWR=0xe1; //HSI為主時鐘源
}
void Init_Tim2(void)
{
TIM2_CCMR3 |= 0X70; //設(shè)置定時器2三通道(PD2)輸出比較三模式
TIM2_CCMR3 |= 0X04; //輸出比較3預(yù)裝載使能
TIM2_CCER2 |= 0x03; //通道3使能,低電平有效,配置為輸出
//初始化時鐘分頻器為1,即計數(shù)器的時鐘頻率為Fmaster=8M/64=0.125MHZ
TIM2_PSCR = 0X06;
//初始化自動裝載寄存器,決定PWM 方波的頻率,F(xiàn)pwm=0.125M/62500=2HZ
TIM2_ARRH = 62500/256;
TIM2_ARRL = 62500%256;
//初始化比較寄存器,決定PWM 方波的占空比:5000/10000 = 50%
TIM2_CCR3H = 31250/256;
TIM2_CCR3L = 31250%256;
// 啟動計數(shù);更新中斷失能
TIM2_CR1 |= 0x81;
//TIM2_IER |= 0x00;
}
void Init_GPIO(void)
{
/*設(shè)置為推挽輸出,PD2接了LED燈*/
PD_DDR |= 0X04; //設(shè)置PD2端口為輸出模式
PD_CR1 |= 0X04; //設(shè)置PD2端口為推挽輸出模式
PD_CR2 &= 0XFD;
PA_DDR |= 0X08; //設(shè)置PA3端口為輸出模式
PA_CR1 |= 0X08; //設(shè)置PA3端口為推挽輸出模式
PA_CR2 |= 0XF7;
}
void main(void)
{
CLK_init();
Init_GPIO();
Init_Tim2();
while (1);
}