初级会员

- 积分
- 94
- 金钱
- 94
- 注册时间
- 2014-9-15
- 在线时间
- 4 小时
|

楼主 |
发表于 2014-11-12 08:50:30
|
显示全部楼层
回复【6楼】正点原子:
---------------------------------
我还是把定时器的代码贴上来吧
定时器中断里的函数
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //判断状态寄存器 TIM3_SR[2] 是否发生了 中断
{
if(QYS_Flag==1)
{
if(bushu_QYS>0)//运行的总步数,走完后关闭定时器
{
bushu_QYS--;
if(bushu_QYS%2==0)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_9);
}
else
{
GPIO_SetBits(GPIOC, GPIO_Pin_9);
} //模拟时钟信号
if(bushu_QYS>(bushu-90))
{
QYS_SD=QYS_SD-4;
TIM_reload(35,QYS_SD);//重装定时器,实现加速
}
if(bushu_QYS<100)
{
QYS_SD=QYS_SD+10;
TIM_reload(35,QYS_SD); //重装定时器,实现减速
}
}
else
{
GPIO_ResetBits(GPIOC, GPIO_Pin_9);
QYS_Flag=0;
}
}
}
TIM_ClearFlag(TIM3, TIM_FLAG_Update); //清中断标记
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
}
重装函数如下:
void TIM_reload(u16 cpl,u16 reload)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_Cmd(TIM3,DISABLE);
TIM_TimeBaseStructure.TIM_Prescaler = cpl; //预分频器TIM3
TIM_TimeBaseStructure.TIM_Period =reload; //自动重装载寄存器TIM3_APR
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); //写TIM3各寄存器参数
TIM_Cmd(TIM3,ENABLE); //启动定时器3 TIM3_CR1[0]=1;
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //TIM3_DIER[2]=1 允许捕获/比较2中断
}
|
|