野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8430|回复: 7

[ucos] Ucos ii如何进入定时中断程序呀~

[复制链接]
发表于 2016-1-9 12:20:25 | 显示全部楼层 |阅读模式
  1. 我用的是STM32芯片。。。。。。。
复制代码
上面程序我用设置断点的方法,怎么也进不了这个中断。

  1. int main(void)
  2. {
  3.         delay_init();                                                 //延时初始化
  4.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //中断分组配置
  5.         //NVIC_Config_PWM();       
  6.         USART1_Init(115200);                                          //串口波特率设置
  7.         //LED_Init();                                                              //LED初始化?
  8.         Motor_GPIO_Config();                                    //初始化电机引脚
  9.        
  10.         OSInit();                                                                        //UCOS初始化
  11.         OSTaskCreate(start_task,(void*)0,
  12.                            (OS_STK*)&START_TASK_STK
  13.                      [START_STK_SIZE-1],
  14.                      START_TASK_PRIO);                          //创建开始任务
  15.         OSStart();                                                                       //开始任务
  16. }
复制代码
上面是我的main函数。中断设置分组是2.

  1. void TIM2_Config_task(void *pdata)
  2. {  
  3.         while(1)
  4.   {               
  5.                
  6.                 GPIO_InitTypeDef GPIO_InitStructure;
  7.                
  8.           TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  9.           TIM_OCInitTypeDef  TIM_OCInitStructure;       
  10.                
  11.              /*******************TIM2_GPIO_Config任务******************/               
  12.                
  13.                 /* GPIOB clock enable */
  14.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  15.                 /*配置PWM到PA0,PA1上*/
  16.                 GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0|GPIO_Pin_1 ;
  17.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                    // 复用推挽输出
  18.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  19.                 GPIO_Init(GPIOA, &GPIO_InitStructure);
  20.                
  21.                  
  22.               /*******************TIM2_Mode_Config任务*****************/               
  23.        
  24.                 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);                                         //使能TIM2时钟

  25.                 /* 基本定时器配置 */                 
  26.                 TIM_TimeBaseStructure.TIM_Period = 255;                                                                 //当定时器从0计数到255,即为266次,为一个定时周期589
  27.                 TIM_TimeBaseStructure.TIM_Prescaler = 493;                                                                    //设置预分频:
  28.                 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;                        //设置时钟分频系数:不分频(这里用不到)
  29.                 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;          //向上计数模式
  30.                 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  31.                 /* PWM模式配置 */
  32.                 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                                            //配置为PWM模式1
  33.                 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        //使能输出
  34.                 TIM_OCInitStructure.TIM_Pulse = 0;                                                                                                          //设置初始PWM脉冲宽度为0       
  35.                 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;            //当定时器计数值小于CCR1_Val时为低电平

  36.                 TIM_OC1Init(TIM2, &TIM_OCInitStructure);                                                                                 //使能通道1
  37.        

  38.                 TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);                                                //使能预装载       
  39.        
  40.                 TIM_OC2Init(TIM2, &TIM_OCInitStructure);                    //使能通道2
  41.                 TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);                                                //使能预装载       
  42.        
  43.                 TIM_ARRPreloadConfig(TIM2, ENABLE);                                                                                                         //使能TIM2重载寄存器ARR

  44.                 /* TIM2 enable counter */
  45.                 TIM_Cmd(TIM2, ENABLE);                                                                                                   //使能定时器2       
  46.        
  47.                 TIM_ITConfig(TIM2,TIM_IT_Update, ENABLE);                                                                                //使能update中断
  48.                
  49. //                NVIC_Config_PWM();                                                                                                                                                                        //配置中断优先级       
  50.           OSTaskDel(OS_PRIO_SELF);
  51.          // OSTimeDly(1);
  52.   }
  53. }
复制代码
上面这个是我的定时器2的配置。



请大神帮我看看~~~


回复

使用道具 举报

 楼主| 发表于 2016-1-9 12:21:48 | 显示全部楼层
补充第一段代码
  1. void TIM2_IRQHandler(void)
  2. {       

  3.         if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)        //TIM_IT_Update
  4.         {                       
  5.                                
  6.                                 TIM2->CCR1 =148 ;//indexWave[pwm_index];        //根据PWM表修改定时器的比较寄存器值
  7.                                 TIM2->CCR2 = 148;//indexWave[pwm_index] ;
  8.                                 pwm_index++;
  9.                
  10. /*****************************先判断电机方向************************************/
  11.                                 if (FlagMotor)
  12.                                         NumMotor=180;
  13.                                 else
  14.                                         NumMotor=40;
  15.                                
  16. /*****************************电机停止程序**************************************/
  17.                                 if( ((pwm_index >= NumMotor)&& Trig_Laser4==1 )&& enable==0 )                        //
  18.                                 {
  19.                                         pwm_index=0;
  20.                                         TIM2->CCR1=0;
  21.           TIM2->CR1&=0x00;
  22.           enable=1;
  23.           backover=1;                                       
  24.                                 }
  25.                                

  26.                 TIM_ClearITPendingBit (TIM2, TIM_IT_Update);        //必须要清除中断标志位
  27.         }
  28. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-9 12:54:27 | 显示全部楼层
有人会吗?
回复

使用道具 举报

 楼主| 发表于 2016-1-9 12:55:11 | 显示全部楼层
求高人指点~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-9 13:24:33 | 显示全部楼层
  1. void TIM2_IRQHandler(void)
  2. {       
  3. OSIntEnter();
  4.         if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)        //TIM_IT_Update
  5.         {                       
  6.                                
  7.                                 TIM2->CCR1 =148 ;//indexWave[pwm_index];        //根据PWM表修改定时器的比较寄存器值
  8.                                 TIM2->CCR2 = 148;//indexWave[pwm_index] ;
  9.                                 pwm_index++;
  10.                
  11. /*****************************先判断电机方向************************************/
  12.                                 if (FlagMotor)
  13.                                         NumMotor=180;
  14.                                 else
  15.                                         NumMotor=40;
  16.                                
  17. /*****************************电机停止程序**************************************/
  18.                                 if( ((pwm_index >= NumMotor)&& Trig_Laser4==1 )&& enable==0 )                        //
  19.                                 {
  20.                                         pwm_index=0;
  21.                                         TIM2->CCR1=0;
  22.           TIM2->CR1&=0x00;
  23.           enable=1;
  24.           backover=1;                                       
  25.                                 }
  26.                                

  27.                 TIM_ClearITPendingBit (TIM2, TIM_IT_Update);        //必须要清除中断标志位
  28.         }
  29. OSIntExit();
  30. }
复制代码


我又加入  OSIntEnter(); OSIntExit();还是不能进入中断啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-9 14:04:13 | 显示全部楼层
我在OS_CFG.H也使能了OS_TMR_EN。定义了#define  OS_TASK_TMR_PRIO      4 为什么还是不能进入定时器中断呢???TIM2_IRQHandle()
这个函数这么神奇啊~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-9 14:13:33 | 显示全部楼层
有人会吗?
回复

使用道具 举报

 楼主| 发表于 2016-1-9 15:36:34 | 显示全部楼层
:(:(:(:(:(:(
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-16 06:30 , Processed in 0.047631 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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