OpenEdv-开源电子网

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

STM32F429定时器中断,TIM2 TIM3都没问题,同样配置TIM4 TIM5就不执行中断了

[复制链接]

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2015-12-9
在线时间
22 小时
发表于 2019-7-19 16:24:41 | 显示全部楼层 |阅读模式
定时器中断TIM2  TIM3同时开启都没问题,按同样配置了一下TIM4 TIM5,TIM2  TIM3 TIM4三个同时执行,发现程序跑死了,关闭TIM2   TIM3只运行TIM4 也不行,
再三检查配置没发现问题,同理配置了TIM5  TIM6都一样不执行,各位大神帮忙看看啊。愁死了。
QQ图片20190719161924.png
QQ图片20190719161954.png
QQ图片20190719162019.png
QQ图片20190719162040.png
QQ图片20190719162100.png
QQ图片20190719162118.png
QQ图片20190719162136.png
QQ图片20190719162157.png
QQ图片20190719162228.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2015-12-9
在线时间
22 小时
 楼主| 发表于 2019-7-22 20:10:48 | 显示全部楼层

RE: STM32F429定时器中断问题

配置了两个定时器中断TIM2 TIM3,都可以正常运转,后面加了TIM4就不行了,配置方式和TIM2一样的,关闭TIM2  TIM3只运行TIM4也不行。求教各位大神给个方向啊。
回复 支持 反对

使用道具 举报

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2019-3-29
在线时间
27 小时
发表于 2019-7-22 22:06:51 | 显示全部楼层
我的也是f429,之前配置了定时器345,可以正常使用
  1. #include "timer.h"
  2. #include "gizwits_product.h"
  3. #include "led.h"
  4. #include "pid.h"
  5. TIM_HandleTypeDef TIM3_Handler;      //定时器句柄
  6. TIM_HandleTypeDef TIM4_Handler;
  7. TIM_HandleTypeDef TIM5_Handler;

  8. //通用定时器3中断初始化
  9. //arr:自动重装值。
  10. //psc:时钟预分频数
  11. //定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
  12. //Ft=定时器工作频率,单位:Mhz
  13. //这里使用的是定时器3!(定时器3挂在APB1上,时钟为HCLK/2)
  14. void TIM3_Init(u16 arr,u16 psc)
  15. {  
  16.        
  17.     TIM3_Handler.Instance=TIM3;                          //通用定时器3
  18.     TIM3_Handler.Init.Prescaler=psc;                     //分频系数
  19.     TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //向上计数器
  20.     TIM3_Handler.Init.Period=arr;                        //自动装载值
  21.     TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//时钟分频因子
  22.     HAL_TIM_Base_Init(&TIM3_Handler);
  23.    
  24.     HAL_TIM_Base_Start_IT(&TIM3_Handler); //使能定时器3更新中断:TIM_IT_UPDATE  

  25. }

  26. void TIM4_Init(u16 arr,u16 psc)
  27. {  
  28.     TIM4_Handler.Instance=TIM4;                          //通用定时器3
  29.     TIM4_Handler.Init.Prescaler=psc;                     //分频系数
  30.     TIM4_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //向上计数器
  31.     TIM4_Handler.Init.Period=arr;                        //自动装载值
  32.     TIM4_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//时钟分频因子
  33.     HAL_TIM_Base_Init(&TIM4_Handler);
  34.    
  35.     HAL_TIM_Base_Start_IT(&TIM4_Handler); //使能定时器3和定时器3更新中断:TIM_IT_UPDATE   
  36. }

  37. void TIM5_Init(u16 arr,u16 psc)
  38. {  
  39.     TIM5_Handler.Instance=TIM5;                          //通用定时器3
  40.     TIM5_Handler.Init.Prescaler=psc; //8999                    //分频系数
  41.     TIM5_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //向上计数器
  42.     TIM5_Handler.Init.Period=arr; //99                       //自动装载值
  43.     TIM5_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//时钟分频因子
  44.     HAL_TIM_Base_Init(&TIM5_Handler);
  45.    
  46.     HAL_TIM_Base_Start_IT(&TIM5_Handler); //使能定时器3和定时器3更新中断:TIM_IT_UPDATE   
  47. }

  48. //定时器底册驱动,开启时钟,设置中断优先级
  49. //此函数会被HAL_TIM_Base_Init()函数调用
  50. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
  51. {
  52.     if(htim->Instance==TIM3)
  53.         {
  54.                 __HAL_RCC_TIM3_CLK_ENABLE();            //使能TIM3时钟
  55.                 HAL_NVIC_SetPriority(TIM3_IRQn,1,3);    //设置中断优先级,抢占优先级1,子优先级3
  56.                 HAL_NVIC_EnableIRQ(TIM3_IRQn);          //开启ITM3中断   
  57.         }
  58.         if(htim->Instance==TIM5)
  59.         {
  60.                 __HAL_RCC_TIM5_CLK_ENABLE();            //使能TIM3时钟
  61.                 HAL_NVIC_SetPriority(TIM5_IRQn,1,2);    //设置中断优先级,抢占优先级1,子优先级3
  62.                 HAL_NVIC_EnableIRQ(TIM5_IRQn);          //开启ITM3中断   
  63.         }
  64.         if(htim->Instance==TIM4)
  65.         {
  66.                 __HAL_RCC_TIM4_CLK_ENABLE();            //使能TIM3时钟
  67.                 HAL_NVIC_SetPriority(TIM4_IRQn,1,1);    //设置中断优先级,抢占优先级1,子优先级3
  68.                 HAL_NVIC_EnableIRQ(TIM4_IRQn);          //开启ITM3中断   
  69.         }
  70. }

  71. //定时器3中断服务函数
  72. void TIM3_IRQHandler(void)
  73. {   
  74.          if(__HAL_TIM_GET_FLAG(&TIM3_Handler, TIM_FLAG_UPDATE) != RESET)
  75.      {
  76.                 if(__HAL_TIM_GET_IT_SOURCE(&TIM3_Handler, TIM_IT_UPDATE) !=RESET)
  77.                 {
  78.                          __HAL_TIM_CLEAR_IT(&TIM3_Handler, TIM_IT_UPDATE);
  79.                          gizTimerMs();//系统毫秒定时
  80.                 }
  81.      }
  82.      
  83. }

  84. void TIM5_IRQHandler(void)
  85. {
  86.     HAL_TIM_IRQHandler(&TIM5_Handler);
  87. }

  88. void TIM4_IRQHandler(void)
  89. {
  90.     HAL_TIM_IRQHandler(&TIM4_Handler);
  91. }

  92. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  93. {
  94.     if(htim==(&TIM5_Handler))//10ms
  95.     {
  96.                 pid.C10ms++;         
  97.                 PID_Calc();       
  98.     }
  99.         if(htim==(&TIM4_Handler))//1ms
  100.     {
  101.                 PID_out();
  102.     }
  103. }
复制代码
回复 支持 反对

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2015-12-9
在线时间
22 小时
 楼主| 发表于 2019-7-24 10:18:40 | 显示全部楼层
谢谢,看到问题了,配置错了。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 16:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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