OpenEdv-开源电子网

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

STM32F4定时器的主从模式

[复制链接]

11

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
234
金钱
234
注册时间
2013-12-5
在线时间
23 小时
发表于 2016-3-7 21:33:02 | 显示全部楼层 |阅读模式
1金钱
我用定时器4配置成PWM输出,同时做为主模式,定时器5配置为输出比较模式,作为从模式。为什么定时器5没有进输出比较的中断里面

void Timer4_Init(void)
{
        GPIO_InitTypeDef                        GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef                TIM_TimeBaseStructure;
        TIM_OCInitTypeDef                        TIM_OCInitStructure;

        /* TIM4 clock enable */
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);

        /* GPIOD clock enable */
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

        //ÅäÖÃTIM4μÄDÅoÅêä3ö1ü½ÅÎaPD12£¬OC1í¨μ࣬êä3&#246SINCDÅoÅ
        /* TIM4 channel 1 pin (PD12) configuration */
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOD, &GPIO_InitStructure);
       
       
        /* Connect TIM pins to AF2 */
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_TIM4);

         /* Time Base configuration */
         TIM_TimeBaseStructure.TIM_Prescaler = 4-1;                 //84M/4=21Mhz
         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
           TIM_TimeBaseStructure.TIM_Period = 700;                                 //21M/700=30Khz.
           TIM_TimeBaseStructure.TIM_ClockDivision = 0;
           TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

         TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);


  /* Channel 1 Configuration in PWM mode */
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
        TIM_OCInitStructure.TIM_Pulse = 350;                                        //50%
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
        TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
        TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
        TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
       
        TIM_OC1Init(TIM4, &TIM_OCInitStructure);
       
        /* Master Mode selection: TIM1 */
        TIM_SelectOutputTrigger(TIM4, TIM_TRGOSource_Update);//
        /* Select the Master Slave Mode */
        TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable);

        /* TIM enable counter */
        TIM_Cmd(TIM4, ENABLE);
       
        /* TIM1 Main Output Enable */
        TIM_CtrlPWMOutputs(TIM4,ENABLE);
       
}

void Timer5_Init(void)
{
        GPIO_InitTypeDef                        GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef                TIM_TimeBaseStructure;

        /* TIM9 clock enable */
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
        /* GPIOE clock enable */
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

        /* Configure PD11 in output pushpull mode */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOD, &GPIO_InitStructure);
        GPIO_ResetBits(GPIOD, GPIO_Pin_11);


        TIM_TimeBaseStructure.TIM_Period = 1000;
        TIM_TimeBaseStructure.TIM_Prescaler = 0;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);

        /* Slave Mode selection: TIM4 */
        TIM_SelectInputTrigger(TIM5, TIM_TS_ITR2);
        TIM_SelectSlaveMode(TIM5, TIM_SlaveMode_Trigger);       

        TIM_SetCompare1(TIM5,20);
        TIM_SetCompare2(TIM5,30);
        TIM_ITConfig(TIM5,TIM_IT_CC1,ENABLE);
        TIM_ITConfig(TIM5,TIM_IT_CC2,ENABLE);
       
        /* TIM enable counter */
        TIM_Cmd(TIM5, ENABLE);
}

void TIM5_IRQHandler(void)
{
        if(TIM_GetFlagStatus(TIM5,TIM_FLAG_CC1) == SET)       
        {
                GPIO_SetBits(GPIOD, GPIO_Pin_11);
                TIM_ClearITPendingBit(TIM5,TIM_IT_CC1);

        }
        if(TIM_GetFlagStatus(TIM5,TIM_FLAG_CC2) == SET)       
        {
                GPIO_ResetBits(GPIOD, GPIO_Pin_11);
                TIM_ClearITPendingBit(TIM5,TIM_IT_CC2);
        }
}

最佳答案

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

使用道具 举报

11

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
234
金钱
234
注册时间
2013-12-5
在线时间
23 小时
 楼主| 发表于 2016-3-7 21:33:03 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2016-3-9 23:37:12 | 显示全部楼层
帮顶
回复

使用道具 举报

11

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
234
金钱
234
注册时间
2013-12-5
在线时间
23 小时
 楼主| 发表于 2016-3-11 23:11:50 | 显示全部楼层
自己订
回复

使用道具 举报

11

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
234
金钱
234
注册时间
2013-12-5
在线时间
23 小时
 楼主| 发表于 2016-3-17 22:45:08 | 显示全部楼层
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-4-11
在线时间
0 小时
发表于 2016-4-11 15:10:42 | 显示全部楼层
请问现在能准确计数PWM的个数吗?
回复

使用道具 举报

11

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
234
金钱
234
注册时间
2013-12-5
在线时间
23 小时
 楼主| 发表于 2016-12-11 11:20:54 | 显示全部楼层
YANG_C 发表于 2016-4-11 15:10
请问现在能准确计数PWM的个数吗?

能正常输出了
回复

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2017-9-2
在线时间
33 小时
发表于 2017-11-3 11:00:16 | 显示全部楼层

楼主能详细说说经验么,我想参考你的源码,1942792155@qq.com
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-7-2
在线时间
2 小时
发表于 2019-7-3 14:25:28 | 显示全部楼层
楼主  当时是哪里出了问题呢,能说一说吗
回复

使用道具 举报

11

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
234
金钱
234
注册时间
2013-12-5
在线时间
23 小时
 楼主| 发表于 2019-7-9 17:04:27 | 显示全部楼层
趙小旾 发表于 2019-7-3 14:25
楼主  当时是哪里出了问题呢,能说一说吗

太久了,忘记了
回复

使用道具 举报

7

主题

20

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2022-5-17
在线时间
19 小时
发表于 2022-10-17 15:34:09 | 显示全部楼层
定时器5的中断没有初始化应该是这个原因
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 23:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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