查看: 4044|回复: 1

STM32时钟2不中断的分析和解决方法

[复制链接]

该用户从未签到

发表于 2012-12-25 10:11:24 | 显示全部楼层 |阅读模式
分享到:
STM32时钟2不中断的分析
先是怀疑时钟使能问题,但是有

  1. <STRONG>RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); </STRONG>
复制代码
将按键检查加入,下载后没反应

  1. <STRONG>void TargetInit(void)
  2. {
  3.   RCC_Configuration();
  4.   GPIO_Configuration();//加入这一句
  5.   NVIC_Configuration();

  6.   Timer_Configuration();
  7.   OS_CPU_SysTickInit();
  8. }
  9. GPIO_Configuration();
  10. {</STRONG>
复制代码
定时器中断部分
  1. NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  2. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  3. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  4. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  5. NVIC_Init(&NVIC_InitStructure);}

  6. TIM_TimeBaseStructure.TIM_Period = 200;
  7. TIM_TimeBaseStructure.TIM_Prescaler = 360-1;
  8. TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  9. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  10. TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  11. TIM_ClearFlag(TIM2,TIM_FLAG_Update);
  12. TIM_ARRPreloadConfig(TIM2, ENABLE);
  13. TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
  14. TIM_Cmd(TIM2,ENABLE);

  15. void TIM2_IRQHandler(void)
  16. {
  17. if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
  18. {
  19. TIM_ClearITPendingBit(TIM2, TIM_IT_Update );
  20. GPIO_WriteBit(led_gpio, led4 , (BitAction)!GPIO_ReadOutputDataBit(led_gpio, led4));
  21. }
  22. }
复制代码
修改后,指示灯常亮

再次修改,结果TIM2和TIM3都正常,将程序代码贴出:
中断配置
  1. NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  2. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  3. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
  4. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  5. NVIC_Init(&NVIC_InitStructure);

复制代码

  时钟配置:
  1. void Timer_Configuration(void)
  2. { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

  3. //TIM_DeInit(TIM2);
  4. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//启动TIM2时钟

  5. TIM_TimeBaseStructure.TIM_Period = 5000;//200;
  6. TIM_TimeBaseStructure.TIM_Prescaler = (7200-1);//360-1;
  7. TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  8. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  9. TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  10. TIM_ITConfig( //使能或者失能指定的TIM中断
  11. TIM2, //TIM2
  12. TIM_IT_Update | //TIM 中断源
  13. TIM_IT_Trigger, //TIM 触发中断源
  14. ENABLE //使能);
  15. }
复制代码
初始化流程:
  1. void TargetInit(void)
  2. {
  3. //RCC_Configuration();
  4. GPIO_Configuration();//加入
  5. NVIC_Configuration();
  6. Timer_Configuration();
  7. //OS_CPU_SysTickInit();
  8. }
复制代码

中断服务程序:
  1. void TIM2_IRQHandler(void)
  2. {
  3. if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
  4. {
  5. TIM_ClearITPendingBit(TIM2, TIM_IT_Update );
  6. GPIO_WriteBit(led_gpio, led4 , (BitAction)!GPIO_ReadOutputDataBit(led_gpio, led4));
  7. }
  8. }
复制代码
注意:我发现网友将该代码写在MAIN中,那需将该程序写在MAIN函数之前,我把它提到MAIN之前
最后实验结果,时钟2中断使LED4不停闪烁,网友设置的值较快,看不到闪烁效果,我改了一下。
回复

使用道具 举报

  • TA的每日心情
    奋斗
    2015-11-4 08:32
  • 签到天数: 773 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2012-12-25 16:37:30 | 显示全部楼层
    板凳来了,支持啊!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-25 22:44 , Processed in 0.123768 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.