OpenEdv-开源电子网

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

定时器3和定时器8综合后输出PWM有两路失败

[复制链接]

2

主题

9

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-5-11
在线时间
15 小时
发表于 2022-3-14 16:47:37 | 显示全部楼层 |阅读模式
5金钱
void TIM3_PWM_Init(u16 arr,u16 psc)
{  
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);        //ê1Äü¶¨ê±Æ÷3ê±Öó
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //ê1ÄüGPIOíaéèoíAFIO¸′óÃ1|ÄüÄ£¿éê±Öó
       
        GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer32¿·ÖÖØó3éä  TIM3_CH2->B5   
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//½ûÖ1JTAG£¬′ò¿aSWD       

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_4; //TIM_CH2
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //¸′óÃíÆíìêä3ö
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);//3õê¼»ˉGPIO
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //¸′óÃíÆíìêä3ö
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);//3õê¼»ˉGPIO
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //¸′óÃíÆíìêä3ö
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);//3õê¼»ˉGPIO
       
        TIM_TimeBaseStructure.TIM_Period = arr; //éèÖÃÔúÏÂò»¸ö¸üDÂê¼t×°èë»î¶ˉμÄ×Ô¶ˉÖØ×°ÔؼÄ′æÆ÷ÖüÆúμÄÖμ
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //éèÖÃóÃà′×÷ÎaTIMxê±ÖóÆμÂê3yêyμÄÔ¤·ÖÆμÖμ
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIMÏòéϼÆêyÄ£ê½
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //¸ù¾YTIM_TimeBaseInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ
       
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //Ñ¡Ôñ¶¨ê±Æ÷Ä£ê½:TIMÂö3å¿í¶èμ÷ÖÆÄ£ê½2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±è½Ïêä3öê1Äü
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //êä3ö¼«DÔ:TIMêä3ö±è½Ï¼«DÔ¸ß
       
        TIM_OC1Init(TIM3, &TIM_OCInitStructure);  //¸ù¾YTÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèTIM3 OC2
        TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //¸ù¾YTÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèTIM3 OC2
        TIM_OC3Init(TIM3, &TIM_OCInitStructure);  //¸ù¾YTÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèTIM3 OC2
        TIM_OC4Init(TIM3, &TIM_OCInitStructure);  //¸ù¾YTÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèTIM3 OC2
       
        TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);  //ê1ÄüTIM3ÔúCCR2éÏμÄԤװÔؼÄ′æÆ÷
        TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //ê1ÄüTIM3ÔúCCR2éÏμÄԤװÔؼÄ′æÆ÷
        TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  //ê1ÄüTIM3ÔúCCR2éÏμÄԤװÔؼÄ′æÆ÷
        TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);  //ê1ÄüTIM3ÔúCCR2éÏμÄԤװÔؼÄ′æÆ÷

  //TIM_ARRPreloadConfig(TIM3, ENABLE);
        TIM_Cmd(TIM3, ENABLE);  //ê1ÄüTIM3
}

void TIM8_PWM_Init(u16 arr,u16 psc)
{  
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;       

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE); //ê1Äü¶¨ê±Æ÷8ê±Öó
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  //ê1ÄüGPIOíaéèoíAFIO¸′óÃ1|ÄüÄ£¿éê±Öó
        TIM_CtrlPWMOutputs(TIM8, ENABLE);
       
   //éèÖøÃòy½ÅÎa¸′óÃêä3ö1|Äü,êä3öTIM3 CH2μ&#196WMÂö3å2¨DΠ       GPIOB.5
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; //TIM_CH2
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //¸′óÃíÆíìêä3ö
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);//3õê¼»ˉGPIO

   //3õê¼»ˉTIM8
        TIM_TimeBaseStructure.TIM_Period = arr; //éèÖÃÔúÏÂò»¸ö¸üDÂê¼t×°èë»î¶ˉμÄ×Ô¶ˉÖØ×°ÔؼÄ′æÆ÷ÖüÆúμÄÖμ
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //éèÖÃóÃà′×÷ÎaTIMxê±ÖóÆμÂê3yêyμÄÔ¤·ÖÆμÖμ
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIMÏòéϼÆêyÄ£ê½
        TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); //¸ù¾YTIM_TimeBaseInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ
       
//3õê¼»ˉTIM5 Channel2 PWMģ꽠        
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //Ñ¡Ôñ¶¨ê±Æ÷Ä£ê½:TIMÂö3å¿í¶èμ÷ÖÆÄ£ê½2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±è½Ïêä3öê1Äü
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //êä3ö¼«DÔ:TIMêä3ö±è½Ï¼«DԸߠ                       */
       
        TIM_OCInitStructure.TIM_Pulse = 0;                 //
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;  //TIM1????????1
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//????????
        TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;//??????N??
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//TIM1 ???????
        TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;//TIM1 ????N???
        TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;//? MOE=0 ?? TIM1 ????????
        TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;//? MOE=0 ?? TIM1 ???? N ????
        TIM_OC1Init(TIM8, &TIM_OCInitStructure); //??????1???

        TIM_OC1Init(TIM8, &TIM_OCInitStructure);  //¸ù¾YTÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèTIM8 OC2
        TIM_OC2Init(TIM8, &TIM_OCInitStructure);  //¸ù¾YTÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèTIM8 OC2
        TIM_OC3Init(TIM8, &TIM_OCInitStructure);  //¸ù¾YTÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèTIM8 OC2
        TIM_OC4Init(TIM8, &TIM_OCInitStructure);  //¸ù¾YTÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèTIM8 OC2
       
        TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable);  //ê1ÄüTIM8ÔúCCR2éÏμÄԤװÔؼÄ′æÆ÷
        TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable);  //ê1ÄüTIM8ÔúCCR2éÏμÄԤװÔؼÄ′æÆ÷
        TIM_OC3PreloadConfig(TIM8, TIM_OCPreload_Enable);  //ê1ÄüTIM8ÔúCCR2éÏμÄԤװÔؼÄ′æÆ÷
        TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Enable);  //ê1ÄüTIM8ÔúCCR2éÏμÄԤװÔؼÄ′æÆ÷
        TIM_ARRPreloadConfig(TIM8, ENABLE);//ê1ÄüԤװÔؼÄ′æÆ÷

        //TIM_CtrlPWMOutputs(TIM1,ENABLE);

  TIM_CtrlPWMOutputs(TIM8,ENABLE);
        TIM_Cmd(TIM8, ENABLE);  //ê1ÄüTIM8               
}




int main(void)
{               
        delay_init();                     //Ñóê±oˉêy3õê¼»ˉ          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //éèÖÃNVICÖD¶Ï·Ö×é2:2λÇàÕ¼óÅÏ輶£¬2λÏìó|óÅÏ輶
        uart_init(115200);         //′®¿ú3õê¼»ˉÎa115200
        LED_Init();                             //LED¶Ë¿ú3õê¼»ˉ
        TIM3_PWM_Init(899,0);         //2»·ÖÆμ¡£PWMÆμÂê=72000000/900=80Khz
        TIM8_PWM_Init(899,0);
         
           while(1)
        {
          TIM_SetCompare1(TIM3,100);                        //PB4
                TIM_SetCompare2(TIM3,100);                        //PB5
                TIM_SetCompare3(TIM3,300);      //PB0   ????
                TIM_SetCompare4(TIM3,300);                  //PB1    ????
               
                TIM_SetCompare1(TIM8,30);           //PC6        
                TIM_SetCompare2(TIM8,30);           //PC7
                TIM_SetCompare3(TIM8,30);           //PC8                                ¶¨ê±Æ÷8í¨1y
                TIM_SetCompare4(TIM8,30);                 //PC9        0.10V
        }         
}


实验9 PWM输出实验.zip

2.99 MB, 下载次数: 6

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2022-3-15 01:29:12 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

668

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1926
金钱
1926
注册时间
2021-8-13
在线时间
262 小时
发表于 2022-3-15 09:50:30 | 显示全部楼层
听大佬的跑一下仿真看看
回复

使用道具 举报

5

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
480
金钱
480
注册时间
2019-7-18
在线时间
83 小时
发表于 2022-4-6 00:17:37 | 显示全部楼层
楼主的定时器8很好用,十分感谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 17:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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