OpenEdv-开源电子网

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

TIM3捕获配置时,只要一NVIC_Init使能中断就卡死, 急请指点下

[复制链接]

1

主题

7

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2023-11-28
在线时间
4 小时
发表于 2023-12-1 11:33:34 | 显示全部楼层 |阅读模式
1金钱
STM32F103ZET6板子,想用TIM3_CH2来捕获TIM8 CH3输出的pwm,为此将pwm TIM8_CH3输出的管脚PC8 和 TIM3_CH2管脚PA7 连起来后,发现程序执行不下去了(不连起来就能执行)。卡死了好像。请帮看下可能原因。

做过的尝试:
1、自己把TIM3 CH2的优先级改成最高(抢占优先级为0,响应优先级也为0),也不行。
2、PC8 和 TIM3_CH2管脚PA7 连线去除,发现程序能执行下去
3、中断不使能,就是不执行Nvic_init也可以执行下去,说明肯定是和中断相关。

TIM3_CH2初始化的代码:

  1. void InitFan3InletFG(void)
  2. {
  3.     GPIO_InitTypeDef GPIO_InitStructure;
  4.     TIM_ICInitTypeDef TIM_ICInitStructure;
  5.     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  6.     NVIC_InitTypeDef NVIC_InitStructure;

  7.     //初始化GPIO复用
  8.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  9.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  10.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  11.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  12.     GPIO_Init(GPIOA, &GPIO_InitStructure);

  13.     //初始化定时器
  14.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  15.     TIM_TimeBaseStructure.TIM_Period = 0xFFFF-1;
  16.     TIM_TimeBaseStructure.TIM_Prescaler = 72-1; //1us,总时间65ms
  17.     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  18.     TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

  19.     /* IC2,上升沿触发 TI2FP2 */
  20.     TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
  21.     TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  22.     TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  23.     TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  24.     TIM_ICInitStructure.TIM_ICFilter = 0x0;
  25.     TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);

  26.     TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);
  27.     TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);
  28.     TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable);

  29.     TIM_Cmd(TIM3, ENABLE);

  30.     //使能CC2捕获中断,主
  31.     TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);

  32.     //使能中断
  33.     NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  34.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  35.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //3; //0; //1; // 3;  //20231130pm5 try modified to 1
  36.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  37. ///////    NVIC_Init(&NVIC_InitStructure); ///////1130pm15: disable try  不使能就可以执行
  38. NVIC_Init(&NVIC_InitStructure);
  39. }
复制代码
中断处理函数:
  1. void TIM3_IRQHandler(void)
  2. {
  3.     Timer3ISR();
  4. }
  5. void Timer3ISR(void)
  6. {
  7.     int ret;

  8.     g_tim3Count++;
  9.     if (g_tim3Count % 100 == 0) {
  10.         //printf("timer3 got\r\n");
  11.     }  //之前调试时想低频率打印,但没有看到这个打印。后来去掉了打印
  12.    
  13.     TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);
  14.     TIM_ClearITPendingBit(TIM3, TIM_IT_CC1);
  15.     TIM_ClearITPendingBit(TIM3, TIM_IT_CC3);
  16.     TIM_ClearITPendingBit(TIM3, TIM_IT_CC4);

  17.     //TIM3, CH2通道
  18.     ret = TIM_GetFlagStatus(TIM3, TIM_FLAG_CC2);
  19.     if (ret)
  20.     {
  21.         TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);
  22.         Tim3Ch2Isr();
  23.     }

  24.     //TIM3, CH1通道
  25.     ret = TIM_GetFlagStatus(TIM3, TIM_FLAG_CC1);
  26.     if (ret)
  27.     {
  28.         TIM_ClearITPendingBit(TIM3, TIM_IT_CC1);
  29.         Tim3Ch1Isr();
  30.     }

  31.     //TIM3, CH3通道
  32.     ret = TIM_GetFlagStatus(TIM3, TIM_FLAG_CC3);
  33.     if (ret)
  34.     {
  35.         TIM_ClearITPendingBit(TIM3, TIM_IT_CC3);
  36.         Tim3Ch3Isr();
  37.     }

  38.     //TIM3, CH4通道
  39.     ret = TIM_GetFlagStatus(TIM3, TIM_FLAG_CC4);
  40.     if (ret)
  41.     {
  42.         TIM_ClearITPendingBit(TIM3, TIM_IT_CC4);
  43.         Tim3Ch4Isr();
  44.     }
  45. }
复制代码


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2023-11-28
在线时间
4 小时
 楼主| 发表于 2023-12-4 09:28:00 | 显示全部楼层
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2023-11-28
在线时间
4 小时
 楼主| 发表于 2023-12-19 14:38:07 | 显示全部楼层
此问题已定位清楚,本人中断向量表的地址设置的有问题导致。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 17:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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