void TIM2_init()
{
TIM2->PSCR = 0; // 初始化时钟分频器为1,即计数器的时钟频率为Fmaster=4MHZ
TIM2->CCMR2 = TIM2->CCMR2 | 0x70;// Output mode PWM2
// 通道2被设置成比较输出方式
// OC2M = 111,为PWM模式2
// 向上计数时,若计数器小于比较值,为无效电平
// 即当计数器在0到比较值时,输出为1,否则为0
TIM2->CCER1 = TIM2->CCER1 | 0x30;// CC polarity low,enable PWM output
// CC2P = 1,低电平为有效电平
// CC2E = 1,开启输出引脚
TIM2->ARRH = 0; //初始化自动装载寄存器,决定PWM方波的频率,Fpwm=4000000/256=15625HZ
TIM2->ARRL = 0xFF;
TIM2->CCR2H = 0; //初始化比较寄存器,决定PWM方波的占空比
TIM2->CCR2L = 0;
// 启动计数
TIM2->CR1 = TIM2->CR1 | 0x01;
}
void CLK_init1(void)
{
CLK->CKDIVR = 0x11;
CLK->PCKENR1 = 0xff;
}
void main(void)
{
unsigned char i;
CLK_init1(); // 初始化时钟
GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST);
TIM2_init(); // 初始化定时器
while(1) // 进入无限循环
{
// 下面的循环将占空比逐渐从0递增到50%
for(i=0;i<128;i++)
{
TIM2->CCR2H = 0;
TIM2->CCR2L = i;
DelayMS(5);
}
// 下面的循环将占空比逐渐从50%递减到0
for(i=128;i>0;i--)
{
TIM2->CCR2H= 0;
TIM2->CCR2L = i;
DelayMS(5);
}
}
}
求版主讲解下