在学习嵌入式开发板例程时,刚开始的时候不懂PWM波形是怎样输出的,后来渐渐的消化了,mark下:
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化
LED_Init(); //初始化与LED连接的硬件接口
TIM1_PWM_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz
这里PWM的频率也可以这样理解,
TIM1->ARR=arr; //设定计数器自动重装值
TIM1->PSC=psc; //预分频器设置
系统时钟为72MHZ,预分频数是0,即使记满899+1=900次,pwm完成一次周期输出,一个周期的时间为900/72M,频率为72M/900=80khz.
将TIM1设置为PWM模式,
while(1)
{
delay_ms(10);
if(dir)led0pwmval++;
else led0pwmval--;
if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;
LED0_PWM_VAL=led0pwmval;
}
#define LED0_PWM_VAL TIM1->CCR1
TIM1->CCR1 的值自增或者自减,为一个阈值,这个阈值与累加到900清零的那个COUNT比较,影响输出,以此来改变占空比。