OpenEdv-开源电子网

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

PWM程序把TIM1改成TIM2,程序出错,为什么?

[复制链接]

12

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-7-14
在线时间
23 小时
发表于 2015-12-29 22:07:23 | 显示全部楼层 |阅读模式
本帖最后由 yviihpl 于 2015-12-29 22:11 编辑

各位高手,我用的64引脚的STM32F103,用TIM1生成PWM仿真成功了,因为需要4路PMW,而TIM1的CH2,CH3对应的PA9,PA10检测不到PMW信号,为什么呢?进而我想改成TIM2或者TIM4,我把IO口配置也改了,但是总是不成功,仿真PA0口没有PWM波,百思不得其解,请多多指教。

TIM1复用

TIM1复用
     

引脚图

引脚图





以下程序是1路PWM的:黄色是由TIM1更改而来。
#include "sys.h"
voidTIM3_Int_Init(u16 arr,u16 psc);
voidTIM2_PWM_Init(u16 arr,u16 psc);
voidTIM3_IRQHandler(void);
uint16_t Duty[]={0x7F,0x87,0x8F,0x97,0x9F,0xA6,0xAE,0xB5,0xBC,0xC3,0xCA,0xD0,0xD6,0xDC,0xE1,0xE6
,0xEB,0xEF,0xF2,0xF6,0xF8,0xFA,0xFC,0xFD,0xFE,0xFE,0xFE,0xFD,0xFC,0xFA,0xF8,0xF6
,0xF2,0xEF,0xEB,0xE6,0xE1,0xDC,0xD6,0xD0,0xCA,0xC3,0xBC,0xB5,0xAE,0xA6,0x9F,0x97
,0x8F,0x87,0x7F,0x77,0x6F,0x67,0x5F,0x58,0x50,0x49,0x42,0x3B,0x34,0x2E,0x28,0x22
,0x1D,0x18,0x13,0x0F,0x0C,0x08,0x06,0x04,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x04
,0x06,0x08,0x0C,0x0F,0x13,0x18,0x1D,0x22,0x28,0x2E,0x34,0x3B,0x42,0x49,0x50,0x58
,0x5F,0x67,0x6F,0x77};
                   uint16_tcount = 0;  
                   uint16_tnum = sizeof(Duty)/(sizeof(Duty[0]));  
int main(void)
         {
                   TIM3_Int_Init(299,47);//1Mhz的计数频率,
                   TIM2_PWM_Init(499,47);//不分频。PWM频率=72000/(899+1)=80Khz
        while(1);  
         }
//TIM2 pwm
void TIM2_PWM_Init(u16 arr,u16 psc)
  {  
          GPIO_InitTypeDef GPIO_InitStructure;
         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
         TIM_OCInitTypeDef  TIM_OCInitStructure;

         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能GPIO外设时钟使能

       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
         GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF_PP;  
         GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
         GPIO_Init(GPIOA,&GPIO_InitStructure);

         TIM_TimeBaseStructure.TIM_Period= arr;
         TIM_TimeBaseStructure.TIM_Prescaler=psc;
         TIM_TimeBaseStructure.TIM_ClockDivision= 0;
         TIM_TimeBaseStructure.TIM_CounterMode= TIM_CounterMode_Up;  
         TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

         TIM_OCInitStructure.TIM_OCMode= TIM_OCMode_PWM2;
         TIM_OCInitStructure.TIM_OutputState= TIM_OutputState_Enable;
         TIM_OCInitStructure.TIM_Pulse= 0;
         TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_High;
         TIM_OC1Init(TIM2,&TIM_OCInitStructure);  

     TIM_CtrlPWMOutputs(TIM2,ENABLE);  //MOE 主输出使能        
         TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);     
         TIM_ARRPreloadConfig(TIM2, ENABLE); //
         TIM_Cmd(TIM2, ENABLE);  

  }
//TIM3中断初始化
void TIM3_Int_Init(u16 arr,u16 psc)
{
   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
         NVIC_InitTypeDef NVIC_InitStructure;

         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); /

         TIM_TimeBaseStructure.TIM_Period= arr;
         TIM_TimeBaseStructure.TIM_Prescaler=psc;  
         TIM_TimeBaseStructure.TIM_ClockDivision= 0;
         TIM_TimeBaseStructure.TIM_CounterMode= TIM_CounterMode_Up;  
         TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); /

         TIM_ITConfig( TIM3,      TIM_IT_Update ,     ENABLE  );
         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);      
         NVIC_InitStructure.NVIC_IRQChannel =TIM3_IRQn;  
         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0;  
         NVIC_InitStructure.NVIC_IRQChannelSubPriority= 3;  
         NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
         NVIC_Init(&NVIC_InitStructure);  //

         TIM_Cmd(TIM3,ENABLE);  //
                                                                  }
//定时器3中断服务程序
void TIM3_IRQHandler(void)   //TIM3中断
{
                                     if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
                                     {
                                               TIM_ClearITPendingBit(TIM3,TIM_IT_Update);  //清除TIMx的中断待处理位:TIM 中断源
                                               TIM_SetCompare1(TIM2,Duty[count]);
                                                      count++;  
                                                        if(count==num)  
                                                                 {  
                                                                           count=0;  
                                                                 }  
                                     }
}






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

使用道具 举报

12

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-7-14
在线时间
23 小时
 楼主| 发表于 2015-12-30 10:13:49 | 显示全部楼层
回复 支持 反对

使用道具 举报

8

主题

55

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2015-12-30
在线时间
76 小时
发表于 2015-12-30 16:01:51 | 显示全部楼层
哥们,你没有按版规执行,你应该在提问版提问,你这是在分享版提问,所以。。。。
回复 支持 反对

使用道具 举报

12

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-7-14
在线时间
23 小时
 楼主| 发表于 2016-1-13 13:24:44 | 显示全部楼层
jlufuhua 发表于 2015-12-30 16:01
哥们,你没有按版规执行,你应该在提问版提问,你这是在分享版提问,所以。。。。

好吧 原来是这样,谢谢了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-14 17:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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