OpenEdv-开源电子网

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

用那几个普通定时器产生单脉冲可行,改为高级定时器后,就没输出了。求解。下面是代码。

[复制链接]

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
266
金钱
266
注册时间
2015-11-28
在线时间
52 小时
发表于 2016-7-21 11:22:56 | 显示全部楼层 |阅读模式
1金钱
//主定时器TIM4
//从定时器TIM1


void TIM_pwm32Init(u16 TIMx_master_Period,u16 slave_pulse)
{
       
         GPIO_InitTypeDef  GPIO_InitStructure;
   TIM_OCInitTypeDef  TIM_OCInitStructure;
         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
                NVIC_InitTypeDef NVIC_InitStructure;

         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); //引脚时钟初始化
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//
         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //时钟使能
                               
        //从定时器引脚初始化
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_11 | GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);       
       

  //主定时器初始化
  TIM_TimeBaseStructure.TIM_Period = TIMx_master_Period;             //定时器加载值
  TIM_TimeBaseStructure.TIM_Prescaler = 7199;                        //定时器分频值
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;        //计数加
  TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);                    //设置
       
        TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);                  //允许预装载
        TIM_SelectOutputTrigger(TIM4, TIM_TRGOSource_Update);              //选择主定时器的级联输出信号为TRGO。
        TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable);       //打开主定时器的主从模式

       
  //从定时器初始化
  TIM_TimeBaseStructure.TIM_Period = 10000;                          //定时器加载值
        TIM_TimeBaseStructure.TIM_Prescaler = 71;
  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);                    //从定时器的时基定义

        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;                 //PWM1模式
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;     //比较输出使能
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;         //高电平有效
        TIM_OCInitStructure.TIM_Pulse = 10001-slave_pulse;                     //脉宽
        TIM_OC1Init(TIM1, &TIM_OCInitStructure);                          //从定时器的CH1输出
        TIM_OC2Init(TIM1, &TIM_OCInitStructure);                          //从定时器的CH1输出       
       
          /* One Pulse Mode selection */
  TIM_SelectOnePulseMode(TIM1, TIM_OPMode_Single);
       
        TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);                //允许预装载
        TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);                //允许预装载       
       
        TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Trigger);                //从定时器的从模式选择,比如门控模式,触发模式等
        TIM_SelectMasterSlaveMode(TIM1, TIM_MasterSlaveMode_Enable);       //打开主定时器的主从模式
        TIM_SelectInputTrigger(TIM1, TIM_TS_ITR3);                       //选择从定时器为外部时钟触发.此行非常关键,必须执行

        TIM_Cmd(TIM4, ENABLE);

}




最佳答案

查看完整内容[请看2#楼]

高级定时器有个输出的总开关,应该是你总开关没开。MOE void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState) { /* Check the parameters */ assert_param(IS_TIM_LIST2_PERIPH(TIMx)); assert_param(IS_FUNCTIONAL_STATE(NewState)); if (NewState != DISABLE) { /* Enable the TIM Main Output */ TIMx->BDTR |= TIM_BDTR_MOE; } else { /* Disable the TIM Main ...
笑哥
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-7-21 11:22:57 | 显示全部楼层
高级定时器有个输出的总开关,应该是你总开关没开。MOE

void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_TIM_LIST2_PERIPH(TIMx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* Enable the TIM Main Output */
    TIMx->BDTR |= TIM_BDTR_MOE;
  }
  else
  {
    /* Disable the TIM Main Output */
    TIMx->BDTR &= (uint16_t)(~((uint16_t)TIM_BDTR_MOE));
  }  
}
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
266
金钱
266
注册时间
2015-11-28
在线时间
52 小时
 楼主| 发表于 2016-7-21 11:51:10 | 显示全部楼层
自顶......
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-7-21 11:56:34 | 显示全部楼层
上面是F0的,F1应该也有类似的这一位,自己去找找吧
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
266
金钱
266
注册时间
2015-11-28
在线时间
52 小时
 楼主| 发表于 2016-7-21 12:35:14 | 显示全部楼层
憨厚诚实大叔 发表于 2016-7-21 11:56
上面是F0的,F1应该也有类似的这一位,自己去找找吧

谢谢  好了
笑哥
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 00:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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