搜索
bottom↓
回复: 2

TIM8的PWM输出可以,但是TIM1不行的奇怪问题

[复制链接]

出0入0汤圆

发表于 2017-6-19 22:05:34 | 显示全部楼层 |阅读模式
最近碰到一个奇怪的问题,在STM32F103RCT6上,以下程序可以设置TIM8输出PWM,但是将相应的TIM8改成TIM1,对应TIM1的GPIO上就没有PWM输出,不知道大家有没有遇到过相同问题?
        TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        u32 Period ;
        /*根据输出的频率计算定时的计数值,确定输出PWM的周期*/
        Period = SYS_FREQ /ul_freq ;
        /*电机正转,TIM1为主定时器触发TIM8从定时器*/
       
                TIM_DeInit(TIM8);
       
                /*定时器TIM1基本配置*/
                  TIM_TimeBaseStructure.TIM_Prescaler = 0;                                        /*不预分频*/
                  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;        /*向上计数模式*/
                  TIM_TimeBaseStructure.TIM_Period = Period -1  ;                                /*计数值*/               
                  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;                /*定义时钟分频因子,产生死去的频率为定时器时钟频率的4分频*/               
                  TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;                        /*累计多少次溢出中断,再产生一次溢出中断*/
                  TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);

                /*定时器TIM1通道1输出两路互补PWM配置*/
                  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;                                /*PWM输出模式2*/
                  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        /*使能OC输出*/
                  TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;        /*使能OC互补输出*/
                  TIM_OCInitStructure.TIM_Pulse = Period/2 ;                                                /*占空比*/
                /*输出极性设置*/
                TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;                 //正通道 极性 输出 高有效
                  TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;                   //反通道 极性 输出 高有效
                /*刹车后的极性配置*/
                  TIM_OCInitStructure.TIM_OCIdleState =TIM_OCIdleState_Reset  ;         //正通道 失效,刹车后极性 输出 低有效
                TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;         //反通道 失效,刹车后极性 输出 低有效
                  TIM_OC1Init(TIM8, &TIM_OCInitStructure);

                /*TIM1输出两路互补的PWM死区配置*/
                TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
                TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
                TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
                TIM_BDTRInitStructure.TIM_DeadTime = 6;
//                TIM_BDTRInitStructure.TIM_DeadTime = 11;
                TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
                TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low  ;
                TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
                TIM_BDTRConfig(TIM8, &TIM_BDTRInitStructure);

                //使能影子寄存器
                TIM_ARRPreloadConfig(TIM8, ENABLE);
               
                TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable);//master 定时器TIM1的比较寄存器,开影子寄存器
          TIM_Cmd(TIM8, ENABLE);
          /* Main Output Enable */
          TIM_CtrlPWMOutputs(TIM8, ENABLE);

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出75入90汤圆

发表于 2017-6-19 23:09:40 | 显示全部楼层
我前几天刚刚问过类似问题,主要还是IO口的第二功能,需要选项字要配置一下才有输出。

出0入0汤圆

发表于 2017-7-6 15:57:48 | 显示全部楼层
zpywz 发表于 2017-6-19 23:09
我前几天刚刚问过类似问题,主要还是IO口的第二功能,需要选项字要配置一下才有输出。 ...

你好,我也遇到跟楼主同样的问题, 只不过我是TIM8没有输出,但是如果是手动复位后就有输出,上电复位就没有,请问你说的选项字配置具体怎么做?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 18:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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