OpenEdv-开源电子网

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

TIM1_CH1 TIM1_CH1N

[复制链接]

5

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2017-1-31
在线时间
7 小时
发表于 2017-2-15 10:22:55 | 显示全部楼层 |阅读模式
1金钱
请教一下,有没有人使用过TIM1_CH1 TIM1_CH1N互补输出,可否分享一下代码,谢谢! 103系列

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

使用道具 举报

5

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2017-1-31
在线时间
7 小时
 楼主| 发表于 2017-2-15 21:27:36 | 显示全部楼层
今天调试通了,使用205系列,PA7为TIM1_CH1, PA8为TIM1_CH1N,配置的原代码如下,有需要的可以参考
void TIM1_Init(int32_t Duty,int32_t Frequency)
{        
  TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;
  TIM_OCInitTypeDef         TIM_OCInitStructure;
  GPIO_InitTypeDef          GPIO_InitStructure;        
        TIM_BDTRInitTypeDef       TIM_BDTRInitStructure;

  uint16_t PrescalerValue = 0;
  uint16_t Channel1Pulse  = 0;

        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 , ENABLE);
  
        GPIO_InitStructure.GPIO_Pin         = GPIO_Pin_8;
        GPIO_InitStructure.GPIO_Mode         = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd         = GPIO_PuPd_UP ;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
  
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_TIM1);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_TIM1);

        PrescalerValue = (120000000 / Frequency ) - 1;  
        
        Channel1Pulse = (uint16_t) (((uint32_t) Duty * (PrescalerValue- 1)) / 100);
  
  TIM_TimeBaseStructure.TIM_Prescaler                           = 0;
  TIM_TimeBaseStructure.TIM_CounterMode                   = TIM_CounterMode_Up;
  TIM_TimeBaseStructure.TIM_Period                                     = PrescalerValue;
  TIM_TimeBaseStructure.TIM_ClockDivision                 = 0;
  TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

        // Channel 1 Configuration in PWM mode
        TIM_OCInitStructure.TIM_OCMode                           = TIM_OCMode_PWM2;
        TIM_OCInitStructure.TIM_OutputState         = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OutputNState         = TIM_OutputNState_Enable;
        TIM_OCInitStructure.TIM_OCPolarity                 = TIM_OCPolarity_Low;//TIM_OCNPolarity_High;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_OCInitStructure.TIM_Pulse                           = Channel1Pulse;
        TIM_OC1Init(TIM1, &TIM_OCInitStructure);
        
        // Channel 2 Configuration in PWM mode
        TIM_OCInitStructure.TIM_OCMode                           = TIM_OCMode_PWM2;
        TIM_OCInitStructure.TIM_OutputState         = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OutputNState         = TIM_OutputNState_Enable;
        TIM_OCInitStructure.TIM_OCPolarity                 = TIM_OCPolarity_Low;
        TIM_OCInitStructure.TIM_OCNPolarity         = TIM_OCPolarity_Low;//TIM_OCNPolarity_High;
        TIM_OCInitStructure.TIM_OCIdleState         = TIM_OCIdleState_Set;
        TIM_OCInitStructure.TIM_OCNIdleState  = TIM_OCIdleState_Reset;
  
         TIM_OCInitStructure.TIM_Pulse                           = Channel1Pulse;
        TIM_OC2Init(TIM1, &TIM_OCInitStructure);
        
        
        TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
        TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Disable;//TIM_OSSRState_Enable;
        TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSRState_Disable;//TIM_OSSIState_Enable;
        TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_3;//TIM_LOCKLevel_OFF;
        TIM_BDTRInitStructure.TIM_DeadTime = 0;
        TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
        TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
        TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
        TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
                                

        TIM_Cmd(TIM1, ENABLE);

        TIM_CtrlPWMOutputs(TIM1, ENABLE);                        
}
回复

使用道具 举报

5

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2017-1-31
在线时间
7 小时
 楼主| 发表于 2017-2-15 21:30:16 | 显示全部楼层
附件是调试过程抓的示波器图片,占空比为20%
1.png
2.png
回复

使用道具 举报

5

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2017-1-31
在线时间
7 小时
 楼主| 发表于 2017-2-15 21:36:13 | 显示全部楼层
因为不太懂,修改其中两句,不同情况如下,可参考,现在还有个问题,我现在频率可以往高提,但是在2K以下,就计算不对了,理论和实测不一致,这是怎么回事?也就是PWM输出频率范围是什么?我从哪里来配置?

情况1:
Channel 1
TIM_OCInitStructure.TIM_OCPolarity         = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OCNPolarity         = TIM_OCNPolarity_High;

Channel 2
TIM_OCInitStructure.TIM_OCPolarity         = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity         = TIM_OCNPolarity_High;


PA7与PA8 高20低80,同相


情况2:
Channel 1
TIM_OCInitStructure.TIM_OCPolarity         = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity         = TIM_OCNPolarity_High;

Channel 2
TIM_OCInitStructure.TIM_OCPolarity         = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity         = TIM_OCNPolarity_High;

PA7 高20低80
PA8 高80低20
二者反相

情况3:
Channel 1
TIM_OCInitStructure.TIM_OCPolarity         = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OCNPolarity         = TIM_OCPolarity_Low;

Channel 2
TIM_OCInitStructure.TIM_OCPolarity         = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity         = TIM_OCNPolarity_High;


PA7与PA8 高20低80,同相

情况4:
Channel 1
TIM_OCInitStructure.TIM_OCPolarity         = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OCNPolarity         = TIM_OCPolarity_Low;

Channel 2
TIM_OCInitStructure.TIM_OCPolarity         = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OCNPolarity         = TIM_OCNPolarity_High;


PA7与PA8 高20低80,同相

情况5:
Channel 1
TIM_OCInitStructure.TIM_OCPolarity         = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OCNPolarity         = TIM_OCPolarity_Low;

Channel 2
TIM_OCInitStructure.TIM_OCPolarity         = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OCNPolarity         = TIM_OCPolarity_Low;


PA7与PA8 高20低80,同相

情况6:
Channel 1
TIM_OCInitStructure.TIM_OCPolarity         = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity         = TIM_OCPolarity_Low;

Channel 2
TIM_OCInitStructure.TIM_OCPolarity         = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OCNPolarity         = TIM_OCPolarity_Low;


PA7与PA8 高20低80,同相

情况7:
Channel 1
TIM_OCInitStructure.TIM_OCPolarity         = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity         = TIM_OCNPolarity_High;

Channel 2
TIM_OCInitStructure.TIM_OCPolarity         = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OCNPolarity         = TIM_OCPolarity_Low;


PA7 高20低80
PA8 高80低20
二者反相

情况8:
Channel 1
TIM_OCInitStructure.TIM_OCPolarity         = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OCNPolarity         = TIM_OCNPolarity_High;

Channel 2
TIM_OCInitStructure.TIM_OCPolarity         = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OCNPolarity         = TIM_OCPolarity_Low;


PA7与PA8 高20低80,同相
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-24 07:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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