OpenEdv-开源电子网

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

关于tim8高级定时器进不了中断、

[复制链接]

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2016-3-14
在线时间
12 小时
发表于 2016-3-17 12:10:17 | 显示全部楼层 |阅读模式
void timer_initPWM(void)
{
        TIM_TimeBaseInitTypeDef TIM_BaseStructure;
        TIM_OCInitTypeDef       TIM_OcStructure;
        TIM_BDTRInitTypeDef     TIM_BdtrStructure;
        NVIC_InitTypeDef                 NVICInitStructure;
        GPIO_InitTypeDef                  GPIO_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);//PC6/PC7/PC8 = High Side, PA7/PB0/PB1 = Low Side端口复用
       
        // PC6/PC7/PC8 = High Side, PA7/PB0/PB1 = Low Side)
        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0 | GPIO_Pin_1;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_7;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        //Kommutierungsinterrupt im NVIC eintragen
        NVICInitStructure.NVIC_IRQChannel                   = TIM8_TRG_COM_IRQn;
        NVICInitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVICInitStructure.NVIC_IRQChannelSubPriority        = 1;
        NVICInitStructure.NVIC_IRQChannelCmd                = ENABLE;
        NVIC_Init(&NVICInitStructure);

        //TMR1 刷新中断
        NVICInitStructure.NVIC_IRQChannel                   = TIM8_UP_IRQn;
        NVICInitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVICInitStructure.NVIC_IRQChannelSubPriority        = 1;
        NVICInitStructure.NVIC_IRQChannelCmd                = ENABLE;
        NVIC_Init(&NVICInitStructure);

        //Deinitializes the TIM1 peripheral registers to their default reset values
        TIM_DeInit(TIM8);

        //(TIM1CLK = SYSCLK = 72MHz) => MAX_PWM_VALUE=3600 => f_PWM=20kHz (unsymmetrische PWM)(50us)
        //TIM_BaseStructure.TIM_Period            = MAX_PWM_VALUE;        //自动装载值,累计次数
        TIM_BaseStructure.TIM_Period            = 3600;        //自动装载值,累计次数
        TIM_BaseStructure.TIM_Prescaler         = 0;
        TIM_BaseStructure.TIM_ClockDivision     = TIM_CKD_DIV1;
        TIM_BaseStructure.TIM_CounterMode       = TIM_CounterMode_CenterAligned2;        //TIM8中央对齐模式2
        TIM_BaseStructure.TIM_RepetitionCounter = 1;
        TIM_TimeBaseInit(TIM8, &TIM_BaseStructure);

        //Einstellungen f黵 Kanal 1, 2 und 3 (alle gleich)
        TIM_OcStructure.TIM_OCMode       = TIM_OCMode_Timing;                //TMR8输出比较时间模式,初始化的时候不需要输出
        TIM_OcStructure.TIM_OutputState  = TIM_OutputState_Disable;        //使能输出比较状态
        TIM_OcStructure.TIM_OutputNState = TIM_OutputNState_Disable;//使能输出比较N状态
        TIM_OcStructure.TIM_Pulse        = 0;                                                //待装入捕获比较寄存器的脉冲值
        TIM_OcStructure.TIM_OCPolarity   = TIM_OCPolarity_High;                //TMR1输出比较极性高
        TIM_OcStructure.TIM_OCNPolarity  = TIM_OCNPolarity_High;        //TMR1输出比较N极性高
        TIM_OcStructure.TIM_OCIdleState  = TIM_OCIdleState_Set;                //当MOE=0设置TIM8输出比较空闲状态
        TIM_OcStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;        //当MOE=0设置TIM8输出比较N空闲状态
        TIM_OC1Init(TIM8, &TIM_OcStructure);
        TIM_OC2Init(TIM8, &TIM_OcStructure);
        TIM_OC3Init(TIM8, &TIM_OcStructure);

        //Einstellungen f黵 Totzeit und automatische Ausgabe der PWMs
        TIM_BdtrStructure.TIM_OSSRState       = TIM_OSSRState_Enable;                //使能TIM8 OSSR状态
        TIM_BdtrStructure.TIM_OSSIState       = TIM_OSSIState_Enable;                //使能TIM8 OSSI状态
        TIM_BdtrStructure.TIM_LOCKLevel       = TIM_LOCKLevel_OFF;                        //不锁任何位
        TIM_BdtrStructure.TIM_DeadTime        = 2;                                                        //输出打开和关闭状态之间的延时,死区时间
        TIM_BdtrStructure.TIM_Break           = TIM_Break_Disable;                        //失能TIM8刹车输入
        TIM_BdtrStructure.TIM_BreakPolarity   = TIM_BreakPolarity_High;                //TIM8刹车输入管脚极性高
        TIM_BdtrStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;        //自动输出功能使能
        TIM_BDTRConfig(TIM8, &TIM_BdtrStructure);

        TIM_ITConfig(TIM8, TIM_IT_Update, ENABLE);                //使能刷新中断
        TIM_ITConfig(TIM8, TIM_IT_COM, ENABLE);                        //使能比较

//        TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);         //使能捕获比较寄存器预装载(通道1)
//        TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);         //使能捕获比较寄存器预装载(通道2)
//        TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);         //使能捕获比较寄存器预装载(通道3)
//        TIM_CCPreloadControl(TIM1, ENABLE);                                //使能TMR8捕获比较控制位

        TIM_Cmd(TIM8, ENABLE);                                                        //使能TMR8
        TIM_CtrlPWMOutputs(TIM8, ENABLE);                                //使能TIM8的主输出
}

void TIM8_UP_IRQHandler()
{
        TIM_ClearITPendingBit(TIM8, TIM_IT_Update);
}



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

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2016-3-14
在线时间
12 小时
 楼主| 发表于 2016-3-17 12:11:46 | 显示全部楼层
软件仿真时,发现,进不了更新中断,不知道哪里出问题,我检查了好几遍,应该没有错了啊,用了高级定时器tim8,该使能的也使能了,该开的也开了,就是进不了中断服务函数
回复 支持 反对

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2013-12-25
在线时间
18 小时
发表于 2017-8-31 23:19:12 | 显示全部楼层
Tim8这个中断最近我也在弄。  很怪异,让我很怀疑人生。 TIM1能行,全复制改过不行。仿真看不到CNT增加。
回复 支持 反对

使用道具 举报

0

主题

125

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
221
金钱
221
注册时间
2017-5-26
在线时间
76 小时
发表于 2017-9-1 07:50:47 来自手机 | 显示全部楼层
帮顶!!!
回复 支持 反对

使用道具 举报

12

主题

144

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2017-8-1
在线时间
92 小时
发表于 2017-9-1 09:16:58 | 显示全部楼层
TIM8这个定时器是假的,实际上根本不存在的。就是ST官方骗人的,他知道一般人很少用TIM8,以为被人不会发现而已!
青涩不及当初,聚散不由你我!
回复 支持 反对

使用道具 举报

4

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1046
金钱
1046
注册时间
2017-5-19
在线时间
335 小时
发表于 2017-9-1 09:25:50 | 显示全部楼层
先看看芯片型号有没有选对,有些芯片没有TIM8
回复 支持 反对

使用道具 举报

1

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-10-1
在线时间
23 小时
发表于 2018-1-15 13:33:34 | 显示全部楼层
风清扬丶 发表于 2017-9-1 09:16
TIM8这个定时器是假的,实际上根本不存在的。就是ST官方骗人的,他知道一般人很少用TIM8,以为被人不会发现 ...

最近我也在用TIM8定时器更新中断。我也发现同样问题:http://www.openedv.com/forum.php ... &highlight=TIM8
项目:TIM8输入捕获+TIM8更新计次数。为什么进不了更新中断?
难道说的是真的?ST骗人
回复 支持 反对

使用道具 举报

1

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-10-1
在线时间
23 小时
发表于 2018-1-15 13:36:55 | 显示全部楼层
可能TIM8更新中断就是假的。我也发现一样问题。现在解决了吗?
回复 支持 反对

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2016-3-14
在线时间
12 小时
 楼主| 发表于 2018-1-19 21:16:14 | 显示全部楼层
15861845402 发表于 2018-1-15 13:36
可能TIM8更新中断就是假的。我也发现一样问题。现在解决了吗?

好久之前的了,发这个问题的时候我还在读大四,现在已经工作一年,庆幸自己工作后也一直使用这个程序,仿真的时候是进入不了tim8中断的,实际可以,可以用示波器测得到的
回复 支持 反对

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2016-3-14
在线时间
12 小时
 楼主| 发表于 2018-1-19 21:16:28 | 显示全部楼层
15861845402 发表于 2018-1-15 13:33
最近我也在用TIM8定时器更新中断。我也发现同样问题:http://www.openedv.com/forum.php?mod=viewthread& ...

好久之前的了,发这个问题的时候我还在读大四,现在已经工作一年,庆幸自己工作后也一直使用这个程序,仿真的时候是进入不了tim8中断的,实际可以,可以用示波器测得到的
回复 支持 反对

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2016-3-14
在线时间
12 小时
 楼主| 发表于 2018-1-19 21:16:39 | 显示全部楼层
风清扬丶 发表于 2017-9-1 09:16
TIM8这个定时器是假的,实际上根本不存在的。就是ST官方骗人的,他知道一般人很少用TIM8,以为被人不会发现 ...

好久之前的了,发这个问题的时候我还在读大四,现在已经工作一年,庆幸自己工作后也一直使用这个程序,仿真的时候是进入不了tim8中断的,实际可以,可以用示波器测得到的。
回复 支持 反对

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2016-3-14
在线时间
12 小时
 楼主| 发表于 2018-1-19 21:16:51 | 显示全部楼层
roguebear 发表于 2017-8-31 23:19
Tim8这个中断最近我也在弄。  很怪异,让我很怀疑人生。 TIM1能行,全复制改过不行。仿真看不到CNT增加。

好久之前的了,发这个问题的时候我还在读大四,现在已经工作一年,庆幸自己工作后也一直使用这个程序,仿真的时候是进入不了tim8中断的,实际可以,可以用示波器测得到的。。
回复 支持 反对

使用道具 举报

1

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-10-1
在线时间
23 小时
发表于 2018-1-19 22:02:04 | 显示全部楼层
shmilyzgc 发表于 2018-1-19 21:16
好久之前的了,发这个问题的时候我还在读大四,现在已经工作一年,庆幸自己工作后也一直使用这个程序,仿 ...

我的STM32F103ZET6的TIM8确实无法更新中断,奇怪了,其他定时器都好用的。
我用在输入捕获看定时器溢出的。如上面我说的项目。
你这个程序可用?我试试?
回复 支持 反对

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2016-3-14
在线时间
12 小时
 楼主| 发表于 2018-1-20 08:23:48 | 显示全部楼层
15861845402 发表于 2018-1-19 22:02
我的STM32F103ZET6的TIM8确实无法更新中断,奇怪了,其他定时器都好用的。
我用在输入捕获看定时器溢出 ...

我刚才看了一下,我的程序是使用TIM1和TIM8两个高级定时器组成的一个刷无刷电机控制系统,两个都在tim1中断里面运行的
回复 支持 反对

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2016-3-14
在线时间
12 小时
 楼主| 发表于 2018-1-20 08:24:21 | 显示全部楼层
shmilyzgc 发表于 2018-1-20 08:23
我刚才看了一下,我的程序是使用TIM1和TIM8两个高级定时器组成的一个刷无刷电机控制系统,两个都在tim1中 ...

tim8中断没有使用,只是通过tim8来生成了互补的pwm波
回复 支持 反对

使用道具 举报

1

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-10-1
在线时间
23 小时
发表于 2018-1-21 16:52:36 | 显示全部楼层
shmilyzgc 发表于 2018-1-20 08:24
tim8中断没有使用,只是通过tim8来生成了互补的pwm波

我串口助手也未测出TIM8有更新中断累加,其他定时器都可以的。我估计TIM8更新中断真是骗人。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 17:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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