OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4054|回复: 1

帮忙看一下我这个定时器程序,任务怎怎么会运行一会就停了,而定时器一直在工作?按道理应该一起工作的,任务和定时器之间没有影响啊????紧急!!!

[复制链接]

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2013-11-4
在线时间
0 小时
发表于 2013-12-8 20:46:08 | 显示全部楼层 |阅读模式

#include "stm32f10x.h"

u16 capture=0;
u16 CCR1_Val=1000;//0.05s
u16 CCR2_Val=5000;//0.25s
u16 CCR3_Val=10000;//0.5s
u16 CCR4_Val=20000;//1s
/*TIM2 CLOCK ENABLE*/
void NVIC_Configuration(void)
{
 NVIC_InitTypeDef NVIC_InitStructure;
 /*Configure one bit for preemption priority */
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置NVIC中断分组1:1位抢占优先级,1位响应优先级
 NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
 NVIC_Init(&NVIC_InitStructure);
}

void TIM2_Configuration(void)
 {
  TIM_OCInitTypeDef TIM_OCInitStructure;
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// TIM_ICInitTypeDef  TIM_ICInitStructure;
 
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
 TIM_TimeBaseStructure.TIM_Period=65535;//
 TIM_TimeBaseStructure.TIM_Prescaler=3600-1;//预分频,此值加1为分频的出除数,0.00005s
 //TIM_TimeBaseStructure.TIM_Prescaler=0;//不分频
 TIM_TimeBaseStructure.TIM_ClockDivision=0x0;
 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
 TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

// TIM_CCxCmd(TIM2,TIM_Channel_1,)
// TIM_CCxCmd(TIM2,TIM_Channel_1, TIM_CCx);
 TIM_CCxCmd(TIM2, TIM_Channel_1, TIM_CCx_Enable);
 TIM_CCxCmd(TIM2, TIM_Channel_2, TIM_CCx_Enable);
 TIM_CCxCmd(TIM2, TIM_Channel_3, TIM_CCx_Enable);
 TIM_CCxCmd(TIM2, TIM_Channel_4, TIM_CCx_Enable);
 /*比较通道1*/
 TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Timing;//
 TIM_OCInitStructure.TIM_Pulse=CCR1_Val;//设置了待装入捕获比较寄存器的脉冲zhi
  TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//极性为正
 TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
 TIM_OC1Init(TIM2,&TIM_OCInitStructure);
 TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Disable);//禁止重装载
 /*比较通道2*/
//  TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Timing;
//  TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//极性为正
//  TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
 TIM_OCInitStructure.TIM_Pulse=CCR2_Val;
  TIM_OC2Init(TIM2,&TIM_OCInitStructure);
 TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Disable);
 /*比较通道3*/

 TIM_OCInitStructure.TIM_Pulse=CCR3_Val;
  TIM_OC3Init(TIM2,&TIM_OCInitStructure);
 TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Disable);

 /*比较通道4*/

 TIM_OCInitStructure.TIM_Pulse=CCR4_Val;
  TIM_OC4Init(TIM2,&TIM_OCInitStructure);
 TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Disable);
 /*使能预装载*/
 TIM_ARRPreloadConfig(TIM2,ENABLE);
 /*预先清除所有中断位*/
 TIM_ClearITPendingBit(TIM2,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4|TIM_IT_Update);
 
 /*4个中断和溢出都配置中断*/
 TIM_ITConfig(TIM2,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4|TIM_IT_Update,ENABLE);
 TIM_Cmd(TIM2,ENABLE);
 
 

}
void TIM2_IRQHandler(void)
{
  /*TIM2_CH1*/
  if(TIM_GetITStatus(TIM2,TIM_IT_CC1)!=RESET)
  { 
   TIM_ClearITPendingBit(TIM2,TIM_IT_CC1);
   /*PC.1引脚的翻转频率为  Hz*/
   GPIO_WriteBit(GPIOC,GPIO_Pin_1,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_1)));
   
   capture=TIM_GetCapture1(TIM2);
   TIM_SetCompare1(TIM2,capture+CCR1_Val);
   //GPIO_ResetBits(GPIOC,GPIO_Pin_All);
   
   
  }
  
  /*TIM2_CH2*/
  if(TIM_GetITStatus(TIM2,TIM_IT_CC2)!=RESET)
   { 
    GPIO_WriteBit(GPIOC,GPIO_Pin_2,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_2)));
    TIM_ClearITPendingBit(TIM2,TIM_IT_CC2);
    capture=TIM_GetCapture2(TIM2);
    TIM_SetCompare2(TIM2,capture+CCR2_Val);
    
    //GPIO_SetBits(GPIOC,GPIO_Pin_All);
   }
   
   /*TIM2_CH3*/
  if(TIM_GetITStatus(TIM2,TIM_IT_CC3)!=RESET)
   { 
    GPIO_WriteBit(GPIOC,GPIO_Pin_3,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_3)));
    TIM_ClearITPendingBit(TIM2,TIM_IT_CC3);
    capture=TIM_GetCapture3(TIM2);
    TIM_SetCompare3(TIM2,capture+CCR3_Val);
    
    //GPIO_SetBits(GPIOC,GPIO_Pin_All);
   }
   
   /*TIM2_CH4*/
  if(TIM_GetITStatus(TIM2,TIM_IT_CC4)!=RESET)
   { 
    GPIO_WriteBit(GPIOC,GPIO_Pin_4,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_4)));
    TIM_ClearITPendingBit(TIM2,TIM_IT_CC4);
    capture=TIM_GetCapture4(TIM2);
    TIM_SetCompare4(TIM2,capture+CCR4_Val);
    
    //GPIO_SetBits(GPIOC,GPIO_Pin_All);
   }
}

 

 

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-8 23:45:54 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 08:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表