野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11813|回复: 0

提问:Timer1 单脉冲输出死区问题

[复制链接]
发表于 2020-1-15 17:31:52 | 显示全部楼层 |阅读模式
请问timer1高级定时器在单脉冲模式下可以带死区互补输出吗?
我用下面的代码,在注释掉死区配置后可以互补输出,但是配置死区后输出脚就一直是高电平或者低电平了。
我查看了死区配置的寄存器手册,看到有个OSSR寄存器关于使能部分,感觉是这里的问题,但是也搞不懂。
请问我想要单脉冲模式下带死区互补输出应该怎么配置死区?

static void Advanced_TIM_Mode_Config(void)
{
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;       
  TIM_ICInitTypeDef TIM_ICInitStructure;
  TIM_OCInitTypeDef TIM_OCInitStructure;       

        //*******************定时器模式配置***********************************//
                // 开启定时器时钟,即内部时钟CK_INT=72M
    S1_TIM_APBxClock_FUN(S1_TIM_CLK, ENABLE);       
                // 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断
    TIM_TimeBaseStructure.TIM_Period=S1_TIM_Period;
          // 时钟预分频数
    TIM_TimeBaseStructure.TIM_Prescaler= S1_TIM_Prescaler;       
                // 时钟分频因子 ,没用到不用管
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;               
                // 计数器计数模式,设置为向上计数
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;                
                // 重复计数器的值,没用到不用管
                TIM_TimeBaseStructure.TIM_RepetitionCounter=0;       
          // 初始化定时器
    TIM_TimeBaseInit(S1_TIM, &TIM_TimeBaseStructure);
        //*******************输出模式配置***********************************//
       
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;//PWM2输出模式
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//输出使能
        TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; //互补输出使能
  TIM_OCInitStructure.TIM_Pulse = S1_TIM_Delay ;//跳变值
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出电平极性配置
        TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;// 互补输出通道电平极性配置
  TIM_OC1Init(S1_TIM, &TIM_OCInitStructure);
        TIM_CtrlPWMOutputs(TIM1, ENABLE);

//        // 输出通道空闲电平极性配置
//        TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
//        // 互补输出通道空闲电平极性配置
//        TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
//        TIM_OC1Init(ADVANCE_TIM, &TIM_OCInitStructure);
//        TIM_OC1PreloadConfig(S1_TIM, TIM_OCPreload_Enable);       
//*******************死区配置******************************************//
//        // 有关刹车和死区结构体的成员具体可参考BDTR寄存器的描述
//        TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
//  TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Disable;
//  TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Disable;
//  TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
//        // 输出比较信号死区时间配置,具体如何计算可参考 BDTR:UTG[7:0]的描述
//        // 这里配置的死区时间为152ns
//  TIM_BDTRInitStructure.TIM_DeadTime = 11;
//  TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
//        // 当BKIN引脚检测到高电平的时候,输出比较信号被禁止,就好像是刹车一样
//  TIM_BDTRConfig(S1_TIM, &TIM_BDTRInitStructure);

//*******************输入捕获模式配置**********************************//
TIM_ICStructInit(&TIM_ICInitStructure);//初始化输入捕获结构体
TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;//CH2设为输入通道
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//上升沿捕获
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//直接对应输入pin
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//不分频率,捕获每一个上升沿
TIM_ICInitStructure.TIM_ICFilter = 0;//不滤波
TIM_ICInit(S1_TIM, &TIM_ICInitStructure);//初始化TIM1 CH2

TIM_SelectOnePulseMode(S1_TIM, TIM_OPMode_Single);//单脉冲模式
TIM_SelectInputTrigger(S1_TIM, TIM_TS_TI2FP2);//触发源选择
TIM_SelectSlaveMode(S1_TIM, TIM_SlaveMode_Trigger);//从模式选择


}

回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-16 06:58 , Processed in 0.027496 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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