OpenEdv-开源电子网

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

高级定时器TIM1的互补输出

[复制链接]

6

主题

16

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2016-3-24
在线时间
8 小时
发表于 2016-5-2 14:46:23 | 显示全部楼层 |阅读模式
10金钱
新手求助!!用高级定时器TIM1做互补输出CH1N输出pwm 但是一直出不来  器大神们指点迷津[mw_shl_code=c,true]
void TIM1_PWM_Init(u16 arr,u16 psc)
{                                                          
        //′Ë2¿·ÖDèêÖ¶ˉDT¸ÄIO¿úéèÖÃ
        RCC->APB2ENR|=1<<11;         //TIM1ê±&#214;óê1&#196;ü
        RCC->APB2ENR|=1<<2;         //GPIOAê±&#214;óê1&#196;ü
        RCC->APB2ENR|=1<<3;         //GPIOBê±&#214;óê1&#196;ü
       
        GPIOA->CRH&=0XFFFFFFF0;        //PA8&#199;&#229;3y&#214;&#174;&#199;°μ&#196;éè&#214;&#195;
        GPIOA->CRH|=0X0000000B;        //&#184;′ó&#195;1|&#196;üê&#228;3&#246;
        GPIOA->ODR|=1<<8;
       
        GPIOA->CRH&=0XFF0FFFFF;        //PA13&#199;&#229;3y&#214;&#174;&#199;°μ&#196;éè&#214;&#195;
        GPIOA->CRH|=0X00B00000;        //&#184;′ó&#195;1|&#196;üê&#228;3&#246;
        GPIOA->ODR|=1<<13;

       
        TIM1->ARR=arr;                        //éè&#182;¨&#188;&#198;êy&#198;÷×&#212;&#182;ˉ&#214;&#216;×°&#214;μ
        TIM1->PSC=psc;                        //&#212;¤·&#214;&#198;μ&#198;÷éè&#214;&#195;
  
        TIM1->CCR1=200;
       
        TIM1->BDTR|=0xCD;

       
        TIM1->CCER|=1<<3;           //CH1&#187;¥21ê1&#196;üê&#228;3&#246;         
        TIM1->CCMR1|=7<<4;          //CH1 PWM2&#196;£ê&#189;                 
        TIM1->CCMR1|=1<<3;                 //CH1&#212;¤×°&#212;&#216;ê1&#196;ü       
        TIM1->CCER|=1<<2;
       
        TIM1->BDTR|=1<<15; //       
        TIM1->CR1|=1<<7;           //ê1&#196;üARR×&#212;&#182;ˉ&#214;&#216;×°è&#235;&#187;o′&#230;&#198;÷
        TIM1->CR1|=0x01;            //ê1&#196;ü&#182;¨ê±&#198;÷1                                                                                   
}  
[/mw_shl_code]

最佳答案

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

试试我这个! /******************************************************************************************** 函数名: 空间失量调制SVPWM定时器1初始化函数 调 用: SVPWM_TIM1_int(void) 参 数: 无 ********************************************************************************************/ void SVPWM_TIM1_int(void) { RCC->APB2ENR |= 1ODR, 8) = 1; ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3347
金钱
3347
注册时间
2013-4-10
在线时间
333 小时
发表于 2016-5-2 14:46:24 | 显示全部楼层
本帖最后由 likunxue 于 2016-5-2 22:48 编辑

试试我这个!

/********************************************************************************************
函数名: 空间失量调制SVPWM定时器1初始化函数
调  用: SVPWM_TIM1_int(void)
参  数: 无                     
********************************************************************************************/
void SVPWM_TIM1_int(void)
     {         
     RCC->APB2ENR |= 1<<11;            //TIM1时钟使能  
     RCC->APB2ENR |= 1<<2;             //使能PORTA时钟         
     GPIOA->CRH &= 0xFFFF0000;   
     GPIOA->CRH |= 0x0000BBBB;         //PA8,PA9,PA10,PA11 复用功能   
     BIT_ADM(GPIOA->ODR, 8) = 1;        
     BIT_ADM(GPIOA->ODR, 9) = 1;      
     BIT_ADM(GPIOA->ODR,10) = 1;
     BIT_ADM(GPIOA->ODR,11) = 1;
        
     //通道1的输出配置         
     BIT_ADM(TIM1->CCMR1,3)  = 1;      //CH1预装载使能      
     BIT_ADM(TIM1->CCMR1,4)  = 0;      //CH1_PWM1模式
     BIT_ADM(TIM1->CCMR1,5)  = 1;   
     BIT_ADM(TIM1->CCMR1,6)  = 1;        
     BIT_ADM(TIM1->CCER,0)   = 1;      //CH1输出使能(PA8)  
     BIT_ADM(TIM1->CCER,1)   = 0;      //主输出极性CC1P (0高电平有效,1低电平有效)
     //通道2的输出配置
     BIT_ADM(TIM1->CCMR1,11) = 1;      //CH2预装载使能
     BIT_ADM(TIM1->CCMR1,12) = 0;      //CH2_PWM1模式
     BIT_ADM(TIM1->CCMR1,13) = 1;
     BIT_ADM(TIM1->CCMR1,14) = 1;
     BIT_ADM(TIM1->CCER,4)   = 1;      //CH2输出使能(PA9)     
     BIT_ADM(TIM1->CCER,5)   = 0;      //主输出极性CC2P (0高电平有效,1低电平有效)
     //通道3的输出配置  
     
     BIT_ADM(TIM1->CCMR2,3)  = 1;      //CH3预装载使能      
     BIT_ADM(TIM1->CCMR2,4)  = 0;      //CH3_PWM1模式
     BIT_ADM(TIM1->CCMR2,5)  = 1;   
     BIT_ADM(TIM1->CCMR2,6)  = 1;        
     BIT_ADM(TIM1->CCER,8)   = 1;      //CH3输出使能(PA10)  
     BIT_ADM(TIM1->CCER,9)   = 0;      //主输出极性CC3P (0高电平有效,1低电平有效)
     //通道4的输出配置  
     BIT_ADM(TIM1->CCMR2,11) = 1;      //CH4预装载使能
     BIT_ADM(TIM1->CCMR2,12) = 0;      //CH4_PWM1模式
     BIT_ADM(TIM1->CCMR2,13) = 1;
     BIT_ADM(TIM1->CCMR2,14) = 1;
     BIT_ADM(TIM1->CCER,12)  = 1;      //CH4输出使能(PA11)     
     BIT_ADM(TIM1->CCER,13)  = 0;      //主输出极性CC4P (0高电平有效,1低电平有效)
     //比较寄存器初始化
     TIM1->CCR1 = 0;                   //初始化比较寄存器全部为0初始输出低电平                  
     TIM1->CCR2 = 0;                  
     TIM1->CCR3 = 0;                  
     TIM1->CCR4 = 0;                  
     //定时器1初始化其它功能设置
     TIM1->ARR = SVP.PWMPRD;           //设定计数器自动重装值PWM的周期   
     TIM1->PSC = 0 ;                   //预分频器0
     BIT_ADM(TIM1->CR1,7) = 1;         //定时器ARPE充许
     BIT_ADM(TIM1->CR1,5) = 0;         //边沿对齐模式
     BIT_ADM(TIM1->CR1,6) = 0;         
     //BIT_ADM(TIM1->CR1,4) = 1;       //向下计数
     //设置MMS[2:0] 主模式选择,定时器的更新中断起动从定时器
     BIT_ADM(TIM1->CR2,4) = 0;
     BIT_ADM(TIM1->CR2,5) = 1;
     BIT_ADM(TIM1->CR2,6) = 0;
     BIT_ADM(TIM1->DIER,0) = 1;         //开定时器中断
     BIT_ADM(TIM1->BDTR,15)= 1;         //MOE位,主输出使能,只有该位是1全部 PWM才用有输出  
     BIT_ADM(TIM1->SR,0)   = 0;         //清除中断标志
     MY_NVIC_Init(1,0,TIM1_UP_IRQn,4);  //抢占1,子优先级0,组4
     BIT_ADM(TIM1->EGR,0) = 1;          //UG位,产生更新事件,软件置1,硬件自动清零  
     BIT_ADM(TIM1->CR1,0) = 0;          //初始化关闭定时器没有PWM输出
     }  
回复

使用道具 举报

6

主题

16

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2016-3-24
在线时间
8 小时
 楼主| 发表于 2016-5-3 17:10:41 | 显示全部楼层
likunxue 发表于 2016-5-2 22:46
试试我这个!

/************************************************************************************ ...

非常感谢你的答复  我发现我的问题了  我的程序是没问题的 只是在配置端口的时候是端口B但是我复制了上[mw_shl_code=c,true]void TIM1_PWM_Init(u16 arr,u16 psc)
{                                                                 
        RCC->APB2ENR|=1<<11;   //TIM1ê±&#214;óê1&#196;ü   
        RCC->APB2ENR|=1<<0;   //TIM1ê±&#214;óê1&#196;ü
        RCC->APB2ENR|=1<<2;
        RCC->APB2ENR|=1<<3;        
        TIM1->ARR=arr;//éè&#182;¨&#188;&#198;êy&#198;÷×&#212;&#182;ˉ&#214;&#216;×°&#214;μ  
        TIM1->SC=1000000/psc;//&#212;¤·&#214;&#198;μ&#198;÷2&#187;·&#214;&#198;μ
       
        GPIOA->CRH&=0XFFFFFFF0;        //PA8&#199;&#229;3y&#214;&#174;&#199;°μ&#196;éè&#214;&#195;
        GPIOA->CRH|=0X0000000B;        //&#184;′ó&#195;1|&#196;üê&#228;3&#246;
        GPIOA->ODR|=1<<8;
       
        GPIOB->CRH&=0XFF0FFFFF;        //PA13&#199;&#229;3y&#214;&#174;&#199;°μ&#196;éè&#214;&#195;
        GPIOB->CRH|=0X00B00000;        //&#184;′ó&#195;1|&#196;üê&#228;3&#246;
        GPIOB->ODR|=1<<13;
       

        TIM1->CCMR1|=7<<4;   //CH1 PWM2&#196;£ê&#189;   
        TIM1->CCMR1|=1<<3;   //CH1 &#212;¤×°&#212;&#216;ê1&#196;ü
        TIM1->CCER|=1<<3;   //OCn1 ê&#228;3&#246;ê1&#196;ü
        TIM1->CCER|=1<<2;   //OCn1 ê&#228;3&#246;&#188;&#171;D&#212;

        TIM1->BDTR=0X8000;  //éè&#214;&#195MW&#214;÷ê&#228;3&#246;
               
        TIM1->CR1 |= 0x80;   //Auto-reload preload enable
        TIM1->CR1 |=0x01;    //ê1&#196;ü&#182;¨ê±&#198;÷8

        TIM1->CCR1 = arr/2;
        TIM1->CCR2 = arr/2;
        TIM1->CCR3 = arr/2;       
        TIM1->CCR4 = arr/2;       
                                                                                        [/mw_shl_code]一段的端口A  所以出不来  希望大家引以为戒最后附上正确的代码
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 02:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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