OpenEdv-开源电子网

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

Stm32f427 TIM1和TIM2的PWM通道无法输出PWM信号

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2021-10-17
在线时间
1 小时
发表于 2021-10-17 01:29:12 | 显示全部楼层 |阅读模式
1金钱
各位老师好,我用429的模板改了427的代码,要求输出16路PWM,用了TIM1~TIM4的16路PWM通道,但是TIM3和TIM4的8路PWM能够正常输出,但是TIM1和TIM2的8路PWM无法输出,不知道有老师遇到过这个问题的嘛?

void TIM3_PWM_Init(u32 arr,u32 psc)
{                                                          
        //′Ë2¿·ÖDèêÖ¶ˉDT¸ÄIO¿úéèÖÃ
        RCC->APB1ENR|=1<<1;                //TIM3ê±&#214;óê1&#196;ü   
        RCC->AHB1ENR|=1<<1;//ê1&#196;üPORTBê±&#214;ó
        RCC->AHB1ENR|=1<<0;//ê1&#196;üPORTAê±&#214;ó
       
        GPIO_Set(GPIOB,PIN1|PIN0,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//&#184;′ó&#195;1|&#196;ü,é&#207;à-ê&#228;3&#246;
        GPIO_AF_Set(GPIOB,1,2);        //PB1,AF2
        GPIO_AF_Set(GPIOB,0,2);        //PB1,AF2
       
        GPIO_Set(GPIOA,PIN7|PIN6,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//&#184;′ó&#195;1|&#196;ü,é&#207;à-ê&#228;3&#246;
        GPIO_AF_Set(GPIOA,6,2);        //PB1,AF2
        GPIO_AF_Set(GPIOA,7,2);        //PB1,AF2        
       
       
        TIM3->ARR=arr;                        //éè&#182;¨&#188;&#198;êy&#198;÷×&#212;&#182;ˉ&#214;&#216;×°&#214;μ
        TIM3->PSC=psc;                        //&#212;¤·&#214;&#198;μ&#198;÷2&#187;·&#214;&#198;μ

        TIM3->CCMR1|=6<<12;          //CH2 PWM1&#196;£ê&#189;                 
        TIM3->CCMR1|=1<<11;         //CH2 &#212;¤×°&#212;&#216;ê1&#196;ü       
       
        TIM3->CCMR1|=6<<4;                //CH1 PWM1&#196;£ê&#189;
        TIM3->CCMR1|=1<<3;                //CH1 &#212;¤×°&#212;&#216;ê1&#196;ü       
       
        TIM3->CCMR2|=6<<12;          //CH4 PWM1&#196;£ê&#189;                 
        TIM3->CCMR2|=1<<11;         //CH4 &#212;¤×°&#212;&#216;ê1&#196;ü       
       
        TIM3->CCMR2|=6<<4;                //CH3 PWM1&#196;£ê&#189;
        TIM3->CCMR2|=1<<3;                //CH3 &#212;¤×°&#212;&#216;ê1&#196;ü
       
        TIM3->CCER|=1<<0;                        //OC1 ê&#228;3&#246;ê1&#196;ü
        TIM3->CCER|=1<<4;                 //OC2 ê&#228;3&#246;ê1&#196;ü
        TIM3->CCER|=1<<8;                        //OC3 ê&#228;3&#246;ê1&#196;ü
        TIM3->CCER|=1<<12;           //OC4 ê&#228;3&#246;ê1&#196;ü       
        //TIM3->CCER|=1<<13;           //OC4 &#184;&#223;μ&#231;&#198;&#189;óDD§          
        TIM3->CR1|=1<<7;                   //ARPEê1&#196;ü

        TIM3->CR1|=1<<0;            //ê1&#196;ü&#182;¨ê±&#198;÷3                                                                                          
}
void TIM4_PWM_Init(u32 arr,u32 psc)
{                                                          
        //′&#203;2&#191;·&#214;Dèê&#214;&#182;ˉDT&#184;&#196;IO&#191;úéè&#214;&#195;
        RCC->APB1ENR|=1<<2;                //TIM4ê±&#214;óê1&#196;ü   
        RCC->AHB1ENR|=1<<1;//ê1&#196;üPORTBê±&#214;ó
        RCC->AHB1ENR|=1<<0;//ê1&#196;üPORTAê±&#214;ó
       
        GPIO_Set(GPIOB,PIN9|PIN8|PIN6|PIN7,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//&#184;′ó&#195;1|&#196;ü,é&#207;à-ê&#228;3&#246;
        GPIO_AF_Set(GPIOB,6,2);        //PB1,AF2
        GPIO_AF_Set(GPIOB,7,2);        //PB1,AF2        
        GPIO_AF_Set(GPIOB,8,2);        //PB1,AF2
        GPIO_AF_Set(GPIOB,9,2);        //PB1,AF2         +
       
        TIM4->ARR=arr;                        //éè&#182;¨&#188;&#198;êy&#198;÷×&#212;&#182;ˉ&#214;&#216;×°&#214;μ
        TIM4->PSC=psc;                        //&#212;¤·&#214;&#198;μ&#198;÷2&#187;·&#214;&#198;μ

        TIM4->CCMR1|=6<<12;          //CH2 PWM1&#196;£ê&#189;                 
        TIM4->CCMR1|=1<<11;         //CH2 &#212;¤×°&#212;&#216;ê1&#196;ü       
       
        TIM4->CCMR1|=6<<4;                //CH1 PWM1&#196;£ê&#189;
        TIM4->CCMR1|=1<<3;                //CH1 &#212;¤×°&#212;&#216;ê1&#196;ü       
       
        TIM4->CCMR2|=6<<12;          //CH4 PWM1&#196;£ê&#189;                 
        TIM4->CCMR2|=1<<11;         //CH4 &#212;¤×°&#212;&#216;ê1&#196;ü       
       
        TIM4->CCMR2|=6<<4;                //CH3 PWM1&#196;£ê&#189;
        TIM4->CCMR2|=1<<3;                //CH3 &#212;¤×°&#212;&#216;ê1&#196;ü
       
        TIM4->CCER|=1<<0;                        //OC1 ê&#228;3&#246;ê1&#196;ü
        TIM4->CCER|=1<<4;                 //OC2 ê&#228;3&#246;ê1&#196;ü
        TIM4->CCER|=1<<8;                        //OC3 ê&#228;3&#246;ê1&#196;ü
        TIM4->CCER|=1<<12;           //OC4 ê&#228;3&#246;ê1&#196;ü       
        TIM4->CCER|=1<<13;           //OC4 &#184;&#223;μ&#231;&#198;&#189;óDD§          
        TIM4->CR1|=1<<7;                   //ARPEê1&#196;ü

        TIM4->CR1|=1<<0;            //ê1&#196;ü&#182;¨ê±&#198;÷3                                                                                          
}
void TIM1_PWM_Init(u32 arr,u32 psc)
{                                                          
        //′&#203;2&#191;·&#214;Dèê&#214;&#182;ˉDT&#184;&#196;IO&#191;úéè&#214;&#195;
        RCC->APB2ENR|=1<<0;                //TIM1ê±&#214;óê1&#196;ü   
        RCC->AHB1ENR|=1<<1;//ê1&#196;üPORTBê±&#214;ó
        RCC->AHB1ENR|=1<<0;//ê1&#196;üPORTAê±&#214;ó
       
        GPIO_Set(GPIOA,PIN9|PIN8|PIN10|PIN11,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//&#184;′ó&#195;1|&#196;ü,é&#207;à-ê&#228;3&#246;
        GPIO_AF_Set(GPIOA,10,2);        //PB1,AF2
        GPIO_AF_Set(GPIOA,11,2);        //PB1,AF2        
        GPIO_AF_Set(GPIOA,8,2);        //PB1,AF2
        GPIO_AF_Set(GPIOA,9,2);        //PB1,AF2
       
        TIM1->ARR=arr;                        //éè&#182;¨&#188;&#198;êy&#198;÷×&#212;&#182;ˉ&#214;&#216;×°&#214;μ
        TIM1->PSC=psc;                        //&#212;¤·&#214;&#198;μ&#198;÷2&#187;·&#214;&#198;μ

        TIM1->CCMR1|=6<<12;          //CH2 PWM1&#196;£ê&#189;                 
        TIM1->CCMR1|=1<<11;         //CH2 &#212;¤×°&#212;&#216;ê1&#196;ü       
       
        TIM1->CCMR1|=6<<4;                //CH1 PWM1&#196;£ê&#189;
        TIM1->CCMR1|=1<<3;                //CH1 &#212;¤×°&#212;&#216;ê1&#196;ü       
       
        TIM1->CCMR2|=6<<12;          //CH4 PWM1&#196;£ê&#189;                 
        TIM1->CCMR2|=1<<11;         //CH4 &#212;¤×°&#212;&#216;ê1&#196;ü       
       
        TIM1->CCMR2|=6<<4;                //CH3 PWM1&#196;£ê&#189;
        TIM1->CCMR2|=1<<3;                //CH3 &#212;¤×°&#212;&#216;ê1&#196;ü
       
        TIM1->CCER|=1<<0;                        //OC1 ê&#228;3&#246;ê1&#196;ü
        TIM1->CCER|=1<<4;                 //OC2 ê&#228;3&#246;ê1&#196;ü
        TIM1->CCER|=1<<8;                        //OC3 ê&#228;3&#246;ê1&#196;ü
        TIM1->CCER|=1<<12;           //OC4 ê&#228;3&#246;ê1&#196;ü          
        TIM1->CR1|=1<<7;                   //ARPEê1&#196;ü

        TIM1->CR1|=1<<0;            //ê1&#196;ü&#182;¨ê±&#198;÷3                                                                                          
}
void TIM2_PWM_Init(u32 arr,u32 psc)
{                                                          
        //′&#203;2&#191;·&#214;Dèê&#214;&#182;ˉDT&#184;&#196;IO&#191;úéè&#214;&#195;
        RCC->APB1ENR|=1<<0;                //TIM2ê±&#214;óê1&#196;ü   
       
        RCC->AHB1ENR|=1<<1;//ê1&#196;üPORTBê±&#214;ó
        RCC->AHB1ENR|=1<<0;//ê1&#196;üPORTAê±&#214;ó
        GPIO_Set(GPIOB,PIN3|PIN10|PIN11,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//&#184;′ó&#195;1|&#196;ü,é&#207;à-ê&#228;3&#246;
        GPIO_Set(GPIOA,PIN15,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);
       
        GPIO_AF_Set(GPIOB,10,2);        //PB1,AF2
        GPIO_AF_Set(GPIOB,11,2);        //PB1,AF2        
        GPIO_AF_Set(GPIOB,2,2);        //PB1,AF2
        GPIO_AF_Set(GPIOA,15,2);        //PB1,AF2
       
        TIM2->ARR=arr;                        //éè&#182;¨&#188;&#198;êy&#198;÷×&#212;&#182;ˉ&#214;&#216;×°&#214;μ
        TIM2->PSC=psc;                        //&#212;¤·&#214;&#198;μ&#198;÷2&#187;·&#214;&#198;μ

        TIM2->CCMR1|=6<<12;          //CH2 PWM1&#196;£ê&#189;                 
        TIM2->CCMR1|=1<<11;         //CH2 &#212;¤×°&#212;&#216;ê1&#196;ü       
       
        TIM2->CCMR1|=6<<4;                //CH1 PWM1&#196;£ê&#189;
        TIM2->CCMR1|=1<<3;                //CH1 &#212;¤×°&#212;&#216;ê1&#196;ü       
       
        TIM2->CCMR2|=6<<12;          //CH4 PWM1&#196;£ê&#189;                 
        TIM2->CCMR2|=1<<11;         //CH4 &#212;¤×°&#212;&#216;ê1&#196;ü       
       
        TIM2->CCMR2|=6<<4;                //CH3 PWM1&#196;£ê&#189;
        TIM2->CCMR2|=1<<3;                //CH3 &#212;¤×°&#212;&#216;ê1&#196;ü
       
        TIM2->CCER|=1<<0;                        //OC1 ê&#228;3&#246;ê1&#196;ü
        TIM2->CCER|=1<<4;                 //OC2 ê&#228;3&#246;ê1&#196;ü
        TIM2->CCER|=1<<8;                        //OC3 ê&#228;3&#246;ê1&#196;ü
        TIM2->CCER|=1<<12;           //OC4 ê&#228;3&#246;ê1&#196;ü       
        //TIM3->CCER|=1<<13;           //OC4 &#184;&#223;μ&#231;&#198;&#189;óDD§          
        TIM2->CR1|=1<<7;                   //ARPEê1&#196;ü

        TIM2->CR1|=1<<0;            //ê1&#196;ü&#182;¨ê±&#198;÷3                                                                                          
}


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

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2021-10-17
在线时间
1 小时
 楼主| 发表于 2021-10-17 02:59:36 | 显示全部楼层
更新,将TIM1和TIM2的AF复用功能改成了AF1之后,TIM2的四个通道开始输出PWM信号,但是TIM1不输出PWM信号,只是输出高电平。
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2021-10-17
在线时间
1 小时
 楼主| 发表于 2021-10-17 03:38:05 | 显示全部楼层
更新,已经自己解决,根据教程设置高级定时器TIM1->BDTR的MOE位后TIM1正常输出。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 19:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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