OpenEdv-开源电子网

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

高级定时器输出PEM,为何输出不了

[复制链接]

16

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2018-4-9
在线时间
111 小时
发表于 2018-7-10 19:57:56 | 显示全部楼层 |阅读模式
1金钱
用高级定时器1输出四路PWM,不知道为啥输出不了,求教。
/*********************************************************************
*名  称:TIM1_PWM_Init()
*功  能:TIM1_PWM初始化
*输  入:无
*输  出:无
*说  明:arr自动重装值   psc系统预分频数
***********************************************************************/
void TIM1_PWM_Init(u16 arr,u16 psc)
{
   GPIO_InitTypeDef GPIO_InitStructure;
   TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
   TIM_OCInitTypeDef TIM_OCInitStructure;
       
        RCC_APB1PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //使能引脚复用时钟
        RCC_APB1PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);        //使能定时器1时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能GPIO外设时钟
       
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11; //TIM1_CH1,TIM_CH2
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //引脚速率
   GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化 GPIO
       
   //初始化 TIM1
   TIM_TimeBaseStructure.TIM_Period = arr; //设置在自动重装载周期值
   TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置预分频值
   TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数模式
   TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
   TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //初始化 TIMx

   //初始化 TIM1 Channel2 PWM 模式
   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择 PWM 模式 2
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
//   TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;  //互补输出失能,可不写
   TIM_OCInitStructure.TIM_Pulse = 5000;
   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性低
//   TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;  //互补输出高有效,可不写
//   TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;  //空闲时输出高,可不写
//   TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;  //空闲时互补输出低,可不写

    TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //使能预装载定时器
    TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
        TIM_OC2Init(TIM1, &TIM_OCInitStructure);  //使能预装载定时器
        TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
        TIM_OC3Init(TIM1, &TIM_OCInitStructure);  //使能预装载定时器
        TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
        TIM_OC4Init(TIM1, &TIM_OCInitStructure);  //使能预装载定时器
        TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);
       
//        TIM1->CCR1 = 0;  //PA8 上理论能输出0.33V电压  误差0.1V   控制占空比
//        TIM1->CCR2 = 0;  //PA9 上理论能输出0.66V电压        误差0.1V
//        TIM1->CCR3 = 0;  //PA10上理论能输出0.99V电压        误差0.1V
//        TIM1->CCR4 = 0;  //PA11上理论能输出1.32V电压        误差0.1V

        TIM_Cmd(TIM1, ENABLE);   //是能定时器
        TIM_CtrlPWMOutputs(TIM1, ENABLE);   //使能定时器输出PWM
}


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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-7-11 02:15:04 | 显示全部楼层
参考下 论坛其他网友的代码,学会搜索找问题。另外,先从单路输出搞起。别一上来就搞多路,就是怎么死的都不知道。。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-16 05:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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