原子哥好,请问Min板的中断来产生频率可调的方波,我用定时器中断来实现,定时器中断的函数参数arr 和psc范围是分别是多少,好像arr或者psc为0的时候产生的方波会出错
而且产生的频率最大只能达到300KHZ
//通用定时器中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器3!
void Timerx_Init(u16 arr,u16 psc)
主函数关键地方
Timerx_Init(1,1);//改变arr和psc在1-9范围内变化 输出的频率都不变???
while(1)
{
}
中断服务函数关键地方
void TIM3_IRQHandler(void) //TIM3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源
LED0=!LED0;//这里的PA5我有用示波器观察波形,频率最大为300K
}
}
后来我查到了,是因为中断服务函数处理的事情太多了,导致频率上不去,后面用改用寄存器不用库函数,但是频率还是上不去,只能从原来的300K升到750K,不知道怎么改中断服务函数才能再提高上去频率,一下程序是修改后的
void TIM3_IRQHandler(void) //TIM3中断
{
// if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
{
// TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源
LED0=!LED0;
TIM3->SR&=~(1<<0);//清除中断标志位
}
}
|