int main(void)
{
u16 led0pwmval=0;
u8 dir=1;
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
LED_Init(); //LED端口初始化
TIM3_PWM_Init(899,0); //不分频。PWM频率=72000/900=80Khz
while(1)
{
delay_ms(10);
if(dir)led0pwmval++;
else led0pwmval--;
if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;
TIM_SetCompare2(TIM3,led0pwmval);
}
}
这个是例程里边的主函数,让我很纠结的是,现在PWM的输出频率理应是80KHZ,为什么在使用的时候还是要加延时函数delay_ms(10);?我一开始分析是认为一个延时函数是10ms,那么X=300就是3s,那如果是这样的话,那这个PWM的频率不是没有用了么?我在想是不是这样的,假设PWM的led0pwmval现在为某一个数值,PWM一个周期是1/80khz,而在10ms之内,有若干个1/80khz的PWM周期的宽度都是led0pwmval的值?
如果想利用这个频率来配合x的值,是不是要加中断呢?
|