打印
[STM32L1]

程序卡在定时中断里跳不出来

[复制链接]
630|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
heweibig|  楼主 | 2021-3-4 12:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用之前的定时器TIM2程序移植到新板子(新板子就增加几个IO外接),想先驱动LED看看,可发现LED就是不能亮灭,在原先板子上正常。程序如下:

int main(void)
{
  RCC_GetClocksFreq(&RCC_Clocks);                    //获取系统时钟频率,外部晶振8.00M,倍频后系统时钟8.000*8/2=32.00M
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);    //中断优先级分组配置
  LED_Init();                                                //LED指示灯引脚初始化
  TIMER2_delayinit(65535,31);                        //TIM2延时初始化,1us  
  TIM3_Counter_init();                               //TIM3脉冲计时初始化

  while(1)
  {
       LED_ON();      //打开LED
      for(int i=0;i<1000;i++)               //延时1s
      TIMER2_usdelay(1000);      
      LED_OFF();     //关闭LED
   }
}

在IAR上debug发现程序一直在 for(int i=0;i<1000;i++)  里跳不出去,以为1000过大不容易发现,改成i<10并单步执行,还是跳不出去。不知怎么回事?

//使用timer2 进行准确延时1us;
void TIMER2_delayinit(u32 arr,u16 psc)
{
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;  
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
   TIM_TimeBaseStructure.TIM_Period = arr;             /*该数值为计数器计数次数*/
  TIM_TimeBaseStructure.TIM_Prescaler = psc;
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  TIM_ClearFlag(TIM2, TIM_FLAG_Update);             //清除更新标志
  TIM_SetCounter(TIM2, 0);
    TIM_Cmd(TIM2, DISABLE);                           /* TIM counter disable*/
}


//TIM2延时
void TIMER2_usdelay(uint32_t usdelay)
{
  uint32_t tmp;
  tmp= 65535 - usdelay;      
  TIM_SetCounter(TIM2, tmp);
  TIM_Cmd(TIM2, ENABLE);
  while(TIM_GetFlagStatus(TIM2, TIM_FLAG_Update) == RESET);
  TIM_Cmd(TIM2, DISABLE);
  TIM_ClearFlag(TIM2, TIM_FLAG_Update);
}

使用特权

评论回复
沙发
xxmmi| | 2021-3-4 12:30 | 只看该作者

看样子是不停复位了吧

使用特权

评论回复
板凳
lizye| | 2021-3-4 12:33 | 只看该作者
LED_OFF后面没延时,怎么能看到亮灭?

使用特权

评论回复
地板
午夜粪车| | 2021-3-4 12:36 | 只看该作者
while(TIM_GetFlagStatus(TIM2, TIM_FLAG_Update) == RESET);
应该是停到这里了

使用特权

评论回复
5
heweibig|  楼主 | 2021-3-4 12:40 | 只看该作者

嗯,我再好好缕一缕吧,有了好消息及时通知大家

使用特权

评论回复
6
gdszzyq| | 2021-3-5 14:56 | 只看该作者
这么简单问题搞这么复杂,就处中间延时程序没有问题,你这个程序也永远看不到灯灭,因为一灭立刻就点亮了。用一个定时器,在中断里对接灯的IO进行翻转就行了,那需要又定时又延时。

使用特权

评论回复
7
便携手到老| | 2021-3-5 18:31 | 只看该作者
中断延时程序有问题吗?

使用特权

评论回复
8
labasi| | 2021-4-2 14:36 | 只看该作者
不停复位了吧

使用特权

评论回复
9
paotangsan| | 2021-4-2 14:38 | 只看该作者
用一个定时器,在中断里对接灯的IO进行翻转就行了

使用特权

评论回复
10
renzheshengui| | 2021-4-2 14:41 | 只看该作者
看一下外部晶振

使用特权

评论回复
11
wakayi| | 2021-4-2 14:43 | 只看该作者
程序的问题啊

使用特权

评论回复
12
wowu| | 2021-4-2 14:44 | 只看该作者

LED_OFF后面没延时

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

869

主题

13089

帖子

7

粉丝