OpenEdv-开源电子网

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

STM32F405rgt6 HAL库开多个定时器卡死

[复制链接]

4

主题

13

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-5-18
在线时间
20 小时
发表于 2021-12-3 10:25:05 | 显示全部楼层 |阅读模式
5金钱
使用STM32Cube自动生成的程序,开一个TIM2中断时程序运行,再开一个TIM3时程序卡死在
  1. TIM3_IRQHandler  
  2.         B TIM3_IRQHandler

  3.         PUBWEAK TIM4_IRQHandler
  4.         SECTION .text:CODE:REORDER:NOROOT(1)
复制代码
程序代码如下


  1. /* Includes ------------------------------------------------------------------*/
  2. #include "tim.h"

  3. /* USER CODE BEGIN 0 */

  4. /* USER CODE END 0 */

  5. TIM_HandleTypeDef htim2;//定时器句柄
  6. TIM_HandleTypeDef htim3;//定时器句柄
  7. TIM_HandleTypeDef htim4;//定时器句柄
  8. TIM_HandleTypeDef htim5;//定时器句柄

  9. /* TIM2 init function */
  10. //通用定时器3中断初始化
  11. //arr:自动重装值。
  12. //psc:时钟预分频数
  13. //定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
  14. //Ft=定时器工作频率,单位:Mhz
  15. //这里使用的是定时器3!(定时器3挂在APB1上,时钟为HCLK/2)
  16. void MX_TIM2_Init(void)
  17. {

  18.   /* USER CODE BEGIN TIM2_Init 0 */

  19.   /* USER CODE END TIM2_Init 0 */

  20.   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  21.   TIM_MasterConfigTypeDef sMasterConfig = {0};

  22.   /* USER CODE BEGIN TIM2_Init 1 */

  23.   /* USER CODE END TIM2_Init 1 */
  24.   htim2.Instance = TIM2;
  25.   htim2.Init.Prescaler = 7199;
  26.   htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  27.   htim2.Init.Period = 4999;
  28.   htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  29.   htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  30.   if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  31.   {
  32.     Error_Handler();
  33.   }
  34.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  35.   if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  36.   {
  37.     Error_Handler();
  38.   }
  39.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  40.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  41.   if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  42.   {
  43.     Error_Handler();
  44.   }
  45.   /* USER CODE BEGIN TIM2_Init 2 */
  46. HAL_TIM_Base_Start_IT(&htim2);
  47.   /* USER CODE END TIM2_Init 2 */

  48. }
  49. /* TIM3 init function */
  50. //通用定时器3中断初始化
  51. //arr:自动重装值。
  52. //psc:时钟预分频数
  53. //定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
  54. //Ft=定时器工作频率,单位:Mhz
  55. //这里使用的是定时器3!(定时器3挂在APB1上,时钟为HCLK/2)
  56. void MX_TIM3_Init(void)
  57. {

  58.   /* USER CODE BEGIN TIM3_Init 0 */

  59.   /* USER CODE END TIM3_Init 0 */

  60.   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  61.   TIM_MasterConfigTypeDef sMasterConfig = {0};

  62.   /* USER CODE BEGIN TIM3_Init 1 */

  63.   /* USER CODE END TIM3_Init 1 */
  64.   htim3.Instance = TIM3;
  65.   htim3.Init.Prescaler = 8399;
  66.   htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  67.   htim3.Init.Period = 999;
  68.   htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  69.   htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  70.   if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
  71.   {
  72.     Error_Handler();
  73.   }
  74.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  75.   if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
  76.   {
  77.     Error_Handler();
  78.   }
  79.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  80.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  81.   if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
  82.   {
  83.     Error_Handler();
  84.   }
  85.   /* USER CODE BEGIN TIM3_Init 2 */
  86.   HAL_TIM_Base_Start_IT(&htim3);
  87.   /* USER CODE END TIM3_Init 2 */

  88. }
  89. /* TIM4 init function */
  90. void MX_TIM4_Init(void)
  91. {

  92.   /* USER CODE BEGIN TIM4_Init 0 */

  93.   /* USER CODE END TIM4_Init 0 */

  94.   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  95.   TIM_MasterConfigTypeDef sMasterConfig = {0};

  96.   /* USER CODE BEGIN TIM4_Init 1 */

  97.   /* USER CODE END TIM4_Init 1 */
  98.   htim4.Instance = TIM4;
  99.   htim4.Init.Prescaler = 839;
  100.   htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  101.   htim4.Init.Period = 9;
  102.   htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  103.   htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  104.   if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
  105.   {
  106.     Error_Handler();
  107.   }
  108.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  109.   if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
  110.   {
  111.     Error_Handler();
  112.   }
  113.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  114.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  115.   if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
  116.   {
  117.     Error_Handler();
  118.   }
  119.   /* USER CODE BEGIN TIM4_Init 2 */

  120.   /* USER CODE END TIM4_Init 2 */

  121. }
  122. /* TIM5 init function */
  123. void MX_TIM5_Init(void)
  124. {

  125.   /* USER CODE BEGIN TIM5_Init 0 */

  126.   /* USER CODE END TIM5_Init 0 */

  127.   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  128.   TIM_MasterConfigTypeDef sMasterConfig = {0};
  129.   TIM_OC_InitTypeDef sConfigOC = {0};

  130.   /* USER CODE BEGIN TIM5_Init 1 */

  131.   /* USER CODE END TIM5_Init 1 */
  132.   htim5.Instance = TIM5;
  133.   htim5.Init.Prescaler = 83;
  134.   htim5.Init.CounterMode = TIM_COUNTERMODE_UP;
  135.   htim5.Init.Period = 999;
  136.   htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  137.   htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  138.   if (HAL_TIM_Base_Init(&htim5) != HAL_OK)
  139.   {
  140.     Error_Handler();
  141.   }
  142.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  143.   if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK)
  144.   {
  145.     Error_Handler();
  146.   }
  147.   if (HAL_TIM_PWM_Init(&htim5) != HAL_OK)
  148.   {
  149.     Error_Handler();
  150.   }
  151.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  152.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  153.   if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK)
  154.   {
  155.     Error_Handler();
  156.   }
  157.   sConfigOC.OCMode = TIM_OCMODE_PWM1;
  158.   sConfigOC.Pulse = 0;
  159.   sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
  160.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  161.   if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  162.   {
  163.     Error_Handler();
  164.   }
  165.   if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
  166.   {
  167.     Error_Handler();
  168.   }
  169.   /* USER CODE BEGIN TIM5_Init 2 */

  170.   /* USER CODE END TIM5_Init 2 */
  171.   HAL_TIM_MspPostInit(&htim5);

  172. }

  173. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
  174. {

  175.   if(tim_baseHandle->Instance==TIM2)
  176.   {
  177.   /* USER CODE BEGIN TIM2_MspInit 0 */

  178.   /* USER CODE END TIM2_MspInit 0 */
  179.     /* TIM2 clock enable */
  180.     __HAL_RCC_TIM2_CLK_ENABLE();

  181.     /* TIM2 interrupt Init */
  182.     HAL_NVIC_SetPriority(TIM2_IRQn, 2, 0);
  183.     HAL_NVIC_EnableIRQ(TIM2_IRQn);
  184.   /* USER CODE BEGIN TIM2_MspInit 1 */

  185.   /* USER CODE END TIM2_MspInit 1 */
  186.   }
  187.   else if(tim_baseHandle->Instance==TIM3)
  188.   {
  189.   /* USER CODE BEGIN TIM3_MspInit 0 */

  190.   /* USER CODE END TIM3_MspInit 0 */
  191.     /* TIM3 clock enable */
  192.     __HAL_RCC_TIM3_CLK_ENABLE();

  193.     /* TIM3 interrupt Init */
  194.     HAL_NVIC_SetPriority(TIM3_IRQn, 2, 1);
  195.     HAL_NVIC_EnableIRQ(TIM3_IRQn);
  196.   /* USER CODE BEGIN TIM3_MspInit 1 */

  197.   /* USER CODE END TIM3_MspInit 1 */
  198.   }
  199.   else if(tim_baseHandle->Instance==TIM4)
  200.   {
  201.   /* USER CODE BEGIN TIM4_MspInit 0 */

  202.   /* USER CODE END TIM4_MspInit 0 */
  203.     /* TIM4 clock enable */
  204.     __HAL_RCC_TIM4_CLK_ENABLE();

  205.     /* TIM4 interrupt Init */
  206.     HAL_NVIC_SetPriority(TIM4_IRQn, 2, 2);
  207.     HAL_NVIC_EnableIRQ(TIM4_IRQn);
  208.   /* USER CODE BEGIN TIM4_MspInit 1 */

  209.   /* USER CODE END TIM4_MspInit 1 */
  210.   }
  211.   else if(tim_baseHandle->Instance==TIM5)
  212.   {
  213.   /* USER CODE BEGIN TIM5_MspInit 0 */

  214.   /* USER CODE END TIM5_MspInit 0 */
  215.     /* TIM5 clock enable */
  216.     __HAL_RCC_TIM5_CLK_ENABLE();

  217.     /* TIM5 interrupt Init */
  218.     HAL_NVIC_SetPriority(TIM5_IRQn, 2, 3);
  219.     HAL_NVIC_EnableIRQ(TIM5_IRQn);
  220.   /* USER CODE BEGIN TIM5_MspInit 1 */

  221.   /* USER CODE END TIM5_MspInit 1 */
  222.   }
  223. }
  224. void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
  225. {

  226.   GPIO_InitTypeDef GPIO_InitStruct = {0};
  227.   if(timHandle->Instance==TIM5)
  228.   {
  229.   /* USER CODE BEGIN TIM5_MspPostInit 0 */

  230.   /* USER CODE END TIM5_MspPostInit 0 */

  231.     __HAL_RCC_GPIOA_CLK_ENABLE();
  232.     /**TIM5 GPIO Configuration
  233.     PA1     ------> TIM5_CH2
  234.     PA2     ------> TIM5_CH3
  235.     */
  236.     GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2;
  237.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  238.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  239.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  240.     GPIO_InitStruct.Alternate = GPIO_AF2_TIM5;
  241.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  242.   /* USER CODE BEGIN TIM5_MspPostInit 1 */

  243.   /* USER CODE END TIM5_MspPostInit 1 */
  244.   }

  245. }

  246. void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
  247. {

  248.   if(tim_baseHandle->Instance==TIM2)
  249.   {
  250.   /* USER CODE BEGIN TIM2_MspDeInit 0 */

  251.   /* USER CODE END TIM2_MspDeInit 0 */
  252.     /* Peripheral clock disable */
  253.     __HAL_RCC_TIM2_CLK_DISABLE();

  254.     /* TIM2 interrupt Deinit */
  255.     HAL_NVIC_DisableIRQ(TIM2_IRQn);
  256.   /* USER CODE BEGIN TIM2_MspDeInit 1 */

  257.   /* USER CODE END TIM2_MspDeInit 1 */
  258.   }
  259.   else if(tim_baseHandle->Instance==TIM3)
  260.   {
  261.   /* USER CODE BEGIN TIM3_MspDeInit 0 */

  262.   /* USER CODE END TIM3_MspDeInit 0 */
  263.     /* Peripheral clock disable */
  264.     __HAL_RCC_TIM3_CLK_DISABLE();

  265.     /* TIM3 interrupt Deinit */
  266.     HAL_NVIC_DisableIRQ(TIM3_IRQn);
  267.   /* USER CODE BEGIN TIM3_MspDeInit 1 */

  268.   /* USER CODE END TIM3_MspDeInit 1 */
  269.   }
  270.   else if(tim_baseHandle->Instance==TIM4)
  271.   {
  272.   /* USER CODE BEGIN TIM4_MspDeInit 0 */

  273.   /* USER CODE END TIM4_MspDeInit 0 */
  274.     /* Peripheral clock disable */
  275.     __HAL_RCC_TIM4_CLK_DISABLE();

  276.     /* TIM4 interrupt Deinit */
  277.     HAL_NVIC_DisableIRQ(TIM4_IRQn);
  278.   /* USER CODE BEGIN TIM4_MspDeInit 1 */

  279.   /* USER CODE END TIM4_MspDeInit 1 */
  280.   }
  281.   else if(tim_baseHandle->Instance==TIM5)
  282.   {
  283.   /* USER CODE BEGIN TIM5_MspDeInit 0 */

  284.   /* USER CODE END TIM5_MspDeInit 0 */
  285.     /* Peripheral clock disable */
  286.     __HAL_RCC_TIM5_CLK_DISABLE();

  287.     /* TIM5 interrupt Deinit */
  288.     HAL_NVIC_DisableIRQ(TIM5_IRQn);
  289.   /* USER CODE BEGIN TIM5_MspDeInit 1 */

  290.   /* USER CODE END TIM5_MspDeInit 1 */
  291.   }
  292. }

  293. /* USER CODE BEGIN 1 */
  294. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  295. {
  296.     static unsigned char ledState = 0;
  297.     if (htim == (&htim2))
  298.     {
  299.         if (ledState == 0)
  300.             HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_RESET);
  301.         else
  302.             HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_SET);
  303.         
  304.     }
  305.     if (htim == (&htim3))
  306.     {
  307.       ledState = !ledState;
  308.     }
  309. }
  310. /* USER CODE END 1 */

  311. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
复制代码


企业微信截图_16384981637503.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-5-18
在线时间
20 小时
 楼主| 发表于 2021-12-3 10:28:54 | 显示全部楼层
中断优先级也换过了依旧卡死
回复

使用道具 举报

2

主题

369

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4241
金钱
4241
注册时间
2020-7-24
在线时间
714 小时
发表于 2021-12-3 15:05:59 | 显示全部楼层
帮顶  
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2021-12-4 01:08:05 | 显示全部楼层
你这看起来像是没有中断服务函数啊
回复

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-5-18
在线时间
20 小时
 楼主| 发表于 2021-12-6 08:36:46 | 显示全部楼层
正点原子 发表于 2021-12-4 01:08
你这看起来像是没有中断服务函数啊

是的 原子哥,但是很奇怪这个是CubeMX自动发生成的,所有头文件都包含进去了,就像中断的那个.C没编译进去一样,但是左边列表的确显示编译了
回复

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-5-18
在线时间
20 小时
 楼主| 发表于 2021-12-6 09:58:35 | 显示全部楼层
正点原子 发表于 2021-12-4 01:08
你这看起来像是没有中断服务函数啊
自动生成的在这里

  1. /**
  2.   * @brief This function handles TIM2 global interrupt.
  3.   */
  4. void TIM2_IRQHandler(void)
  5. {
  6.   /* USER CODE BEGIN TIM2_IRQn 0 */

  7.   /* USER CODE END TIM2_IRQn 0 */
  8.   HAL_TIM_IRQHandler(&htim2);
  9.   /* USER CODE BEGIN TIM2_IRQn 1 */

  10.   /* USER CODE END TIM2_IRQn 1 */
  11. }

  12. /**
  13.   * @brief This function handles TIM3 global interrupt.
  14.   */
  15. void TIM3_IRQHandler(void)
  16. {
  17.   /* USER CODE BEGIN TIM3_IRQn 0 */

  18.   /* USER CODE END TIM3_IRQn 0 */
  19.   HAL_TIM_IRQHandler(&htim3);
  20.   /* USER CODE BEGIN TIM3_IRQn 1 */

  21.   /* USER CODE END TIM3_IRQn 1 */
  22. }
复制代码
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2021-12-7 01:20:52 | 显示全部楼层
769417953 发表于 2021-12-6 09:58
自动生成的在这里

仿真调试找问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 09:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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