OpenEdv-开源电子网

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

有没有STM32F407ZGTIME1互补4路PWM输出程序

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2019-7-5
在线时间
3 小时
发表于 2019-7-16 16:51:31 | 显示全部楼层 |阅读模式
有没有STM32F407ZGTIME1互补4路PWM输出程序


一组两路PWM互补输出为一组,其余两路为互补输出

并且有死区。

有的可联系我呀。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10567
金钱
10567
注册时间
2017-2-18
在线时间
1913 小时
发表于 2019-7-16 19:32:10 | 显示全部楼层
回复 支持 反对

使用道具 举报

2

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2019-7-17
在线时间
48 小时
发表于 2019-7-18 09:32:35 | 显示全部楼层
使用 TIM 的 TIM_OCMODE_PWM1 或者 TIM_OCMODE_PWM2
再配置对应的极性即可
下面是我用过的,但是不是你的那个需求,应该只需要修改我两处就行了,
{
                GPIO_InitTypeDef                                        GPIO_InitStruct;
                TIM_MasterConfigTypeDef        sMasterConfig;


                GPIO_InitStruct.Pin                          = HVC_LLN_CH1N_PIN|HVC_LLP_CH1_PIN|
                                                                                                                                 HVC_RLN_CH2N_PIN|HVC_RLP_CH2_PIN|
                                                                                                                                 TIM1_BRK_IN_PIN;
    GPIO_InitStruct.Mode                         = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull                         = GPIO_PULLDOWN;
    GPIO_InitStruct.Speed                 = GPIO_SPEED_FREQ_MEDIUM;
    GPIO_InitStruct.Alternate = GPIO_AF2_TIM1;  
    HAL_GPIO_Init(HVC_GPIO_PORT_E, &GPIO_InitStruct);

                SHOCK_RELEASE_TIM_CLK_ENABLE();

                // 暂时使用内部晶振
                tim1_shock_release.Instance                = SHOCK_RELEASE_TIM;
                tim1_shock_release.Init.ClockDivision            = TIM_CLOCKDIVISION_DIV1;
                tim1_shock_release.Init.Prescaler                            = SHOCK_RELEASE_TIM_PRESCALER - 1; //   1us
                tim1_shock_release.Init.CounterMode                    = TIM_COUNTERMODE_UP;
                tim1_shock_release.Init.Period                                            = SHOCK_RELEASE_TIM_PERIOD - 1;  
                tim1_shock_release.Init.AutoReloadPreload  = TIM_AUTORELOAD_PRELOAD_DISABLE;
                //tim1_shock_release.Init.RepetitionCounter = 3;
                HAL_TIM_OC_Init(&tim1_shock_release);


          sMasterConfig.MasterOutputTrigger    = TIM_TRGO_RESET;
          sMasterConfig.MasterOutputTrigger2   = TIM_TRGO2_RESET;
          sMasterConfig.MasterSlaveMode        = TIM_MASTERSLAVEMODE_DISABLE;
          HAL_TIMEx_MasterConfigSynchronization(&tim1_shock_release, &sMasterConfig);


                tim1_sConfigOC.OCMode                         = TIM_OCMODE_PWM2;   // TIM_OCMODE_ACTIVE
                tim1_sConfigOC.Pulse                          = 5 ;
                tim1_sConfigOC.OCPolarity         = TIM_OCPOLARITY_LOW;   // 需修改
                tim1_sConfigOC.OCIdleState  = TIM_OCIDLESTATE_RESET;
               
                tim1_sConfigOC.OCNPolarity  = TIM_OCNPOLARITY_HIGH;   // 需修改
                tim1_sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
               
                tim1_sConfigOC.OCFastMode         = TIM_OCFAST_DISABLE;
                HAL_TIM_OC_ConfigChannel(&tim1_shock_release, &tim1_sConfigOC, TIM_CHANNEL_1);
                HAL_TIM_OC_ConfigChannel(&tim1_shock_release, &tim1_sConfigOC, TIM_CHANNEL_2);


                /* Tdts = (1/64)us
                *  dead time 0xC8 = 1100 1000
                *  DT = ( 32 + 0x8 )*8*(1/64)us = 5us
                */
          tim1_sBreakDeadTimeConfig.OffStateRunMode    = TIM_OSSR_ENABLE;
          tim1_sBreakDeadTimeConfig.OffStateIDLEMode   = TIM_OSSI_ENABLE;
          tim1_sBreakDeadTimeConfig.LockLevel                                  = TIM_LOCKLEVEL_OFF;
          tim1_sBreakDeadTimeConfig.DeadTime                                    = 0xC8;//0xC8;  // dead time keep 5us constant
          tim1_sBreakDeadTimeConfig.BreakState                            = TIM_BREAK_ENABLE;
          tim1_sBreakDeadTimeConfig.BreakPolarity      = TIM_BREAKPOLARITY_HIGH;
          tim1_sBreakDeadTimeConfig.BreakFilter        = 0;
          tim1_sBreakDeadTimeConfig.Break2State                          = TIM_BREAK2_ENABLE;
          tim1_sBreakDeadTimeConfig.Break2Polarity     = TIM_BREAK2POLARITY_HIGH;
          tim1_sBreakDeadTimeConfig.Break2Filter                    = 0;
          tim1_sBreakDeadTimeConfig.AutomaticOutput    = TIM_AUTOMATICOUTPUT_ENABLE;
          HAL_TIMEx_ConfigBreakDeadTime(&tim1_shock_release, &tim1_sBreakDeadTimeConfig) ;

                HAL_NVIC_SetPriority(SHOCK_RELEASE_TIM_CC_IRQ, 2, 0);
                HAL_NVIC_EnableIRQ(SHOCK_RELEASE_TIM_CC_IRQ);

                Stop_Shock_Release();
}
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-15 11:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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